Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Zeos Acces - ¿Como buscar registros? (https://www.clubdelphi.com/foros/showthread.php?t=45129)

ANDRES86 23-06-2007 08:30:47

Zeos Acces - ¿Como buscar registros?
 
Hola Todos

Estoy trabajando con el Zeos Acces para hacer la conexion por red entre MYsql y Delphi, hasta el momento me ha trabajado muy bien, el problema es el Zeos Acces no tiene el tan valioso findkey, Alguien sabe entonces como se buscan registros con este componente.

Lepe 23-06-2007 13:48:14

Por supuesto:
Código Delphi [-]
query1.sql.text := 'select * from tabla where claveprimaria = :clave'
query1.parambyname('clave').AsXXXX := lo que sea
query1.Open;

Olvídate del findkey y locate en estos Sistemas Gestores de Bases de Datos (SGBBDD). Aquí se trata de buscar solo el registro que hace falta, nada de traer al ordenador cliente los 3 millones de registros de la tabla para después usar un Locate o Findkey.

Saludos

AzidRain 23-06-2007 17:04:00

No coincido Lepe, hay ocasiones en que se requiere hacer una sub-búsqueda en el set de registros que se trajeron de un Query. Ahi si es válido el findkey o locate.

Digamos que tienes una tabla "clientes" y quieres traer todos los clientes con ventas en este mes. Haces el query SQL y los traes. Ahora bien, ya tienes ese set de datos y ahora quieres encontrar un nombre en particular. Pues ahi si se puede usar un findkey o locate que será más rápido que volver a hacer el query.

Las ZDataset si trae locate y findkey pues descienden de TDAtaset.

ANDRES86 23-06-2007 20:17:29

gracias por las respuestas, mira pues el Zquery no se me hace muy familiar para mi, me puedes coloborar explicandome como lo conecto a Ztable es que lo hago y no me funciona, y respecto a ZDataset pues no lo encuentro sinseramente, ¿ me podes decir donde esta?.

Lepe 23-06-2007 21:06:53

Estaba pensando en otras situaciones. Muy de acuerdo contigo AzidRain.

El ZDataset, imagina que son 4 Zquerys en un componente. Una para cuando quieres insertar, otra para eliminar, otra para refrescar el registro actual y por último otra Zquery para modificar los datos.

busca información sobre el SQL, un ejemplo:
Código SQL [-]
insert into Clientes (idCliente, nombreCliente) Values (:idcliente, :nombreCliente)

update Clientes set idCliente = :idCliente, nombreCliente = :nombreCliente where idcliente = :old_idcliente

delete from clientes where idcliente = :old_idcliente

// refresh:
select idCliente, nombrecliente where idcliente = :old_idcliente

//select:
select idCliente, nombrecliente where idcliente = :idcliente
doble clic a ZDataset, boton derecho y añade los campos.
Enlaza ese ZDataset con tu TZTransaction, usa un DBNavigator y unos edits enlazados a los campos de este ZDAtaset. Listo, ya puedes insertar, borrar, modificar y refrescar desde la tabla. Lo que has ganado, es que solo viajará 1 registro por la red (el que quieres modificar).

Edito: usar la etiqueta noparse para las caritas dentro del código sql ;)

Saludos

AzidRain 24-06-2007 02:05:15

Fijate que yo me encontré sin querer una chapuza:

"select * from clientes where numcliente is null"

Obviamente me devuelve un set vacio, pero que crees, si haces un insert, efectivamente agregas un registro a la tabla.

Respondiendo a nuestro amigo: ZTable es un ZQuery Modificado, la diferencia es que ZTable siempre hace un select * from...o sea se trae todos los registros de la tabla sin importar su número...En cambio en ZQuery, puedes modificar su propiedad SQL para que contenga el select que necesites (puedes ser un insert o un delete), aqui es donde radica su potencia.

Se usa de forma idéntica a cualquier otra tabla y tiene casi los mismos métodos que ZTable.

Código Delphi [-]
Procedure demoQuery;
 var MiQuery:TZQuery;
Begin
  MiQuery := TZQuery.Create(nil);
  Try
    MiQuery.Connection := LaConexion; //Asumimos que ya tienes el componente  TZConnection debidamente configurado y creado
    MiQuery.SQL.Add('select * from clientes'); 
    MiQuery.Open;
     //---
     // Hacer algo con los datos devueltos
    // 
  Finally
    MiQuery.Close;
  end; 
end;

Obviamente la propiedad SQL normalmente contendrá cosas mas complicadas que un select *.

Jose Roman 10-04-2018 01:48:37

Gracias por tu ayuda, para futuro y refencia de otros segun Embacadero genera un error si se cierra el Query, como debe quedar y que a mi me funciono segun el foro es:
Código SQL [-]
  qTpPd.DisableControls;
  BM := qTpPd.GetBookmark;
  qTpPd.Refresh;
  qTpPd.Bookmark := BM;
  qTpPd.EnableControls;

Casimiro Notevi 10-04-2018 10:22:20

Está bien recordárselo 11 años después :)


La franja horaria es GMT +2. Ahora son las 22:59:40.

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