Premessa, programmo in delphi da 15gg
salve a tutti gente, sto realizzando un applicazione che prende file xml da una cartella elabora questi attraverso i ixmldocument,ixmlnode etc e in un ciclo for stampa a video i dati dei diversi nodi e fa query al database, ora ho necessita di creare transazioni, il problema è il seguente, se inizio a ciclare un file e malauguratamente l'operatore arresta il sistema per sbaglio, deve avvenire una rollback la tabella deve tornare allo stato prima della query. codice
codice:
try
myconnection1.StartTransaction;
memo5.Visible := true;
memo5.Lines.Add('in transazione');
Mycommand1.SQL.Text := 'INSERT INTO ap_sns (tipo_flusso,distributore,POD,data,tipo_dato,validato,EaF1,EaF2,EaF3,ErF1,ErF2,ErF3,PotF1,PotF2,PotF3,filename) VALUES ("'+dbsns1+'" ,"'+dbpivadistributore1+'","'+dbpod1+'","'+dbdatamisura1+'","'+ dbtipodato1 +'","'+dbvalidato1+'","'
+dbeaf11+'","'+dbeaf21+'","'+dbeaf31+'","'+dberf11+'","'+dberf21+'","'+dberf31+'","'+dbpot11+'","'+dbpot21+'","'+dbpot31+'","'+filesource+'")';
mycommand1.Prepare;
mycommand1.Execute;
myconnection1.Commit;
except;
myconnection1.Rollback;
raise;
end;
DeleteFile(searchResult.Name);
end;
http://
so che le query concatenate sono oscene ma programmo in delphi da poco, quindi un passo alla volta, dunque con questo codice le query avvengono e pare anche che la commit dall'utility mysqlmonitor di mydac avvenga, inoltre ho impostato il livello di isolation di myconnect1 in : ilserializable(3) direttamente dall'objectinspector di rad studio, ciò che mi preme fare è creare una coda, nel senso fino a che la query dell'utente 1 è in corso, l'utente 2 non può avviare un altra query così come il 3 o il 4, e recuperare lo stato di rollback nel caso un utente spenga il sistema per sbaglio mentre la query è in corso, leggendo la documentazione mysql sembrava roba davvero semplice ma così non è.
il server è il localhost
il motore innodb.
Grazie

dimenticavo autocommit è impostato su 1 da query select @@autocommit;
se faccio query set autocommit = 0 ;
la query avviene ma al successivo ;
select @@autocommit;
mi ripristina la condizione 1
quindi il mio server xaamp di impostare autocommit su 0 pare non ne voglia sapere quindi startransaction pare d'obbligo.
- Server: 127.0.0.1 via TCP/IP
- Tipo di server: MariaDB
- Connessione Server: SSL inattivo

- Versione del server: 10.4.11-MariaDB - mariadb.org binary distribution
- Versione protocollo: 10
- Utente: root@localhost
- Codifica caratteri del server: UTF-8 Unicode (utf8mb4)
Web server
- Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.5
- Versione del client del database: libmysql - mysqlnd 7.4.5
- Estensione PHP: mysqli
curl
mbstring 
- Versione PHP: 7.4.