Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error con una Query!! (https://www.clubdelphi.com/foros/showthread.php?t=57707)

Alsaca 25-06-2008 16:27:37

Error con una Query!!
 
Buenas tardes a todos/@. Mi post de más abajo está casi resuelto. Os comento otra duda que tengo.

Hago una busqueda con una Query desde un edit y me aparece los datos en un dbgrid, como hago para que al dar doble click sobre el cliente selecionado desde el dbgrid, me aparezca en el form principal que son dbedit. Porque cuando seleciono un registro, siempre me aparece el primero y no el que selecciono.


Saludos.

felipe88 25-06-2008 17:46:51

...y si haces de nuevo la consulta..? digo no...

Alsaca 25-06-2008 17:58:57

No entiedo lo que quieres decir, Felipe... puedes ser más explicito.

marcoszorrilla 25-06-2008 18:02:16

Sospecho que los DbEdits los tienes conectados a un TTable y tu estás interactuando con una Consulta, por lo tanto el registro que tu tengas en la consulta no tiene nada que ver con el que esté apuntando la tabla.

Un Solución es hacer que los DbEdits apunten a la consulta y no a la tabla.

Otra al abrir el formulario utilizar una búsqueda del tipo.

Código Delphi [-]
MiTabla.FindKey([MiquerCampo1.Value]);


O con Locate sino tienes índices declarados.
Un Saludo.

eduarcol 25-06-2008 18:02:52

seguro que tienes dos query distintas, una para mostrar informacion y otro para buscarlo. Deberias usar el mismo para los dos.

Alsaca 25-06-2008 18:12:31

Gracias a todos por la ayuda, aquí pongo el código de la consulta que hago:



query1.Close;
query1.SQL.Clear;
Query1.SQL.Add('select * from tclient where nomb like');
query1.SQL.add(quotedstr ('%' + edit1.text + '%'));
query1.Open;


Con esta consulta lo muestra en el dbgrid....


Saludos.

eduarcol 25-06-2008 18:19:34

Cita:

Empezado por Alsaca (Mensaje 296061)
Gracias a todos por la ayuda, aquí pongo el código de la consulta que hago:



query1.Close;
query1.SQL.Clear;
Query1.SQL.Add('select * from tclient where nomb like');
query1.SQL.add(quotedstr ('%' + edit1.text + '%'));
query1.Open;


Con esta consulta lo muestra en el dbgrid....


Saludos.

y en el formprincipal estan conectados al Query1 o a otro componente?

Alsaca 25-06-2008 18:28:48

En Form principal estan conectados a un datasource y este a una tabla...






Saludos.

eduarcol 25-06-2008 18:31:45

Cita:

Empezado por Alsaca (Mensaje 296076)
En Form principal estan conectados a un datasource y este a una tabla...






Saludos.

entonces ubica la solucion que te dio Marcos eso es lo que debes hacer...

Alsaca 25-06-2008 18:39:27

Eduarcol, he probado las consultas que dice marcos y no me funcionan. Pero si he probado esta consulta:


Cita:

tclient.indexname:='nom';
tclient.setkey;
tclient.fieldbyname('nomb').asstring:=edit1.text;
tclient.Gotonearest;
y te comento lo que me pasa con esta consulta, si tengo dos registros con el mismo nombre, por ejemplo, en el registro doce MANUEL y en el registro 35 MANUEL... si se selecciona este último, en el form principal muestra el registro número doce, es decir, si tienes dos, tres, cuatro registros con el mismo nombre, pues siempre muestra el primero.




Saludos.

eduarcol 25-06-2008 18:44:42

Cita:

Empezado por Alsaca (Mensaje 296087)
Eduarcol, he probado las consultas que dice marcos y no me funcionan. Pero si he probado esta consulta:




y te comento lo que me pasa con esta consulta, si tengo dos registros con el mismo nombre, por ejemplo, en el registro doce MANUEL y en el registro 35 MANUEL... si se selecciona este último, en el form principal muestra el registro número doce, es decir, si tienes dos, tres, cuatro registros con el mismo nombre, pues siempre muestra el primero.




Saludos.

entonces, si no tienes una clave mas especifica te va a tocar redireccionar los dbedit al query de la consulta en lugar del table, tal como te dijo Marcos, si lees bien su respuesta veras que hay esta la solucion

felipe88 25-06-2008 20:27:51

Ya que usas tablas no te recomiendo la idea mia, debido a que tendrias que cambiar el DataSource para apuntar al query, prueba entonces con el locate

Sin hembargo lo que pense era de que capturando de nuevo el nombre a traves del resultado, hacer de nuevo la consulta para que aparecieran en el form

tcp_ip_es 26-06-2008 08:18:33

Si la cosa es asi:

dbedit->datasource1->ttable
dgrid->datasource2->tquery

como bien dice felipe, yo haría un locate del registro que seleccionas en la dbgrid, de tal manera que:

Código:

// en el onclick o dblclick del dbgrid que apunta a tu tquery de búsqueda
//******Pongo Cod_Cliente por poner un campo, pero ahi debería ir tu campo
// clave de la tabla clientes *****
Tclientes.Locate('Cod_Cliente',tquery.fieldbyname('Cod_Cliente').asstring,[]);


Saludos, Tony

Alsaca 26-06-2008 17:33:41

Gracias a todo el mundo que habéis aportado vuestro granito de arena, lo he solucionado de la siguiente forma:



Código:


tclient.Fieldbyname('nomb').asstring:=fbuscli.Tclient.fieldbyname('nomb').asstring;



Saludos y muchas gracias.


La franja horaria es GMT +2. Ahora son las 16:22:57.

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