Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
ayuda con grids y bases de datos

Buenas, me pase por un foro el cual me ha ayudado mucho y da una idea de como hacer que varias gribs dependan de una en particular, el usuario que inicio el hilo dejo un ejemplo pero no dejo la contraseña depaso lo resolvio y no dijo como pero si dejo la idea, yo quisiera saber como hacer eso ya que me parece interesante.

CITO:

Me pasaron una aplicación en delphi bueno no me pasaron me la mostraron y yo le saque varias instantaneas que es muy buena pero ya esta en desuso por el tiempo que tiene desde que se programo, la parte interesante de ella es la siguiente:

Tiene tres grids la primera tiene data fija ( Todo con BD):

Grid 1

mesa 1 - facturado - ocupado
...............no..........no

mesa 2 - facturado - ocupado
...............no..........s1

mesa 3 - facturado - ocupado
...............no..........no

Grid 2

cliente - cedula - rif

grib 3

Productos -precio - total

=============================================================
Estas grids por ejemplo si yo le diera clic a mesa 2 la grid2 mostraria el cliente que la ocupa la grid tres lo que compro o esta consumiendo.


Yo lo que trate de hacer fue crear una tabla con los datos de la mesa mas un campo cedula y un campo factura

en otra tabla factura mas un campo cedula y mesa

entonces con un reloj cada 200ms hacia la cosulta de modo que mostrara los datos dependiendo de la mesa que seleccionara en ese momento.

Para un cliente nuevo lo que hice fue crear un boton que parara el primer reloj pudiendo realizar el registro en la bd pero alli el detalle se encuentra en que la grid productos cada fila al uno darle clic desplega los productos que estan en el stock en la fila de al lado dependiendo del producto al uno darle clic se desplegan los precios y al uno darle flechita abajo se puede agregar otro producto automaticamente, la verdad me gusto mucho ese sistema casi lo llegue a copiar mas tiene muchos problemitas y ademas esos relojes creo que no es lo ideal.

FIN CITA
Responder Con Cita
  #2  
Antiguo 29-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Cuál es la pregunta/duda/problema?
¿Tiene algo que ver con lazarus, freepascal o kylix?

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
Responder Con Cita
  #3  
Antiguo 29-09-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
La pregunta

Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Cuál es la pregunta/duda/problema?
¿Tiene algo que ver con lazarus, freepascal o kylix?

Bienvenido a clubdelphi, ¿ya leiste nuestra guia de estilo, gracias por tu colaboración
(LAZARUS) Pues la pregunta seria como hacer para que varias grib dependan de una asi como deje el comentario arriba.

El usuario de ese foro pregunto lo siguiente (lo que yo entendi)

Tres dbgrib.

Tres tablas en una db.

El dice que la primera gribs tiene data fija como la cantidad de mesas, pero al seleccionar la mesa que si esta ocupada en la grib 2 y 3 aparecen los datos relacionados con la mesa (cliente que la ocupa y lo que compro)

En resumen la dos de las grids dependen de la primera.

Como se podria hacer eso?
Responder Con Cita
  #4  
Antiguo 29-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Cada grid deberá estar pegada de un datasource, que a su vez deberá estar pegado a un dataset, donde cada dataset tendrá uno o varios eventos que descencadenen acciones en los demás, es de cir en el DataSet1.AfterRefresh, pones para que actualice los demás datasets con el valor que requieras pasar desde el DataSet1 a los demás, espero me haya hecho entender.

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 29-09-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por mightydragonlor Ver Mensaje
Cada grid deberá estar pegada de un datasource, que a su vez deberá estar pegado a un dataset, donde cada dataset tendrá uno o varios eventos que descencadenen acciones en los demás, es de cir en el DataSet1.AfterRefresh, pones para que actualice los demás datasets con el valor que requieras pasar desde el DataSet1 a los demás, espero me haya hecho entender.

Saludos.

Creo que si, voy a hacerlo y luego les comento
Responder Con Cita
  #6  
Antiguo 29-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Creo que estas exponiendo una situación en la cuál se aplicaría perfectamente una relación maestro/detalle. Veo dos posibilidades de organizarla, vos verás cuál te conviene para la situación.

Caso 1:
Código:
TABLA1     | TABLA2    | TABLA3  
-----------+-----------+-----------
ID         | ID        | ID 
DATO1      | DATO1     | DATO1
...        | ...       | ...
...        | TABLA1_ID | TABLA2_ID
Consulta para TABLA3:
Código SQL [-]
SELECT * FROM TABLA3 WHERE TABLA2_ID = :ID
Consulta para TABLA2:
Código SQL [-]
SELECT * FROM TABLA2 WHERE TABLA1_ID = :ID
Establece la propiedad DataSource de los componente que uses para las consultas:
Código Delphi [-]
  Query3.DataSource = DataSource2;
  Query2.DataSource = DataSource1;


Caso 2:
Código:
TABLA1     | TABLA2    | TABLA3  
-----------+-----------+-----------
ID         | ID        | ID 
DATO1      | DATO1     | DATO1
...        | ...       | ...
...        | TABLA1_ID | TABLA1_ID
Consulta para TABLA3:
Código SQL [-]
SELECT * FROM TABLA3 WHERE TABLA1_ID = :ID
Consulta para TABLA2:
Código SQL [-]
SELECT * FROM TABLA2 WHERE TABLA1_ID = :ID

Establece la propiedad DataSource de los componente que uses para las consultas:
Código Delphi [-]
  Query3.DataSource = DataSource1;
  Query2.DataSource = DataSource1;


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Creo que estas exponiendo una situación en la cuál se aplicaría perfectamente una relación maestro/detalle. Veo dos posibilidades de organizarla, vos verás cuál te conviene para la situación.

Saludos.
Estoy haciendolo dentro de un rato si es que me sale lo coloco aqui
Responder Con Cita
  #8  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por mightydragonlor Ver Mensaje
Cada grid deberá estar pegada de un datasource, que a su vez deberá estar pegado a un dataset, donde cada dataset tendrá uno o varios eventos que descencadenen acciones en los demás, es de cir en el DataSet1.AfterRefresh, pones para que actualice los demás datasets con el valor que requieras pasar desde el DataSet1 a los demás, espero me haya hecho entender.

Saludos.

Una pregunta, Si tengo varias Tablas en una BD y quiero mostrar los datos de cada una de ellas al mismo tiempo tengo que colocar como dices tú un datasource y un dataset para cada una verdad.
Responder Con Cita
  #9  
Antiguo 01-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, no repitas preguntas en distintos sitios, he borrado el otro hilo donde has hecho esta misma pregunta.
Responder Con Cita
  #10  
Antiguo 01-10-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Cita:
Empezado por pedrolazarus Ver Mensaje
Una pregunta, Si tengo varias Tablas en una BD y quiero mostrar los datos de cada una de ellas al mismo tiempo tengo que colocar como dices tú un datasource y un dataset para cada una verdad.
Si, efectivamente.

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #11  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Creo que estas exponiendo una situación en la cuál se aplicaría perfectamente una relación maestro/detalle. Veo dos posibilidades de organizarla, vos verás cuál te conviene para la situación.

Caso 1:
Código:
TABLA1     | TABLA2    | TABLA3  
-----------+-----------+-----------
ID         | ID        | ID 
DATO1      | DATO1     | DATO1
...        | ...       | ...
...        | TABLA1_ID | TABLA2_ID
Consulta para TABLA3:
Código SQL SELECT * FROM TABLA3 WHERE TABLA2_ID = :ID

Consulta para TABLA2:
Código SQL SELECT * FROM TABLA2 WHERE TABLA1_ID = :ID

Establece la propiedad DataSource de los componente que uses para las consultas:
Código Delphi Query3.DataSource = DataSource2; Query2.DataSource = DataSource1;

Saludos.
En cada uno de esos casos creo, se necesitaria un reloj que haga la consulta o no? Yo estoy tratando con varios dataset como dijo el otro compañero y utilizando el evento afterrefresh que no se utilizar pero estoy investigando XD
Responder Con Cita
  #12  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Thumbs up lo hice

Les cuento que no supe hacer lo del refresh y creo que seria la mejor forma.

Si me salio como dijo el compañero ecfisa pero utilizando un reloj como dijo el compañero del otro foro.

Lo que no me gusta y por lo que digo que es mejor el refresh es que la pantalla parpadea ya que el reloj esta haciendo la consulta cada 200ms, no se si eso afecta el rendimiento.
Responder Con Cita
  #13  
Antiguo 01-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
En cada uno de esos casos creo, se necesitaria un reloj que haga la consulta o no? Yo estoy tratando con varios dataset como dijo el otro compañero y utilizando el evento afterrefresh que no se utilizar pero estoy investigando XD
Hola pedrolazarus.

De ese modo, cuando un registro de TABLA1 esté seleccionado, automáticamente serán seleccionados todos los que estén en relación con él en TABLA2 y lo mismo para TABLA3.

Hablando visualmente, cuando selecciones un registro en el DBGRid1 (mesas) automáticamente se mostrarán los registros dependientes en DBGrid2(clientes) y DBGRid3(productos) que corresponden a la mesa seleccionada.

Es decir que no veo la necesidad de usar un Timer, excepto claro, que desearas hacer una especie de demo que cada determinado tiempo seleccione una mesa aleatoriamente.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola pedrolazarus.

De ese modo, cuando un registro de TABLA1 esté seleccionado, automáticamente serán seleccionados todos los que estén en relación con él en TABLA2 y lo mismo para TABLA3.

Hablando visualmente, cuando selecciones un registro en el DBGRid1 (mesas) automáticamente se mostrarán los registros dependientes en DBGrid2(clientes) y DBGRid3(productos) que corresponden a la mesa seleccionada.

Es decir que no veo la necesidad de usar un Timer, excepto claro, que desearas hacer una especie de demo que cada determinado tiempo seleccione una mesa aleatoriamente.

Saludos.
Esto hice:

Código:
Cadena_SQL:='CREATE  TABLE  IF NOT EXISTS "main"."mesas" ("id" INTEGER PRIMARY KEY,"mesa" VARCHAR(30),"ocupado" VARCHAR(30));';
Sqlite3Dataset1.SQL:=Cadena_SQL;
Sqlite3Dataset1.ExecSQL;

Cadena_SQL:='CREATE  TABLE  IF NOT EXISTS "main"."cliente" ("nombre" VARCHAR(30), "rif" VARCHAR(30),"id_mesa" INTEGER,"id_factura" INTEGER);';
Sqlite3Dataset1.SQL:=Cadena_SQL;
Sqlite3Dataset1.ExecSQL;

Cadena_SQL:='CREATE  TABLE  IF NOT EXISTS "main"."factura" ("id" INTEGER PRIMARY KEY,"producto" VARCHAR(30),"precio" INTEGER,"rif_cliente" VARCHAR(30));';
Sqlite3Dataset1.SQL:=Cadena_SQL;
Sqlite3Dataset1.ExecSQL;
Sqlite3Dataset1 para la tabla mesa

Sqlite3Dataset2 para cliente

Sqlite3Dataset3 para factura

Cada uno con su respectivo datasource.

Ahora no entendi lo que dijiste acerca de relacionar los datasourse por lo que en el reloj hice

Código:
Sqlite3Dataset2.close;
Sqlite3Dataset2.SQL:='SELECT * FROM cliente where id_mesa="'+mesa+'";';
Sqlite3Dataset2.ExecSQL;
Sqlite3Dataset2.Open;

Sqlite3Dataset3.close;
Sqlite3Dataset3.SQL:='SELECT * FROM factura where id="'+nfactura+'";';
Sqlite3Dataset3.ExecSQL;
Sqlite3Dataset3.Open;
donde mesa y nfactura son variables que toman un valor respectivo

Pero me gustaria entenderlo asi como tu lo dices

==============================================================================
EDITO Y AGREGO

El componente Sqlite3Dataset3 no trae la opcion de datasource a diferencia de utilzar componentes zeos

Última edición por pedrolazarus fecha: 01-10-2012 a las 04:25:27.
Responder Con Cita
  #15  
Antiguo 01-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Cita:
El componente Sqlite3Dataset3 no trae la opcion de datasource a diferencia de utilzar componentes zeos
La verdad que no conozco ese componente y si no cuenta con la propiedad DataSource tal vez no sea posible aplicar lo que te sugerí.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.


La verdad que no conozco ese componente y si no cuenta con la propiedad DataSource tal vez no sea posible aplicar lo que te sugerí.

Saludos.
Bueno ahora utilizo esto con zeos

coloque en el form un zconexion, tres query y tres source

query1 datasource1
query2 datasource2
query3 datasource3


al primer query le coloque solo conexion=zconexion

al segundo query igual conexion=zconexion y en datasourse=datasource1

al tercer query igual conexion=zconexion y en datasourse=datasource2


realizo la consulta en el form asi Siguiendo los mismos datos que deje mas arriba de como cree la base de datos

Código:
ZQuery1.SQL.Text:='SELECT * FROM mesas';
ZQuery1.ExecSQL;
ZQuery1.Open;

ZQuery2.SQL.Text:='SELECT * FROM cliente where id_mesa=id';
ZQuery2.ExecSQL;
ZQuery2.Open;
Esto me tira el siguiente error "no such column Id"

Por lo tanto no inicia el programa

EDITO Y AGREGO
=======================================================
Me falto colocarle las comillas a id id_mesa="id"

Me mustra la tabla mesas pero cuando seleciono otro registro por ejemplo mesa id=2 que esta ocupada y tiene cliente no hace nada o no se mustra nada en la grid

EDITO Y AGREGO
=======================================================
Tambien lo hice metiendo el codigo de seleccion en cada uno de los query y activando el query en el form igual muestra las mesas pero no muestra los datos en la grid 2 (la grid 2 tiene el datasourse2)

Última edición por pedrolazarus fecha: 01-10-2012 a las 19:11:39.
Responder Con Cita
  #17  
Antiguo 01-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola pedrolazarus.

En principio cambiaría:
Código Delphi [-]
ZQuery1.SQL.Text:='SELECT * FROM mesas';
ZQuery1.ExecSQL;
ZQuery1.Open;

ZQuery2.SQL.Text:='SELECT * FROM cliente where id_mesa=id';
ZQuery2.ExecSQL;
ZQuery2.Open;
Por:
Código Delphi [-]
ZQuery1.SQL.Text:='SELECT * FROM mesas';
ZQuery1.Open;

ZQuery2.SQL.Text:='SELECT * FROM cliente where id_mesa=id';
ZQuery2.Open;
El método ExcecSQL, ejecuta consultas que no devuelven un resultado como CREATE TABLE, INSERT, DELETE y UPDATE.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Me respondo a mi mismo XD, gracias ecfisa, fuiste de mucha ayuda, con los componentes de zeos salio a la primera como dijiste las relaciones sin utilizar reloj.
Responder Con Cita
  #19  
Antiguo 01-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Listo

Cita:
Empezado por ecfisa Ver Mensaje
Hola pedrolazarus.

En principio cambiaría:
Código Delphi [-]ZQuery1.SQL.Text:='SELECT * FROM mesas'; ZQuery1.ExecSQL; ZQuery1.Open; ZQuery2.SQL.Text:='SELECT * FROM cliente where id_mesa=id'; ZQuery2.ExecSQL; ZQuery2.Open;

Por:
Código Delphi [-]ZQuery1.SQL.Text:='SELECT * FROM mesas'; ZQuery1.Open; ZQuery2.SQL.Text:='SELECT * FROM cliente where id_mesa=id'; ZQuery2.Open;

El método ExcecSQL, ejecuta consultas que no devuelven un resultado.

Saludos.
Jajaja, antes de que respondieras estaba por postear la respuesta y esta era:
Cita:
Empezado por pedrolazarus
Me respondo a mi mismo XD, gracias ecfisa, fuiste de mucha ayuda, con los componentes de zeos salio a la primera como dijiste las relaciones sin utilizar reloj.
Cita:
Empezado por ecfisa Ver Mensaje
estas exponiendo una situación en la cuál se aplicaría perfectamente una relación maestro/detalle
Responder Con Cita
  #20  
Antiguo 02-10-2012
pedrolazarus pedrolazarus is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 91
Poder: 12
pedrolazarus Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Creo que estas exponiendo una situación en la cuál se aplicaría perfectamente una relación maestro/detalle. Veo dos posibilidades de organizarla, vos verás cuál te conviene para la situación.
Saludos.
Disculpa una duda que tengo, sabes que cuando por ejemplo(tomando en cuanta la forma en que programe la bd) entonces al query3 le pongo el dsorce2 pero cuando selecciono una mesa vasia correctamente no aparece cliente pero aparecen todos los productos cuando no deberia aparecer nada, a que se ´podria deber esto?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda para un novato en Bases de Datos Wolf1984 Conexión con bases de datos 4 17-02-2011 20:07:28
Ayuda con conexion a bases de datos desde linea de comandos k_bron Conexión con bases de datos 3 31-08-2006 22:23:31
Ayuda en programa con grids y guardar valores onlytk Varios 3 11-11-2005 21:08:28
Ayuda con las bases de datos!!!! Rafe Conexión con bases de datos 2 07-07-2005 19:30:50
Ayuda con Bases de Datos yocmen Tablas planas 3 20-06-2005 03:02:50


La franja horaria es GMT +2. Ahora son las 16:03:31.


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
Copyright 1996-2007 Club Delphi