Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Localizar datos con Firebird (https://www.clubdelphi.com/foros/showthread.php?t=32398)

joanajj 05-06-2006 14:05:59

Localizar datos con Firebird
 
Buenas a todos, tengo una preguntilla:

Para localizar algún dato dentro de la BD Firebird, utilizo el típico Locate, y la cuestión es que si hay algún procedimiento más rápido que el Locate o es lo único que hay.


Un saludo...

Casimiro Notevi 05-06-2006 14:38:04

usa sql, por ejemplo un ibdataset, en su propiedad selectsql pones la consulta, algo así:

Código SQL [-]
ibdataset1.close;
ibdataset1.selectsql.text := 'select * from tbclientes where codigo= :quecodigo';
ibdataset1.ParamByName('codigo').asinteger:= inttostr(edit1.text);
ibdataset1.open

celades1 05-06-2006 14:39:41

Hola

El locate solo lo utilizo cuando estoy un grid y debo refrescar datos ( o sea abrir y cerrar el dataset) que el cursor se posicione en el registro original antes del refresco, capturo el valor Pk en una variable local cierro, abro y locate al valor guardado.
Es evidente que el rendimiento del locate sera tanto mejor cuantos menos registros haya en el grid (como ya sabes la filosofia sql no es llevar toda una tabla al grid sino los menos registros necesarios que el usuario precise y si las necesidades canvian datos de otro año etc, generar de nuevo la consulta).
No lo utilizo nunca mas, ya que para buscar cosas, canviar valores de filtro de una consulta, siempre cierro el dataset reconstruyo el selectslq.text o sql.text paso los parametros y abro de nuevo.
Yo creo que la filosofia de firebird es utizar sql, ya sea con IBdataset,fibdataset etc para servir a un grid, o IBquery,Fibquery etc para que encontrar un valor concreto de una consulta.

Espero haberte aclarado algo

Saludos

joanajj 05-06-2006 18:04:38

más claro, pero algo más
 
Efectivamente, tenéis razón los dos, pero con locate puedo localizar un por ej. artículo de forma que voy escribiendo, y a medida que pulso una tecla me localiza por ese tedit. Ej.

Pongo un Tedit y en el evento onkeypress verifico que al pulsar enter localize en la BD el valor actual de ese Tedit, usando el parámetro partialkey de forma que por ejemplo localiza el artículo 'moned' (monedero) y se coloque en la primera coincidencia, No sé si me habéis entendido, y si con SQL se puede hacer una busqueda de este tipo.
Es evitar tener que poner todo el nombre completo del artículo para localizarlo, solo con poner un trozo que se posicione el cursor , y si escribo una letra más se posicione en el siguiente más próximo.

Un saludo...

celades1 05-06-2006 18:48:53

Hola

Claro que se puede hacer incluso para cada letra que teclees, en el evento onkeypress lanzas un cierra_abre de las tablas modificando el sql

si solo quieres codigos que empiecen por el texto del edit seria
Código Delphi [-]
sql.text:= ' select * from tabla where codi starting '+quotedstr(edit.text);

o bien si quieres todo codigo que tenga esa fraccion de texto
Código Delphi [-]
sql.text:= ' select * from tabla where codi like '+quotedstr('%'+edit.text+'%');

saludos

joanajj 06-06-2006 00:11:42

Clausula starting ?
 
Buenas de nuevo, estoy buscando la clausula Starting que has situado dentro del Select y no la veo documetada. Es propia de Interbase ??? si es así, me puedes decir donde encontrar las clausulas propias de Interbase y Firebird que no forman parte del SQL/99.

Muchas gracias...


La franja horaria es GMT +2. Ahora son las 21:19:50.

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