Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2012-10

Ayuda con base de datos y mostrar en grib

3 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

pedrinlazarus en htmltest.comeze.com

Buenas tengo la siguiente duda

Tengo una BD y en ella tengo tres tablas
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;

Entonces el detalle esta en que tengo tres dbgrids, en la primera se muestra los datos de la tabla mesas, esta va a estar fija.

En la segunda se va a mostrar el cliente dependiendo de la tabla mesa, Supongamos que la mesa 2 esta ocupada por lo tanto tiene un cliente, entonces al yo seleccionar la mesa dos en la dbgrid2 me deberia de aparecer
los datos del cliente.

Lo pude hacer utilizando un reloj haciendo la consulta de la mesa que seleccione guardando el id en una variable

========================================================

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

========================================================

Lo muestra pero es muy feo ya que la pantalla parpadea porq el reloj realiza la consulta cada 200ms.

Me dijeron que haciendo esto

query1 datasource1 para tabla1
query2 datasource2 para tabla2
query3 datasource3 para tabla3

y haciendo esto en sus opciones

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

Ya no se necesita el reloj pero solo muestra la tabla mesa y cuando selecciono la mesa que tiene un cliente no me aparecen los datos en la dbgrib2

Ayuda por favor y gracias de antemano

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20121001/7684e41d/attachment.html>

Reply by email

pedrinlazarus en htmltest.comeze.com

Ya lo resolvi

Spanish version of Lazarus List

El 1 de octubre de 2012 12:36, escribi:

Buenas tengo la siguiente duda

Tengo una BD y en ella tengo tres tablas
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;

Entonces el detalle esta en que tengo tres dbgrids, en la primera se muestra los datos de la tabla mesas, esta va a estar fija.

En la segunda se va a mostrar el cliente dependiendo de la tabla mesa, Supongamos que la mesa 2 esta
ocupada por lo tanto tiene un cliente,
entonces al yo seleccionar la mesa dos en la dbgrid2 me deberia de aparecer los datos del cliente.

Lo pude hacer utilizando un reloj haciendo la consulta de la mesa que seleccione guardando el id en una variable

========================================================

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

========================================================

Lo muestra pero es muy feo ya que la pantalla parpadea porq el reloj realiza la consulta cada 200ms.

Me dijeron que haciendo esto

query1 datasource1 para tabla1
query2 datasource2 para tabla2
query3 datasource3 para tabla3

y haciendo esto en sus opciones

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

Ya no se necesita el reloj pero solo muestra la tabla mesa y cuando selecciono la mesa que tiene un cliente no me aparecen los datos en la dbgrib2

Ayuda por favor y gracias de antemano

Reply by email

Maxi
to pedrinlazarus en htmltest.comeze.com

El d�a 1 de octubre de 2012 16:20,
<pedrinlazarus en htmltest.comeze.com> escribi�:

Show quoted text 119 lines
Ya lo resolvi Spanish version of Lazarus List <lazarus-es en lists.lazarus.freepascal.org> El 1 de octubre de 2012 12:36, <pedrinlazarus en htmltest.comeze.com> escribi�: Buenas tengo la siguiente duda Tengo una BD y en ella tengo tres tablas 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; Entonces el detalle esta en que tengo tres dbgrids, en la primera se muestra los datos de la tabla mesas, esta va a estar fija. En la segunda se va a mostrar el cliente dependiendo de la tabla mesa, Supongamos que la mesa 2 esta ocupada por lo tanto tiene un cliente, entonces al yo seleccionar la mesa dos en la dbgrid2 me deberia de aparecer los datos del cliente. Lo pude hacer utilizando un reloj haciendo la consulta de la mesa que seleccione guardando el id en una variable ======================================================== 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 ======================================================== Lo muestra pero es muy feo ya que la pantalla parpadea porq el reloj realiza la consulta cada 200ms. Me dijeron que haciendo esto query1 datasource1 para tabla1 query2 datasource2 para tabla2 query3 datasource3 para tabla3 y haciendo esto en sus opciones 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 Ya no se necesita el reloj pero solo muestra la tabla mesa y cuando selecciono la mesa que tiene un cliente no me aparecen los datos en la dbgrib2 Ayuda por favor y gracias de antemano ______________________________ > > _________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Bien pero un timer cada 200ms es muy exagerado con que lo haga cad 10 segundo ya es mucho, sino sobrecargas la red y el servidor. Para que no parpadee, tenes que deshabilitar momentaneamente el refresco del control.

Ontimer1(sender:tObject);
Begin
  try
    Timer1.Enable:=False; // parar el timer para no solapar llamadas
si el tiempo de consulta es mayor al  tiempo del timer
    dbgrid1.disablecontrols; //el control no muestra nada hasta que no
se refresca y vienen los datos nuevos
    dbgrid2.disablecontrols;
    query1.Close;
    query2.Close;
    query1.Open;
    query2.Open;
  finally
    dbgrid1.Enablecontrols; //rehabilito los controles
    dbgrid2.Enablecontrols;
     timer1.enable; inicio timer  nuevamente
end;
end;
El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html Linux User #495070 http://domonetic.com/blog

Reply by email