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
AbrirForm ('Añadir');
loadClients ('idc') ;
marcarCeldaDeOrdenacion (0); end;
procedure abrirForm (estado:string); begin
Application.CreateForm(TfrmClientDetail,frmClientDetail);
frmClientDetail.StatusBar1.Panels.Items[1].Text := estado ;
frmClientDetail.showmodal; ;
end;
procedure loadClients (celda:string); begin
with frmClientes do
with ADOQClientes do
begin
close;sql.clear;parameters.Clear;
sql.add ('SELECT idc,cif,cliente,poblacion,telefono,direccion FROM CLIENTES ORDER BY ' + celda + ' DESC'); 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