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)
-   -   TADOQuery no actualiza registros (https://www.clubdelphi.com/foros/showthread.php?t=88730)

jsc 23-07-2015 10:26:18

TADOQuery no actualiza registros
 
Hola,
Llevo varios dias haciendo pruebas y revisando codigo y por mas que intento cosas no consigo resolver el problema.
El caso es el siguiente:

Sistema : Windows 7
Bd: Access 2007
Delphi: Delphi 7
Componentes : TADOConnection, TADOQuery, TDataSource, TDbGrid

Formularios: Clientes, Facturas...

Dinamica: El Form Clientes (donde se muestran todos los clientes de la Bd en un dbGrid) mediante un boton Nuevo llama a otro Form donde añadimos los datos del cliente nuevo. Aqui podemos dar de alta, uno o varios Clientes. Al cerrar el Formulario, regresamos al Form Clientes (no ha sido cerrado en ningun momento) y se actualizan los datos de los clientes agregados.
Es en este ultimo paso donde hay veces que en el dbgrid semuestran todos los registros agregados y otras veces no. No entiendo el porque. La vez que no aparecen, si vuelvo a darle a un boton que limpia (borra los datos de unos Edits que tengo y carga nuevamente los datos de la bd - close y open del ADOQuery) aparecen; vamos, como si cerrariamos y abririamos dos veces la bd.

Con el Form Facturas, el funcionamiento es excactamente igual y aqui no tengo problemas de este tipo; he comparado todo y esta igual en ambos formularios. Algo se me escapa y no se que es

En Clientes...
Código Delphi [-]
procedure TfrmClientes.sbAddClientClick(Sender: TObject);
begin
   //Creamos y mostramos frmClientDetails
   AbrirForm ('Añadir');
   loadClients ('idc') ;
   marcarCeldaDeOrdenacion (0); // marcamos celda de ordenacion por id Cliente
end;

procedure abrirForm (estado:string); // Creamos y mostramos el Formulario Detalle en modo Añadir o Editar
begin
   //Creamos y mostramos el Form Detalles de Clientes
   //Añadimos el estado Añadir,Editar,Borrar
   Application.CreateForm(TfrmClientDetail,frmClientDetail);
   frmClientDetail.StatusBar1.Panels.Items[1].Text := estado ;
   frmClientDetail.showmodal; ;
end;

procedure loadClients (celda:string); // cargamos los Clientes en el dbGrid
begin
   with frmClientes do
      with ADOQClientes do
            begin
//                  showmessage ('adoqclientes.close');
                  close;sql.clear;parameters.Clear;
                  sql.add ('SELECT idc,cif,cliente,poblacion,telefono,direccion FROM CLIENTES ORDER BY ' + celda + ' DESC'); // ORDER BY IDC ASC
                  showmessage (sql.Text);
                  if not prepared then
                        begin close;prepared;open end
                  else Open;
                  showmessage ('adoqclientes.open - registros: '+inttostr(recordcount));
                  if (recordcount > 0) then else close;
                  frmClientes.DBGrid1.SetFocus;
            end;
end;
Al activarse el Form clientes, llama a loadClients ('idc') y los datos se muestran bien; de hecho, cuando los datos agregados no se muestran, tambien si salgo y vuelvo a Entrar al Form clientes aparecen; y como he dicho antes, si cierro y vuelvo a abrir el ADOQuery tambien; pero porque el hecho de tener que abrir y cerrarlo dos veces ?

alguna idea?
gracias de antemano

jsc 23-07-2015 11:36:36

Solucionado
 
Tema solucionado

Tengo un TADOConnection con los datos de conexion a la Bd en un DataModule; todos los ADOQuery tienen la propiedad Connection como se ve abajo:

Código:

TADOQuery.Connection := DataModule1.ADOConnection1
excepto el que daba de alta los Clientes Nuevos, que lo hacia a traves de ADOConnectionString; Por el momento las pruebas que he hecho funcinan

gracias a todos
Disculpad las molestias


La franja horaria es GMT +2. Ahora son las 12:38:19.

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