Originariamente inviato da gianni73na
Grazie per l'esaustiva risposta...
Allora..... ho su una form sia il DBGrid che i componenti DBEdit che utilizzo come campi per l'inserimento da parte di chi utilizza l'applicazione. Dopo aver inserito tutti i dati, l'utilizzatore cliccherà su un button per confermare l'inserimento nel DB quindi.
Devi mettere un Tnavigator, o in alternaativa un bottone "salva".
O meglio ancora un bottone salva che viene enablato quando c'è un cambio di stato nel datasource
Supponi di voler mettere un bottone "salva" che è normalmente disabilitato, e che diventa abilitato (cliccabile) quando ci sono dati da salvare nel db.
Allora farai qualcosa tipo
codice:
procedure tform1.btnSalvaClick(Sender: TObject);
procedure PostaDataSet(i_dataset:TDataSet);
begin
if i_dataset=nil then exit;
if (i_dataset.state=dsedit) or (i_dataset.state=dsinsert) then
i_dataset.Post;
end;
begin
// esempio: salvo due dataset (faccio il POST) in un colpo solo
PostaDataSet(dsrprimodatasource.dataset);
PostaDataSet(dsrsecondodatasource.dataset);
btnsalva.enabled:=False;
end;
Invece nel tdatasource (o NEI, plurale) nell'evento statechange metterai
codice:
procedure tform1.dsrnomedatasourceStateChange(Sender: TObject);
begin
if TDataSource(Sender).state=dsedit then
btnsalva.enabled:=TRUE;
end;
In pratica quando "qualcosa" modifica il datasource (ad esempio sei in fase di editing di un record, o di aggiunta), viene "attivato" questo evento, che attiva (rende enabled) il bottone salva.
Cliccando il bottone salva scriverai tutti i vari dataset che sono in stato edit o insert.
Ovviamente è uno scheletro, poi sono fatti tuoi adattarlo alla situazione
Come posso far "azzerare" tutti i DBEdit che contengono inizialemente la riga selezionata nel DBGrid per poi permettere il nuovo inserimento? come posso spostare l'indice del DB dopo l'ultima riga?
Non puoi, ovviamente.
Devi inserire un nuovo record.
Che puoi fare in vari modi
1) sempre col tnavigator
2) mettendo un bottone "+" o "aggiungi nuovo record" nel quale metterai, nell'onclick, un brutale