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)
-   -   Querys Y Locate (https://www.clubdelphi.com/foros/showthread.php?t=10846)

el_enigma1 31-05-2004 11:39:35

Querys Y Locate
 
Estoy usando dos querys, uno para seleccionar algun cliente y otro para mostrar todos los clientes
anteriormente tenia
Código Delphi [-]
QueryBuscaCliente.SQL.Add(
'select CL.CVECLIENTE, CL.NOMBRE, CL.RFC, CL.CALLE, '+ 
'CL.COLONIA, CL.CP, CL.CIUDAD, CL.CLASE, CL.REPRESENTANTE, '+
'CL.TELEFONO, CL.CVECREDITO, CL.ACTIVO, CR.DESCRIPCION, '+
'CR.DURACION, CR.CREDITO from TCLIENTE CL, TCREDITO CR '+
'where (CL.CVECLIENTE starting(:I_CVECLIENTE)) and '+
'(CL.CVECREDITO = CR.CVECREDITO);');
y
Código Delphi [-]
QueryClienteAll.Locate('CVECLIENTE',Edit.Text,[loCaseInsensitive,loPartialKey]);
para situar el cursor de un dbGrid en el registro que coincida parcial o totalmente con lo que tiene el Edit
el valor del parametro I_CVECLIENTE es tambien el del Edit, cuando escribo en el Edit todo funciona bien el QueryBuscaCliente hace su trabajo asi como el QueryClienteAll se situa en el registro que coincide parcial o totalmente, el problema es que al cambiar el
QueryBuscaCliente en lugar de poner (CL.CVECLIENTE starting(:I_CVECLIENTE)) pongo (CL.CVECLIENTE =(:I_CVECLIENTE))
quedando de esta manera

Código Delphi [-]
QueryBuscaCliente.SQL.Add(
'select CL.CVECLIENTE, CL.NOMBRE, CL.RFC, CL.CALLE, '+
'CL.COLONIA, CL.CP, CL.CIUDAD, CL.CLASE, CL.REPRESENTANTE, '+
'CL.TELEFONO, CL.CVECREDITO, CL.ACTIVO, CR.DESCRIPCION, ' + 
'CR.DURACION, CR.CREDITO from TCLIENTE CL, TCREDITO CR ' + 
'where (CL.CVECLIENTE =(:I_CVECLIENTE)) and ' + 
'(CL.CVECREDITO = CR.CVECREDITO);');

de esta manera el
Código Delphi [-]
QueryClienteAll.Locate'CVECLIENTE',Edit.Text, loCaseInsensitive,loPartialKey]);
ya no funciona correctamente ya que solo se situa en un registro solo si coincide totalmente el Contenido del Edit con el Field CVECLIENTE.
Alguna sugerencia de cual podria ser la solucion para que en este caso tambien haga una busqueda parcial.
Estoy usando interbase y Delphi 5.
De antemano gracias.

[i]jachguate: he editado tu mensaje para partir las líneas en valores que no hagan dificil la navegación.

roman 31-05-2004 15:56:00

De verdad te recomiendo que organices un poco más la exposición de tu mensaje ya que cuesta trabajo leerlo. Usa las etiquetas de formato [ delphi ], [ code ] o [ sql ] según convenga. Más información en el aviso que se encuentra al comienzo de este foro.

// Saludos

jachguate 31-05-2004 16:38:52

No entiendo porque queres cambiar algo que funciona correctamente... estas violando una regla de oro: Si funciona, no lo toques. :D

el_enigma1 03-06-2004 07:40:52

Cita:

Empezado por jachguate
No entiendo porque queres cambiar algo que funciona correctamente... estas violando una regla de oro: Si funciona, no lo toques. :D

Bueno mira lo que pasa es que en la misma forma se da de alta, modifica o se borra, el caso es que si yo ya tengo la clave 10 y quiero dar de alta la clave 1 pues como es starting me seleccionara la clave 10 junto con los datos relacionados.
Por eso la cambie, para que en la primera busqueda sea igual y si no existe poder darla de alta y en la segunda con el Locate se valla al registro que comience con lo que tiene el edit.

jachguate 03-06-2004 10:11:47

De cualquier forma no queda claro cual es tu problema. A mi me parece que, para comenzar, si usas claves numéricas, el tipo de dato debe ser numérico y los buscas en condición de igualdad.

Hasta luego.

;)

el_enigma1 06-06-2004 18:19:35

Cita:

Empezado por jachguate
De cualquier forma no queda claro cual es tu problema. A mi me parece que, para comenzar, si usas claves numéricas, el tipo de dato debe ser numérico y los buscas en condición de igualdad.

Hasta luego.

;)

Hola! La verdad no entendi que me quisiste decir, pero el problema es que desde que cambie el query1 de starting por igual el locate del query2 es el que no me funciona ya que el query1 hace lo quiero(si existe una clave muestra datos y si no, se puede dar de alta), pero se supone que al usar el segundo query debe de hacer una busqueda para encontrar la clave que coincida parcial o tatalmente y no lo hace hasta que coincide totaltmente

se supone que loPartialKey es para que haga una busqueda parcial pero no lo hace
Código Delphi [-]
 QueryClienteAll.Locate'CVECLIENTE',Edit.Text, [loCaseInsensitive,loPartialKey]);

Se me olvidaba, habia hecho esto pero igual no hacia lo que queria

Código Delphi [-]
 
if Edit.Text <> '' then
QueryClienteAll.Locate'CVECLIENTE',StrToInt(Edit.Text), [loCaseInsensitive,loPartialKey]);

jachguate 06-06-2004 20:24:01

Si el campo es numérico, no creo que este definida una busqueda "parcial" sobre este campo... y de cualquier forma esta no tendria sentido.

Quizas estes tratando de darle a tu programa una funcionalidad innecesaria. Si el campo es de texto, entonces el locate debiera funcionar, independientemente de la sentencia SQL usada para obtener el conjunto de datos.

Hasta luego.

;)

el_enigma1 09-06-2004 23:09:51

Query y Locate
 
Si definitivamente en númerico no funciona, en texto si. Lo raro es que si se usa el query con starting si, bueno mejor lo dejo por la paz no tiene caso.
Gracias por la ayuda.


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

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