PDA

Ver la Versión Completa : Como puedo hacer una consulta con un Query y que se actualize en el DBGrid


olbeup
01-08-2005, 14:25:14
Hola compañeros de ClubDelphi,

Tengo un problema que me trae de cabeza, estoy realizando una consulta en SQL que es la siguiente:

Select * From Ventas Where IdTicket=78;

Tengo en el formulario un Query, DBGrid, Table, DataSource, todos estan conectado bien entre si, pero el cursor (>) no se mueve de su sito la base de datos esta abierta con todos los registros en pantalla, la base de datos es access.:o

Neftali [Germán.Estévez]
01-08-2005, 14:33:56
Utiliza un Locate o FindKey con el TTable; Eso buscará el registro y te posicionará en el. Y automáticamente verás como el el DBGrid el puntero (>) va a ese registro.

olbeup
01-08-2005, 14:56:58
http://www.clubdelphi.com/foros/image.php?u=3561&dateline=1090400110 (http://www.clubdelphi.com/foros/member.php?u=3561)Neftali (http://www.clubdelphi.com/foros/member.php?u=3561) http://www.clubdelphi.com/foros/images/statusicon/user_offline.gif vbmenu_register("postmenu_99363", true);
Moderador

Gracias NefTali por tan rapida respuesta,
Pero no se puede hacer cun sql :rolleyes: , gracias.

Saludos.

Neftali [Germán.Estévez]
01-08-2005, 15:21:03
¿Exactamente, qué quieres hacer con un SQL?

Puedes hacer la búsqueda con SQL, pero si quieres que en la tabla se te active el registro que has encontrado debes hacer las búsqued en el TTable (Locate o FindKey)

O tal vez te estoy entendiendo mal...

olbeup
01-08-2005, 15:43:39
Ya se la forma de encontrar los registros que es (Locate, Findkey o FindNearest), que quiero hacer con el registro, solo que el DBGrid apunte al registro que he seleccionado, solo eso, pero sino se puede hacer con SQL, pues entonces usare (Locate, Findkey o FindNearest), te voy a mostrar lo que estoy haciendo.

ejemplo:

y el Memo1 Contiene 'Select * Form Ventas Where IdTicket=78;'

Label3.Caption := 'Ejecutando SQL, Espere...';
Label3.Refresh;
DataModule4.Query1.SQL.Clear;
DataModule4.Query1.SQL.Text := Memo1.Text;
DataModule4.Query1.DatabaseName := 'DBTabla1';
DataModule4.Query1.DataSource := DataModule4.DataSource1;
DataModule4.Query1.Prepare;
DataModule4.Query1.ExecSQL;
Label3.Caption := '';

y no quiero utilizar (Locate, Findkey o FindNearest), porque no quiero, porque estoy empezando con SQL y estoy averiguando si con SQL se puede hacer todo o casi todo.;)

Lepe
01-08-2005, 15:51:54
Primero: En consultas donde hagas un SELECT, debes abrir la consulta con Query1.Open; Cuando hagas un INSERT, UPDATE o DELETE, entonces si debes usar ExecSql.

Segundo: Si ese query1 tambien lo utilizas para un grid, automaticamente el grid mostrará los nuevos resultados de esa consulta, que para el caso concreto, solo mostrará el registro de ticket 78

Al abrir una consulta con .Open, por defecto se quedará en el primer registro; si quieres moverte de registro por código, no te queda más remedio que usar los métodos propios del Query:
- First
- Prior
- Next
- Last
- Locate, findkey ....

Un saludo

Neftali [Germán.Estévez]
01-08-2005, 16:44:44
Tu problema es que muestras los registros en el DBGrid con un DataSet (que es la tabla) y haces una búsqueda sobre la tabla con otro DataSet (Query);
No puedes juntar ambos, puesto que son DataSets distintos, uno devuelve x registros (tabla) y otro te devuelve 1 (el query);

Con SQL puedes obtener DataSets, pero no te puedes realizar recorridos sobre ellos (SQL no es para eso); Para eso debes usar métodos del TDataset, que son los que te han comentado (Firsm Next,... para secuencial y Locate/FindKey para búsquedas).

olbeup
01-08-2005, 17:37:28
Gracias NefTali y Lepe, por Vuestras respuestas, me han ayudado bastante, bastante, bastante.


Gracias, gracias, gracias.

Saludos.
;)