Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Domanda su SQL...

Salve,
devo eseguire due istruzione sql contenporaneamente su un db access.
Due insert, una su una tabella e una su un altra. Non posso lanciare
un qualcosa tipo un trigger di oracle? In access non si può fare una
cosa del genere? Insomma, devo per forza di cose eseguire queste due
istruzioni separate? Se però faccio così...se una delle due mi va
male?? Una tabella mi si sporca...ammettiamo che la prima insert va
bene, rilancio la funzione che mi esegue l' sql e questa volta
qualcosa si blocca. La seconda insert non va a buon fine, ma la prima
è stata scritta però!! Mi troverei quindi con due tabelle dove su una
c'è un recod che ho ha un suo corrispondente sull' altra. Insomma,
come faccio? :))
Saluti...

 ha scritto nel messaggio
news:3a867657...@news.inwind.it...

Usa Begintrans,committrans,rollbacktrans di ADO per fare delle transazioni!
Matteo

Salve,
devo eseguire due istruzione sql contenporaneamente su un db access.
Due insert, una su una tabella e una su un altra. Non posso lanciare
un qualcosa tipo un trigger di oracle? In access non si può fare una
cosa del genere? Insomma, devo per forza di cose eseguire queste due
istruzioni separate? Se però faccio così...se una delle due mi va
male?? Una tabella mi si sporca...ammettiamo che la prima insert va
bene, rilancio la funzione che mi esegue l' sql e questa volta
qualcosa si blocca. La seconda insert non va a buon fine, ma la prima
è stata scritta però!! Mi troverei quindi con due tabelle dove su una
c'è un recod che ho ha un suo corrispondente sull' altra. Insomma,
come faccio? :))
Saluti...

>Usa Begintrans,committrans,rollbacktrans di ADO per fare delle transazioni!
Le uso già!! Ma all' interno della funione che esegue l' sql, se non
ci sono problemi allora committa, altrimenti rollbecca?!?! :)) mi
rotorna un tur/false a seconda dell' esito dell' operazione.
Il problema è che se committa una e non fa lo stesso con l' altra, ho
sporcato una tabella. Uso una funione standard per eseguire qualunque
comando sql. Per fare come dici tu, dovrei usarne una solo per
inserire qualcosa in queste due tabella, lo stesso problema ce l'
avrei oer cancellare...dovrei cioè creare una funzione che committa
SOLO quando entrambe le insert sono andate bene.

 SOLO quando entrambe le insert sono andate bene.
Forse non hai molto chiaro su come si usa una transazione :-))
Fai la prima insert e controlla se č andata bene; fai la seconda e controlla
se č andata bene; quindi se tutte e due sono andate bene committi altrimenti
fai rollback!
Saluti
Matteo
PS spero di aver capito bene la tua risposta!

operazioni sono annullate.
Leggi la mia risposta all' altro post, le transazioni le uso già e non
è quello il problema, il problema è gestirle, considerando che io ho
una funzione unica per eseguire qualunque istruzione sql. Ti posto il
codice:
Public Function ComandoSQL(ByVal strSQL As String) As Boolean
    Dim Comando As ADODB.Command
 
    On Error GoTo ErroreComandoSQL:
 
    Set Comando = New ADODB.Command
    Comando.ActiveConnection = Connessione
    Comando.CommandText = strSQL
 
    Connessione.BeginTrans
    Comando.Execute
    Connessione.CommitTrans
 
    ComandoSQL = True
    Exit Function
 
ErroreComandoSQL:
    Connessione.RollbackTrans
    ComandoSQL = False
 
    Err.Raise 1002, App.FileDescription, Err.Description
Passo a questa funzione l' sql della prima insert e va bene, gli passo
la seconda e va male, nella seconda tabella non scrive ma nella prima
l' ha fatto. Per questo chiedevo se potevo eseguire le due istrunzioni
insieme, almeno se in un sql unico qualcosa non andava non scriveva
niente da nessuna parte. Capito?

Leggi il mio post di risposta a Roal, e guarda come č la mia funzione.
Dimmi te come gestire cosě le transazioni. Io la stessa funzione la
devo chiamare due volte se eseguo due istruzioni sql separate,
rifaccio la domanda...in questo modo se una delle due va male spocro
una tabella.

 ha scritto



Usa una transazione
Ciao
Aldo

 istruzioni separate? Se però faccio così...se una delle due mi va
[...]

Purtroppo Access non ha nè stored procedures nè trigger
E già, ho visto...esperianza personale :))
Saluti...