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)
-   -   buscar campo de Query en Table... (https://www.clubdelphi.com/foros/showthread.php?t=69976)

Pensa2r 22-09-2010 16:03:29

buscar campo de Query en Table...
 
Hola soy muy poco experto en el tema y necesito ayuda, agradecer de antemano la solución que podaís dar.
Necesito hacer lo siguiente:
Al dar clic a un DBGrid que se vincula a un ADOQuery, este coja el campo este y lo busque en una tabla ADOTable de la misma que he sacado datos para el query.
No se si me he explicado.
Un saludo.

Casimiro Noteví 22-09-2010 16:33:45

Cita:

Empezado por Pensa2r (Mensaje 377135)
[..] Al dar clic a un DBGrid que se vincula a un ADOQuery, este coja el campo este y lo busque en una tabla ADOTable de la misma que he sacado datos para el query.

Cita:

Empezado por Pensa2r (Mensaje 377135)
No se si me he explicado. Un saludo.

A mí me ha parecido un trabalenguas :)

¿Qué es lo que quieres conseguir exactamente?

ElDioni 22-09-2010 17:09:09

Yo tampoco lo he entendido muy bien pero si te puedo decir que al pulsar en una línea de un grid que está ligada a un adoquery es como si seleccionaras el registro en el query por lo que solo tendrías que hacer en el envent onclick del dbgrid:

Código Delphi [-]
adoquery1.fieldbyname('elnombredelcampo').AsString;

para acceder al valor del campo que quieras en la línea de registro que tenías señalada en el dbgrid.

Un saludo.

Caral 22-09-2010 18:17:41

Hola
Me parece que es un poco repetir, no?.
Si tienes una consulta en en query por que no hacer la busqueda ahi mismo?.
Claro, esto depende de lo que necesites, pero me extraña que se quiera BUSCAR el dato en un ADOTable, osea, se tendria que filtrar.
Si nos explicas algo mas, con gusto haremos el milagro......
Saludos

Pensa2r 22-09-2010 18:19:18

GRACIAS por el interes y perdonad mi mala expresión.
A ver si ahora lo hago mejor...
tengo un Query que coge datos de una tabla reparaciones, de una tabla clientes y de una tabla aparato. Al hacer clic en el DBGrid que ha cargado este query, en el evento onclick quiero que coja el valor de código reparaciones desde este query y me lo busque en la tabla reparaciones posicionandome en la tabla reparaciones en el mismo código reparaciones del query.
Algo como el gotonearest pero en el query no me vale, o eso creo.
...creo que aun esta la cosa liada...jajaja..
GRACIAS

Caral 22-09-2010 18:24:20

Hola
Facil, sin usar nada de nada solo un sinple ADD a la consulta.
Simple, facil, llano, caminante, etc. etc.....
Saludos

Pensa2r 22-09-2010 18:27:57

GRACIAS Caral pero como hago ese ADD, repito soy muy novato en sql y bases de datos. Si me puedes dejar algún ejemplo..
Un saludo.

Caral 22-09-2010 18:29:43

Hola
Es muy sencillo.
Empecemos por que nos muestres la consulta sql que usas en el ADOQuery.
Con esta consulta te explico como obtendrás ese dato en el evento que quieras.
Saludos

Pensa2r 22-09-2010 18:32:42

ok esto es lo que tengo:
Cita:

SELECT REPARACIONES.ESTADO,REPARACIONES.FACTURA,REPARACIONES.COD_REPARACIONES,CLIENTE.EMPRESA,APARATO.APARA TO,APARATO.MARCA,APARATO.MODELO,REPARACIONES.NUM_SERIE,APARATO.CHASIS,REPARACIONES.FECHA_RESGUARDO,R EPARACIONES.COD_CLIENTE,REPARACIONES.COD_APARATO
FROM REPARACIONES,CLIENTE,APARATO
WHERE (CLIENTE.COD_CLIENTE = REPARACIONES.COD_CLIENTE) AND
(APARATO.COD_APARATO = REPARACIONES.COD_APARATO)

Caral 22-09-2010 18:36:47

Hola
Bien:
Dejame entender las cosas bien.
Tienes un dbgrid.
Este DBgrid es cargado con los datos del adoquery.
Quieres que al dar click :
1- Que el dato se muestre en otro lado
2- Que el dato sea buscado en la tabla X?
3- Que ?

Pregunta adicional: Que BD usas?.
Saludos

Caro 22-09-2010 18:41:20

Hola Pensa2r, puedes utilizar la función Locate de tu AdoTable pasandole el codigo de reparación que recuperas de tu AdoQuery:

Código Delphi [-]
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  Codigo := AdoQuery.FieldByName('COD_REPARACIONES').AsString;
  AdoTable.Locate('COD_REPARACIONES',Codigo,[loCaseInsensitive]);
  ....................................

Saluditos

Caro 22-09-2010 18:43:37

Cita:

Empezado por Caral (Mensaje 377177)
Hola
Bien:
Dejame entender las cosas bien.
Tienes un dbgrid.
Este DBgrid es cargado con los datos del adoquery.
Quieres que al dar click :
1- Que el dato se muestre en otro lado
2- Que el dato sea buscado en la tabla X?
3- Que ?

Pregunta adicional: Que BD usas?.

Hola Caral :), lo que yo entiendo es que tiene en el DBGrid datos de 3 tablas y al hacer click en un registro, se posicione en el registro que corresponde en su ADoTable de una de sus tablas.

Saluditos

Caral 22-09-2010 18:46:04

Hola Caro.
Si eso estoy entendiendo yo tambien, lo que pasa es que estoy tratando de ver como podemos elminar el AdoTable y usar la misma consulta para que nos traiga lo que necesita.
Ya sabes, complicandome la vida...........
Saludos

Pensa2r 22-09-2010 18:47:00

si eso, al dar clic en el DBGrid que tiene cargado el query, en la fila del DBGrid cogera un dato de cod_reparaciones y este me lo busca en la tabla reparaciones.
base de datos es mysql desde el mismo ordenador instalada con xampp.

Pensa2r 22-09-2010 18:56:18

Probado lo que comenta CAROL :
Cita:


begin
Codigo := Modulo_DATOS.QueryREPARACIONES.FieldByName('COD_REPARACIONES').AsString;
Modulo_DATOS.TablaREPARACIONES.Locate('COD_REPARACIONES',Codigo,[]);
end;

pero no se inmuta la tabla, la he puesto en otro DBGrid para ver su funcionamiento.

Caral 22-09-2010 18:58:39

Hola
La verdad a mi me gustaria ver el programa y la BD que me imagino es Access.
Si pudieras subirla a algun lado, seria muy bueno ver lo que estas haciendo.
Saludos

Pensa2r 22-09-2010 19:07:56

es mysql creada en phpmyadmin del mismo instalador xampp.
a ver como puedo subir esto, aunque en realidad lo que he echo aun no es nada solo eso..
la idea es un programa taller donde creo una tabla general de reparaciones y luego la indexo con tabla cliente y aparato cor su codigo principal de cada tabla.
El caso es que tengo un programa hace mucho tiempo en DB paradox pero la queria cambiar a mysql, para eso de ver si luego esos datos los puedo ver tambien en un navegador por php.

Caro 22-09-2010 19:09:05

Cita:

Empezado por Pensa2r (Mensaje 377185)
Probado lo que comenta CAROL :

pero no se inmuta la tabla, la he puesto en otro DBGrid para ver su funcionamiento.

Hola de nuevo, prueba así:

Código Delphi [-]
Codigo := Trim(Modulo_DATOS.QueryREPARACIONES.FieldByName('COD_REPARACIONES').AsString);
if Modulo_DATOS.TablaREPARACIONES.Locate('COD_REPARACIONES',Codigo,[]) then
  showmessage('coinciden los datos')
else
 showmessage('no coinciden');

y dinos que mensaje te muestra.

Saluditos

Caro 22-09-2010 19:11:04

Cita:

Empezado por Caral (Mensaje 377182)
Si eso estoy entendiendo yo tambien, lo que pasa es que estoy tratando de ver como podemos elminar el AdoTable y usar la misma consulta para que nos traiga lo que necesita.
Ya sabes, complicandome la vida...........

;).

Saluditos

Pensa2r 22-09-2010 19:20:14

Cita:

Empezado por Caro (Mensaje 377188)
Hola de nuevo, prueba así:

Código Delphi [-]
y dinos que mensaje te muestra.

Saluditos

COINCIDEN LOS DATOS.

Caro 22-09-2010 19:25:09

Cita:

Empezado por Pensa2r (Mensaje 377192)
COINCIDEN LOS DATOS.

entonces, eso quiere decir que ya funciona.

Saluditos

Pensa2r 22-09-2010 19:35:31

si eso parece, o eso es lo que me tiene liado pero no se mueve la tabla reparaciones del primer registro ni el dbgrid que puse para esta tabla.
No lo entiendo, supuestamente el locate lo busca y lo posiciona en este no?
o tendria que usar algo como el bookmark?
al igual he variado algo en la tabla que no se que es.....
GRACIAS de nuevo.

Caro 22-09-2010 20:20:11

Hola

Cita:

Empezado por Pensa2r (Mensaje 377197)
si eso parece, o eso es lo que me tiene liado pero no se mueve la tabla reparaciones del primer registro ni el dbgrid que puse para esta tabla.
No lo entiendo, supuestamente el locate lo busca y lo posiciona en este no?

Si, lo busca y se posiciona en ese registro, con el mensaje que te da si lo esta encontrando y debería posicionarse en dicho registro.

Nose, talvez tienes algún codigo que hace que regrese al primer registro o tu DBGrid no esta enlazado a tu AdoTable con el que estas haciendo el Locate.

Cita:

Empezado por Pensa2r (Mensaje 377197)
o tendria que usar algo como el bookmark?

En este caso no necesitas el bookmark.

Saluditos

Caral 22-09-2010 21:22:50

Hola
Me da la impresion de que tiene DOS dbgrid.
1 enlazado al adquery y 1 enlazado al adotable.
Lo que creo que pretende es hacer un master detail sin master detail.
Ahora por que no hacerlo si es un query y un table?.
Saludos

Pensa2r 22-09-2010 23:22:49

Cita:

Empezado por Caral (Mensaje 377205)
Hola
Me da la impresion de que tiene DOS dbgrid.
1 enlazado al adquery y 1 enlazado al adotable.
Lo que creo que pretende es hacer un master detail sin master detail.
Ahora por que no hacerlo si es un query y un table?.
Saludos

Hola de nuevo eso es creo, pero no me deja hacer el master entre tabla y query, o no se como hacerlo, o no estoy seguro de que es el master detail.
Yo he hecho esto entre tablas pero no se porque no puedo entre query y tabla.

Caral 22-09-2010 23:33:57

Hola
Vamos a ver si te lo explico.
Primero tenemos el query, este muestra ciertos campos, estos campos los quieres ligar con un Table, entonces para eso se una un masterdetail, como se ligan?:
1- el query tiene varios campos
dale doble click al query, esto te abrira una pantallita pequeña, con boton derecho busca add y coloca todos los campos.
2- Lo mismo en el table
3- tienes DOS (2) datasource, 1 para el query y otro para el table.
4- Posicionate en el table y busca el procedimiento Mastersource, ahi coloca el datasource del query (saldran los dos, usa el del query), con esto ya estas ligando los dos.
5- Posicionate en el table y busca el procedimiento MasterFields, presiona el boton, te abrira una pantalla, ahi saldra la lista de los campos tanto del query como del table, busca los dos campos IGUALES que necesites para ligarlos.
Listo, ya esta hecho el master detail.
Por aqui tengo un ejemplo con access y aunque no con dos dbgrid si con masterdetail, si lo necesitas lo subo.
Saludos

Pensa2r 23-09-2010 00:25:19

GRACIAS Caral asi si he conseguido que me funcione, pero porque al hacer esto vuelve a no ir?:
Código Delphi [-]

DBGridPRINCIPAL.DataSource:=Modulo_DATOS.DataSourceQUERYREPARACIONES;
DBNavigator1.DataSource:=Modulo_DATOS.DataSourceQUERYREPARACIONES;
ello es porque uso el mismo DBGrid y DBNavigator para las tablas y el query.

Pensa2r 23-09-2010 01:15:51

Como se hace esto por código?...

Cita:

Empezado por Caral (Mensaje 377227)
4- Posicionate en el table y busca el procedimiento Mastersource, ahi coloca el datasource del query (saldran los dos, usa el del query), con esto ya estas ligando los dos.
5- Posicionate en el table y busca el procedimiento MasterFields, presiona el boton, te abrira una pantalla, ahi saldra la lista de los campos tanto del query como del table, busca los dos campos IGUALES que necesites para ligarlos.
Listo, ya esta hecho el master detail.

GRACIAS por todo y perdona mi ignorancia y pesadez...

es que llevo ya 3 semanas y no lo consigo, al final me decidi a preguntar, pero me da cosa mi poco nivel. Si ves Carol llevo mas tiempo registrado en este foro que usted pero mi nivel es muy bajo y por eso no participo tanto.
Aunque este tema me gusta mucho y lo que se es gracias a internet y horas...jejeje

Caral 23-09-2010 03:08:43

Hola
Por codigo?.
Código Delphi [-]
AdoTable1.Mastersource:= Datasource1; // se supone que es el datasource del query.
AdoTable1.MasterFields:= TuCampo;
No se si es lo que preguntas.
Saludos

Pensa2r 26-09-2010 23:01:22

GRACIAS por todo, pero aun sigo con problemas.
te cuento....
utilizo un DBGrid conectado a un datasource de un query y hay todo bien,
pero cuando actualizo la sql del query ya deja de estar conectado el DBGrid.

con este código no me carga la sql pero si deja la conexión con DBGrid
Código:

      with Modulo_DATOS.QueryCLIENTE do
        begin
          Close;
          Sql.Clear;
          Sql.Add('SELECT * FROM CLIENTE');
          Sql.Add('WHERE '+ComboBoxBUSCAR_CLIENTE.Text+'  LIKE '+QuotedStr('%'+editBUSCAR.Text+'%'));
          Open;

con este código me carga la sql pero me desconecta el DBGrid
Código:

      with Modulo_DATOS.QueryCLIENTE do
        begin
          Close;
          Sql.Clear;
          Sql.Add('SELECT * FROM CLIENTE');
          Sql.Add('WHERE '+ComboBoxBUSCAR_CLIENTE.Text+'  LIKE '+QuotedStr('%'+editBUSCAR.Text+'%'));
          Open;
--->>  DBGridCLIENTE.DataSource:= Modulo_DATOS.DataSourceQUERYCLIENTE;

alguien me dice como hacerlo mejor...GRACIAS
Espero me entendais.


La franja horaria es GMT +2. Ahora son las 12:20:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi