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 08-10-2008
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
al ejecutar el afterpost del adoquery1 no significa que se guarden los datos en la base de datos , simplemente es el afterpost del objeto tadoquery que estas usando. hasta que no finalices la transaccion , los datos no los vas a ver desde otros querys.


lo que quiero decir es que si no haces commit (en el afterpost o donde quieras) , cualquier otro adoquery que intente mostrar esos datos no los va a ver.

yo pondria algo como esto.

Código Delphi [-]
procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet);
begin 
 timer1.enabled:=true;
end;

y en el timer finalizas la transaccion ,
y cierras y abres el query para refrescar.

Código Delphi [-]
Procedure Tform1.Timer1OnTimer(Sender:Tobject)
Begin
If adoquery1.connection.intransaction then
  Adoquery1.connection.CommitTrans; 
Adoquery2.close; Adoquery2.open;
End;

de todas formas , yo no lo haria asi , aunque todo depende de com tengas hecha la aplicacion , y que controles tengas enlazados
Saludos.
Responder Con Cita
  #2  
Antiguo 08-10-2008
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Gracias tefots por tu respuesta, pero no logro entender como es eso de:

Código Delphi [-]
If adoquery1.connection.intransaction then
  Adoquery1.connection.CommitTrans

Si me lo puedes explicar, seria un exito
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #3  
Antiguo 08-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad no entiendo el problema, tampoco entiendo la necesidad de una transaccion para una sola tabla o query, me parece que es como matar moscas con un cañon.
Tengo un adoquery1, este lo que hace es hacer una insercion a modificacion o lo que sea de una o varias tablas.
Ahora tengo un adoquery2, este lo que hace es ver la tabla en el formulario.
Bueno, cual es el problema?.
Hago la modificacion o lo que sea con el primero, y lo ejecuto, o lo abro, cierro y vuelvo a abrir (mas trabajo).
Luego simplemente abro y cierro el segundo query.
Donde esta lo complicado o es que me pierdo de algo?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 08-10-2008
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Cita:
Luego simplemente abro y cierro el segundo query.
Bueno Caral, ese es precisamente el problema, cuando lo cierro y lo abro (que lo hago para que se actualice el query) no obtengo lo deseado, no se actualiza, solo lo hace de vez en cuando.
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #5  
Antiguo 08-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Osea tienes el viejo problema del query perezoso.
Cuando se ejecuta un query el dato se guarda en la base de datos en segundos.
Cuando ejecuto el query1, el query2 si se cierra y luego se abre tiene por que tiene que ver el dato actualizado a no ser que como dije al principio, sea un query perezoso, pero creo que ya delphi los saco del sistema.
Muy raro, muy raro.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 08-10-2008
Avatar de principiante22
principiante22 principiante22 is offline
Miembro
 
Registrado: nov 2006
Ubicación: Santo Domingo - Rep.Dom.
Posts: 90
Poder: 18
principiante22 Va por buen camino
Bueno, con la idea de tefots pude hacer algo que se adapte a lo que necesitaba, me di cuenta de que al adoquery le tomaba 5.5 segs para actualizar la base de datos, asi que puse un timer con un interval:6000 y resuelto jeje. Bueno, gracias a todos por sus respuestas
__________________
Att: ΓħΞ ŘēąĿ βļåķΣ
Responder Con Cita
  #7  
Antiguo 08-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me alegro que lo resolvieras.
Solo para que te des una idea de como lo hago yo:
Código Delphi [-]
 DataModule1.AC1.BeginTrans;
      try
         If Nueva then
         QTemp.SQL.Text := 'Insert Into OrdenProd (Codorden, FechaInicio, FechaRequerido, CodUsuario, Comentarios, CodCliente, Prioridad, Enrutada, OrdenCompra) '+
                           'Values (' +Edit2.Text+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', '+
                            QuotedStr(Edit5.Text)+', '+QuotedStr(Memo1.Text)+', '+Edit3.Text+', '+IntEdit1.Text+', True, '+QuotedStr(Edit7.Text)+')'
         else
         QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '
                            +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then
         begin
            QOrdProd.Requery();
            QOrdProd.Last;
         end
         else begin
                bok := QOrdProd.Bookmark;
                QOrdProd.Requery();
                QOrdProd.Bookmark := bok;
              end;
         DataModule1.AC1.CommitTrans;
         If Nueva then If MessageDlg('Orden Guardada.'+#13+'¿Desea agregar items a la orden?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
         Nueva := False;
         QOrdProd.Close;
         QOrdProd.Open;
       except
         on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 09-10-2008
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
me alegro que funcionara.

todas formas eso de esperar 6 segundos para poder ver los datos desde otro query es mas que raro , rarisimo.
en teoria cuando finalizas la transaccion , los datos ya deben estár inmediatamente disponibles y debes poder verlos desde la propia aplicación o desde otra.


lo del

If adoquery1.connection.intransaction then
Adoquery1.connection.CommitTrans

lo que hace es mirar si la conexion asociada al adoquery tiene una transaccion abierta , tonces hace commit de la transaccion.

lo logico seria hacerlo directamente con el adoconnection , pero como no se si tienes algun adoconnection enlazado por eso lo puse asi.

que base de datos utilizas ?.

tienes algun adoconnection enlazado , uno por cada adoquery o uno para los dos ? , alo mejor esta ahi el problema

por cierto , lo de los querys perezosos yo nunca lo habia oido ni nunca me ha pasado , a lo mejor es que los datos se paran a tomar un café antes de que esten 'disponibles'.

saludos.


Cita:
Empezado por principiante22 Ver Mensaje
Bueno, con la idea de tefots pude hacer algo que se adapte a lo que necesitaba, me di cuenta de que al adoquery le tomaba 5.5 segs para actualizar la base de datos, asi que puse un timer con un interval:6000 y resuelto jeje. Bueno, gracias a todos por sus respuestas
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
actualizacion del help 129 zidfrid C++ Builder 0 13-08-2007 00:22:56
Actualizacion principiante22 Internet 2 09-07-2007 16:36:55
Actualización con SQL luxus Conexión con bases de datos 4 08-07-2006 16:23:24
Actualizacion con ADO Carlex Conexión con bases de datos 5 09-08-2005 08:08:57
actualizacion en red @-Soft Conexión con bases de datos 1 12-08-2003 09:55:06


La franja horaria es GMT +2. Ahora son las 19:25:53.


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