Visualizzazione dei risultati da 1 a 2 su 2

Visualizzazione discussione

  1. #1

    [delphi]starttransaction commit/rollback e isolamento componenti mydac

    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.
    Ultima modifica di MARIO@MONE; 04-06-2020 a 12:56 Motivo: ulteriore chiarezza
    01001101 01000001 01010010 01001001 01001111 01000000 01001101 01001111 01001110 01000101☺☻

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.