PDA

Visualizza la versione completa : [delphi] start transaction


niquesca
13-03-2003, 08:56
Salve


Ho bisogno di annullare l'operazione di memorizzazione sul database, so che si usa transisolation, starttransaction e rollback,,,,,se avete
un esempio di utilizzo vi ringrazio...


ciao Monique

alka
13-03-2003, 09:28
Quando fai domande riguardanti i database, specifica sempre quali tipi di componenti usi per l'accesso (BDE, dbGo for ADO, dbExpress, IBExpress...)...sarà più facile indicarti la soluzione giusta al tuo problema.

Non ho esempi pronti e impacchettati, ma posso dirti che, almeno per quanto riguarda i componenti IBExpress per InterBase, ciascuno dei componenti per l'accesso ai dati viene collegato ad un componente Transaction. Quando esegui un'operazione sul DataSet, la transazione viene attivata (StartTransaction) e tutte le modifiche e gli aggiornamenti apportati vengono effettuati e memorizzati nella transazione. Per confermare le modifiche, puoi usare il metodo Commit, altrimenti puoi chiamare il metodo Rollback.

Nei componenti InterBase, i suddetti metodi provvedono anche alla chiusura di tutte le tabelle, per cui è meglio utilizzare i metodi CommitRetaining e RollbackRetaining.

Consulta anche la Guida in linea di Delphi...contiene sempre informazioni dettagliate e interessanti sui metodi dei componenti, anche se in lingua inglese (ma non deve essere un grosso problema, vero?) ;)

Ciao! :ciauz:

niquesca
13-03-2003, 09:43
Ciao Alka


Si ho visto ma non mi funziona..
Uso paradox e componenti DataAccess....
Io ho inserito start transaction all'inizio della procedura...
poi tramita un pulsante utilizzo rollback..ma purtroppo non funziona,
non va in errore ma memorizza le informazioni comunque...
tra l'altro anche se io non uso il metodo post...le informazioni vengono memorizzate comunque...
non so....
eventualmente potrei cancellare i record che mi servono..esempio
cancella tutti i record che nel campo (filtro c'è scritto cancella, però non uso una query ma un ttable....e tra l'altro la tabella la creo a runtime..


grazie ciao

alka
13-03-2003, 10:00
Nella Guida in linea di Delphi c'è questo esempio:


procedure TForm1.ApplyButtonClick(Sender: TObject);
begin
with CustomerQuery do
begin
Database1.StartTransaction;
try
ApplyUpdates; {try to write the updates to the database};
Database1.Commit; {on success, commit the changes};
except
Database1.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates; {on success, clear the cache}
end;
end;


Non ne sono certo, ma credo che le potenzialità sfruttabili in materia di transazioni dipendano anche dal formato di database utilizzato; ad esempio, la Guida in linea suggerisce di impostare la proprietà TransIsolation a tiDirtyRead quando si ha a che fare con Paradox, mentre altri formati di database possono essere utilizzati anche con gli altri metodi disponibili.

Sinceramente, a meno che tu non abbia particolari imposizioni, ti suggerirei di passare ad un formato diverso da Paradox per applicazioni serie con supporto alle transazioni.

Ciao! :ciauz:

Loading