Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Un DBgrid cabezón

Hola.
Estoy haciendo mi primera aplicación medio en serio medio de prueba. Un Tpv.

el problema que tengo es que selecciono un ticket, en un dbgrid muestro las lineas de detalle. Cuando inserto o modifico lineas estas no se refrescan aunque lance de nuevo la consulta que las muestra.
Este es código:
Código:
var
  s: string;
begin
 DbGrid1.DataSource:=dm.T.Vacio;
 s:='SELECT CODIGO,DESCRIPCION, UNI, PVP, DTO,TOTAL,POS FROM LINTIK WHERE '+filtro;
 dm.t.DataSource1.DataSet.Close;
 dm.t.IBQuery1.Active:=FALSE;
 dm.t.IBQuery1.Close;

 dm.T.IBTquery.Active:=false;

 dm.t.IBQuery1.SQL.Clear;
 dm.t.IBQuery1.SQL.Add(S);
 dm.T.IBTquery.Active:=true;

 dm.t.IBQuery1.Open;
 dm.t.IBQuery1.Active:=TRUE;
 DbGrid1.DataSource:=dm.T.DataSource1;
 dbGrid1.Refresh;
Como podeis ver, a la desesperada, he reasignado datasource y todo lo que he podido.

¿ como hacer para que se refresque ?

P.D. he buscado en el foro, y no he encontrado en las primera 3 pag. nada.
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #2  
Antiguo 23-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me parece que estas haciendo un escabeche.
Para mi ya tienes la informacion y esta ligada al dbgrid.
Con solo esto:
Código Delphi [-]
dm.t.IBQuery1.Active:=False;
dm.t.IBQuery1.Active:=True;
Ya tiene que refrescar, cierras y abres, cual es el problema, no lo veo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 23-08-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Pues que no se refrescan las lineas del dbgrid

fíjate en mi código:
Código:
 dm.T.IBTquery.Active:=false;

 dm.t.IBQuery1.SQL.Clear;
 dm.t.IBQuery1.SQL.Add(S);
 dm.T.IBTquery.Active:=true;
Está como tu me comentas. Pero sin embargo. Las lineas no se refescan hasta que cierro y abro la aplicación.

He probado incluso a realizar un commit por si la transacción no se ha completado.
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #4  
Antiguo 23-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para empezar el DBGrid no tiene nada que ver en esto, este es simplemente refleja lo que hay en el query, que es el importante, aqui.
Modificando un poco esto, quedaria asi:
Código Delphi [-]
begin
  dm.t.IBQuery1.Active:=False;
  dm.t.IBQuery1.SQL.Text:='SELECT CODIGO,DESCRIPCION, UNI, PVP, DTO,TOTAL,POS FROM LINTIK WHERE '+filtro;
 dm.T.IBTquery.Active:=true;
Sigo sin entender, se cierra y se abre, el problema debe ser otro.
Sigo pensando que generas codigo innecesario.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 23-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caral Ver Mensaje
Hola
Para empezar el DBGrid no tiene nada que ver en esto, este es simplemente refleja lo que hay en el query, que es el importante, aqui.
Modificando un poco esto, quedaria asi:

Código Delphi [-]
begin
dm.t.IBQuery1.Active:=False;
dm.t.IBQuery1.SQL.Text:='SELECT CODIGO,DESCRIPCION, UNI, PVP, DTO,TOTAL,POS FROM LINTIK WHERE '+filtro;
dm.T.IBTquery.Active:=true;




Sigo sin entender, se cierra y se abre, el problema debe ser otro.
Sigo pensando que generas codigo innecesario.
Saludos
Solo agregando a la buena participación de nuestro amigo Carlos, que conste amigo.......

No será que debes de ejecutar el query y no solo abrirlo?

Código Delphi [-]
 
   Query1.ExecSQL;

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 23-08-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
ExecSql no deja para una consulta "Select" dice que se use Open

No consigo que se refresquen las tablas.

Caral Está todo como tu dices, y no se actualiza, ¿ qué otra cosa podría ser

¿Podrían ser las transacciones ?
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #7  
Antiguo 23-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Cecilio Ver Mensaje
ExecSql no deja para una consulta "Select" dice que se use Open

No consigo que se refresquen las tablas.

Caral Está todo como tu dices, y no se actualiza, ¿ qué otra cosa podría ser

¿Podrían ser las transacciones ?
Perdon tienes razon,

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 23-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Parece que se donde está el problema


Código Delphi [-]
 
   DbGrid1.DataSource:=dm.T.Vacio;
   s:='SELECT CODIGO,DESCRIPCION, UNI, PVP, DTO,TOTAL,POS FROM LINTIK WHERE '+filtro;
   dm.t.DataSource1.DataSet.Close;
   dm.t.IBQuery1.Active:=FALSE;
   dm.t.IBQuery1.Close;

   dm.T.IBTquery.Active:=false;

   dm.t.IBQuery1.SQL.Clear;
   dm.t.IBQuery1.SQL.Add(S);
   dm.T.IBTquery.Active:=true;

   dm.t.IBQuery1.Open;
   dm.t.IBQuery1.Active:=TRUE;
   //DbGrid1.DataSource:=dm.T.DataSource1; Estas redeclarando el DBGrid1
   dbGrid1.Refresh;

Salud OS

PD Perdón por la nota anterior, todo por no leer
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 23-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Vamos por pasos, a ver si lo entiendo.
Revisa estos puntos y me comentas.
1- tienes un dbgrid el que esta ligado a un query, este muestra la informacion que necesitas.
2- La informacion que presenta el query contiene el campo clave para actualizarse.
3- Editas el query o la tabla en algun sitio o paso que no veo en tu codigo.
4- Haces un post o guardas los datos.
5- quieres volver a ver el contenido, pero esta vez modificado.
Si estas siguiendo estos pasos, no entiendo cual es el problema..
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 23-08-2007
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola:
El problema para que veas los datos es que necesitas dejarlos en la base de datos y no en el cliente, como te dicen, editas los datos y los guardas pero solo en el cliente, necesitas hacer un commit en la base de datos, y ahora sí los podrás ver

Saludos a todos
__________________
Ernesto R.
Responder Con Cita
  #11  
Antiguo 23-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por ramiretor Ver Mensaje
Hola:
El problema para que veas los datos es que necesitas dejarlos en la base de datos y no en el cliente, como te dicen, editas los datos y los guardas pero solo en el cliente, necesitas hacer un commit en la base de datos, y ahora sí los podrás ver

Saludos a todos
Ciertamente se requiere de hacer el commit para que los datos queden en la base, solo que no es un insert, es un select (cometí el mismo error no se preocupen) el problema que veo yo, como ya lo postee es que está redireccionando el DBGrid antes del refresh, solo hay que borrar ésta línea.

Código Delphi [-]
 
DbGrid1.DataSource:=dm.T.DataSource1;

ya que arriba ya asignó el debgrid con ésta otra

Código Delphi [-]
DbGrid1.DataSource:=dm.T.Vacio;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #12  
Antiguo 24-08-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Perdón por no haber escrito antes. Estoy a caballo entre dos ciudades.

Os explico mejor los procesos:
  1. Recupero o creo un ticket nuevo. El procedimiento verLineas, me muestra las lineas actuales. (Por ahora todo bien).
  2. Si es un ticket nuevo, agrego un artículo a vender. es decir una linea nueva. O modifico una linea ya existente:
Código:
  Asql.Limpia;
  asql.asigna('CODIGO',Acod.Text);
  asql.asigna('DESCRIPCION',Ades.Text);
  asql.asigna('PVP',Apvp.Text);
  asql.asigna('DTO',Adto.Text);
  asql.asigna('NFACT',IntToStr(i));
  asql.asigna('CAJA',dm.T.Caja);
  asql.asigna('IVA','16');
  asql.asigna('CLIENTE',Edit4.Text);
  asql.asigna('FECHA',dm.T.IbFecha);
  asql.asigna('ALMACEN',dm.T.ALmacen);
  asql.asigna('EJERCICIO',dm.T.ejercicio);
  asql.asigna('ECODIGO',dm.T.ecodigo);

 if mpos.Text='' then  // Si es una linea nueva.
  s:=ASQL.carga('LINTIK')
 else
  begin // Es una modificación.
    asql.Clausula:=' POS='+mPOS.Text;
    s:=ASQL.cargaModif('LINTIK');
    mpos.Text:='';
  end;
   DM.T.IBSQL1.SQL.Clear;
    DM.T.IBSQL1.SQL.Add(s);
    DM.T.IBSQL1.ExecQuery;
    DM.T.IBSQL1.Close;


  s:='update lintik ';
  s:=s+'set parcial_l=uni*pvp, ';
  s:=s+'imp_dto=((parcial_l*dto)/100), ';
  s:=s+'base=parcial_l-imp_dto, ';
  s:=s+'cuota=((base*iva)/100), ';
  s:=s+'total=base-cuota';
  s:=s+' where '+filtro;

  dm.T.IBSQL1.Close;
  dm.T.IBSQL1.SQL.Clear;
  dm.t.IBSQL1.SQL.Add(s);
  dm.T.IBSQL1.ExecQuery;
  dm.T.IBSQL1.Close;

  VerLineas;
  • He puesto el código que agrega o modifica lineas. Como veis todo es por SQL.
  • Tras las modificaciones o inserciones, llamo a VerLineas que es el responsable de actualizar el DBGrid. Pero no se actualiza.
  • No le hagais caso al objeto Asql, es una unidad que diseñe para crear de forma cómoda los insert o los updates. El metodo carga o cargamodif solo retorna la sentencia SQL en funcion de los campos asignados. Esto funciona.
  • Algo significativo es que solo se ver las modificiaciones cuando cierro y abro la aplicación.
Código:
Procedure TForm1.VerLineas;
var
  s: string;
begin
 s:='SELECT CODIGO,DESCRIPCION, UNI, PVP, DTO,TOTAL,POS FROM LINTIK WHERE '+filtro;
 dm.T.IBTquery.Active:=false;
 dm.t.IBQuery1.SQL.Clear;
 dm.t.IBQuery1.SQL.Add(S);
 dm.T.IBTquery.Active:=true;
 dm.T.IBQuery1.Open;
// dbGrid1.Refresh;
// totales;
end;
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #13  
Antiguo 24-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Dos cosas:
1: Que contiene filtro, que es?
2: Esto es reiterativo o es una u otra, para que las dos:
o es un error de escritura o tienes dos query?
Código Delphi [-]dm.T.IBTquery.Active:=true;
dm.T.IBQuery1.Open;


Me explicas el punto 1?
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 24-08-2007 a las 18:44:32.
Responder Con Cita
  #14  
Antiguo 26-08-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Perdon por la tardanza.

Al final he conseguido solucionarlo.

Tras enviar la consulta SQL realizo un commit de la transacción.

El código completo sería este:
Código:
    DM.T.IBSQL1.SQL.Clear;
    DM.T.IBSQL1.SQL.Add(s);
    DM.T.IBSQL1.ExecQuery;
    DM.T.IBSQL1.Transaction.commit; // esta es la solución
    DM.T.IBSQL1.Close;
Por si puede servirle a alguien.

Y a Todos los que me han ayudado.. Muchas Gracias.
__________________
Saludos Cordiales.
------------------

Responder Con Cita
Respuesta



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
PickList DBGrid (Pregunta acerca de los DBGRID) lazarous Varios 1 10-01-2006 09:53:12
Como extraer datos de un DBgrid a otro DBgrid mickey Conexión con bases de datos 13 29-01-2004 05:05:30


La franja horaria es GMT +2. Ahora son las 22:25:55.


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