PDA

Ver la Versión Completa : problema con los query


ercrizeporta
28-05-2007, 19:42:22
hola, voy a mostrar el codigo que utilizo y ahora haré mi consulta sobre el...

function CreateQuery (const TheSql:string):TQuery;
begin
Result := TQuery.Create(nil);
Result.Transaction := tu componente transaction
Result.Database := tu componente database;
Result.sql.text := TheSql;
end;

procedure ejemplo();
var qry:Tquery;
begin
q := Createqry('select * from tabla ');
q.ExecSql;
q.Free;
end;


Mi pregunta es, una vez que en q tengo los datos de la tabla que comando debo de utilizar para poder acceder a ver esos datos???
pensaba en hacer q['nombrecolumna'], pero no tengo definida ninguna columna en el query y no se definirla así que me he quedado un poco atascado aquí...


muchas gracias!!

jhonny
28-05-2007, 20:02:26
Bueno, para poder ver esos datos puedes usar varios métodos, podrías asignar por ejemplo tu Query a un DBGrid...
En este caso y debido a que estas haciendo una consulta de tipo "Select" deberías cambiar un poco el método Ejemplo(); y colocarlo asi:


procedure ejemplo();
var qry:Tquery;
begin
q := Createqry('select * from tabla ');
q.Open;//Aqui cambien el ExecSQL por OPEN
q.Free;
end;
y para asignar esa consulta a un Grid seria con los siguientes pasos:
1: Coloca un TDBGrid y un TDataSource en tu form.
2: Asigna ese TDataSource a la Grid por medio de su propiedad DataSource.
3: Modifica el método Ejemplo(); asi :

procedure ejemplo();
var qry:Tquery;
begin
q := Createqry('select * from tabla ');
q.Close;//Siempre acostumbro cerrar antes de abrir.
q.Open;//Aqui cambien el ExecSQL por OPEN
DataSource1.DataSet := q;
end;
Y Listo asi debería mostrarte los datos, no le hice un q.free porque si lo liberas pues no alcanzaras a ver los datos en el DBGrid ya que se desaparecerían rápidamente. Espero me haya hecho entender.

Lepe
28-05-2007, 21:22:09
Siempre podrás usar q.FieldByname('nombrecampo').Asxxxx


q.Close;//Siempre acostumbro cerrar antes de abrir.
Buena costumbre, pero en este caso particular no tiene sentido porque de hecho, se ha creado en memoria esa consulta (por tanto no existía con anterioridad). dicho de otra forma, esa línea no haría falta.

Habría que tener cuidado de no llamar al procedimiento "ejemplo" 2 veces, porque se crearía 2 querys, la primera de ellas, se quedaría perdida en memoria.

Saludos