Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-09-2005
jorgito jorgito is offline
Miembro
 
Registrado: mar 2004
Posts: 25
Poder: 0
jorgito Va por buen camino
Question TQuery dentro de una funcion Function

Hola, estoy realizando una aplicacion para una base de datos, lo que deseo es llamar solamente a la funcion(dentro de esta denomino a q TQuery) con la consulta(sql) y la base de datos(db).
el codigo es el sgte.
Código:
 
function consulta(db:String;sql:String):String;
var
q:TQuery;
begin
 TQuery.Create(nil);
q.DataBaseName:=db;
q.close;
q.sql.clear;
q.sql.add(sql);
q.open;
end;
No me quiere aceptar me sale un error, esta algo mal o me falta completar algo.

Gracias...
Responder Con Cita
  #2  
Antiguo 25-09-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Aquí te pongo un ejemplo que he probado con una rejilla para visualizar los datos y ver que funciona correctamente.
Necesitas:
Un TdataSet
Una Rejilla conectada al anterior.

Código Delphi [-]
  unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, DbTables, Db, Grids, DBGrids;
  
  function consulta(db:String;Misql:String):String;
 
   type
    TForm1 = class(TForm)
      Button1: TButton;
      DBGrid1: TDBGrid;
      DataSource1: TDataSource;
      procedure Button1Click(Sender: TObject);
  
    private
      { Private declarations }
    public
      { Public declarations }
    end;
  
  var
    Form1: TForm1;
  
  implementation
  
  {$R *.DFM}
  
  function consulta(db:String;Misql:String):String;
  var
  q:TQuery;
  begin
  q:=Tquery.Create(Nil);
  q.close;
  q.sql.clear;
  q.DataBaseName:=db;
  q.sql.add(Misql);
  Form1.DataSource1.dataset:=q;
  q.open;
  end;
 
  procedure TForm1.Button1Click(Sender: TObject);
  var
  cSql:String;
  begin
  cSql:='Select * From Employee';
  Consulta('DbDemos',cSql);
  end;
  
  end.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 26-09-2005
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola compañeros, tengo unas preguntas sobre el código expuesto:

Marcos, ¿Qué pasa con el objeto TQuery si pulsas varias veces el botón?,
¿Cuando se libera la memoria asignada a la variable q?

jorjito, ¿Realmente hace falta que sea una función?
Creo que lo que quieres es cambiar el SQL de la consulta y lanzarla, ¿no?
Yo pondría un componente TQuery en el formulario y definiría un método para
inicializar y lanzar la consulta:

Código Delphi [-]
   type
    TForm1 = class(TForm)
      Button1: TButton;
      DBGrid1: TDBGrid;
      DataSource1: TDataSource;
      Query1: TQuery;
      procedure Button1Click(Sender: TObject);
  
    private
      procedure Consulta(db:String;sql:String); //Ponlo donde te interese...
    public
      { Public declarations }
    end;

...
...

procedure TForm1.Consulta(db:String;sql:String);
begin
  Query1.close;
  Query1.DataBaseName:=db;
  Query1.sql.clear;
  Query1.sql.add(sql);
  Query1.open;
end;

Salu2.
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #4  
Antiguo 26-09-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Bueno, lo primero decir que yo también soy partidario de utilizar un componente Tquery estático y pasarle el SQL en tiempo de ejecución, pero como la pregunta era esa respondí a la que se preguntaba.

Se supone que en el formulario hemos puesto en el evento OnClose:
Action:=CaFree;

Con lo cual cuando se cierre el mismo se destruirá todo su contenido.

En cuanto a pulsar repetidas veces el botón no le veo ningún problema más que la constante reasignación de la variable q.

Se puede hacer que dicho botón una vez pulsado quede como no disponible así evitaríamos las repetidas pulsaciones y el rearme de la consulta.

Código Delphi [-]
  procedure TForm1.Button1Click(Sender: TObject);
    var
    cSql:String;
    begin
    cSql:='Select * From Employee';
    Consulta('DbDemos',cSql);
    Button1.Enabled:=False
  end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 26-09-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Sin leer mas codigo sino el inicial.

Veo que no hay problemas si no que de que te sirve lo que hacer si no puedes acceder a el resultado ya que se esta quedando dentro de la funcion esto es valido para consulta d eaccion como insert , delete o update para un select deves devolver los resultados y para eso tienes dos opcion una que la function devuelva un tibquiery y la otra es pasarle el ib query y que este sea devuelto por referecia la primera opcion tiene el problema que el objeto se crea dentro y debes liberarlo fuera y la otra es que el objeto debe ser creado antes de ser padao tu decides.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:33:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi