Ver Mensaje Individual
  #1  
Antiguo 23-07-2015
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Reputación: 21
jsc Va por buen camino
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

Última edición por Casimiro Notevi fecha: 23-07-2015 a las 10:50:56.
Responder Con Cita