fiHdZddlZddlZddlZddlmZddlZeje Z Gdde Z Gdde Z Gdd e ZGd d ZdS) zs Modulo per gestione connessione MS Access con auto-reconnect Copiato da ProssimeUscite\src\database\connection.py N)OptionalceZdZdZdS) DatabaseErrorz"Eccezione base per errori databaseN__name__ __module__ __qualname____doc__CC:\PYTHON\MyICR_Suite\app\modules\linker\src\database\connection.pyrrs,,Dr rceZdZdZdS)ConnectionLostErrorzEccezione per connessione persaNrr r r rrs))Dr rceZdZdZdS)QueryExecutionErrorz*Eccezione per errori nell'esecuzione queryNrr r r rrs44Dr rc eZdZdZ ddedededefd Zd ejfd Z d ejfd Z ddede d e j fdZddeded efdZded e fdZdZdZdZdS)AccessDatabasez} Gestisce connessione MS Access con auto-reconnect. Equivalente VBA: db.OpenRecordset con gestione On Error GoTo *{Microsoft Access Driver (*.mdb, *.accdb)}db_pathdrivertimeoutreconnect_attemptsc||_||_||_||_d|_t d|dS)Nz"Inizializzato AccessDatabase per: )rrrr connectionloggerinfo)selfrrrrs r __init__zAccessDatabase.__init__$sG   "47; BBBCCCCCr returncV |jr) |jn#YnxYwd|_tj}d|D}|st dd|jd|jd}td|jtj ||j |_td|jS#tj $rA}d t|}t |t ||d}~wwxYw) Ncg|]}d|v| S)Accessr ).0ds r z*AccessDatabase.connect..8sLLLAh!mmammmr zDriver Microsoft Access ODBC non trovato. Scaricare Microsoft Access Database Engine 2016 Redistributable https://www.microsoft.com/en-us/download/details.aspx?id=54920zDRIVER=z;DBQ=z ;Exclusive=0;zConnessione a database: )rz"Connessione stabilita con successozErrore connessione database: )rclosepyodbcdriversrrrrrconnectrErrorstrerror)ravailable_driversaccess_drivers conn_stringe error_msgs r r+zAccessDatabase.connect.sX 2 'O))++++D"& & 0 0 LL):LLLN! #U $+  |     KKA4<AA B B B$n[$,OOODO KK< = = =? "| 2 2 2@A@@I LL # # # ** 1 2s*C$C(B1CD('U a a aILL+++-i88a? "MMMM @""9:::s"=A&8B!! D(+A3D##D(Tsqlretry_on_errorc|js|d} tdt |dtd|ddd|j}|||}d|j D}tj ||}tdt |d t |j d ||r |S#YSxYwS#tj$r}|jr |jd nd}t%|} td |d | d| vr|rtdt+jd|r |n#YnxYw||dcYd}~|r |S#YSxYwSd| vrt1d| d|||r{td|rO|||dcYd}~|r |S#YSxYwSt7d|t1d| |d}~wt8$rA}dt%|} t| t1| |d}~wwxYw#|r |w#YwxYwwxYw)NzEsecuzione query SQL (z caratteri)zSQL: z...cg|] }|d S)rr )r%columns r r'z0AccessDatabase.execute_query..vsBBBVvayBBBr )columnszQuery completata: z righe, z colonnerzErrore query - Codice: z , Messaggio: z-3034z5Errore -3034 rilevato, attendo 1 secondo e riprovo...r5F)r?z%Errore Access query objects (-3034): zB Questo errore indica un conflitto con query salvate nel database.z-Connessione persa, tentativo riconnessione...zConnessione persa durante queryzErrore esecuzione query: zErrore inatteso durante query: )rr+rrlendebugcursorexecutefetchall descriptionpd DataFrame from_recordsrDr(r)r,argsr-r.r8r:r; execute_queryr_is_connection_lost_errorr=r Exception) rr>r?rGrowsrDdfr2 error_code error_messager3s r rOzAccessDatabase.execute_queryjs  LLNNN6  KKFSFFF G G G LL/TcT/// 0 0 0_++--F NN3   ??$$DBBv/ABBBG**4*AAB KKWSWWWWc"*ooWWW X X XN LLNNNND  K| ^ ^ ^&'f6$JFFM LL[:[[M[[ \ \ \-''N'VWWW 1  ))#e)DDDDDDD0 LLNNNND  --'')XMXXX --j99 ^NOOO!XNN$$$--c%-HHHHHHH LLNNNND  ..OPPVWW)*Um*U*UVV\]] 8 8 8B#a&&BBI LL # # #%i00a 7 8  LLNNNND  sDE(D==EL1A;K#G&%K#&G*(K#L1L4 H  H$(A3K#L1L4#J88J<#K## L10rVrGrXr2r3s r execute_writezAccessDatabase.execute_writesp   LLNNN _++--F NN3 ' ' 'H O " " $ $ $ KKEXEEE F F F LLNNNND  | 8 8 8:#a&&::I LL # # # ((**** %i00a 7 8 LLNNNND  s`A.B-B%%B)-D<,D)DDDDDD""E&D;:E;D?=ErTcgd}||vS)N)08S010800308007HY00001000r )rrTconnection_lost_codess r rPz(AccessDatabase._is_connection_lost_errors"! ! ! 222r c|jr~ |jtdn4#t$r'}td|Yd}~nd}~wwxYwd|_dS#d|_wxYwdS)NzConnessione database chiusazErrore chiusura connessione: )rr(rrrQr8)rr2s r r(zAccessDatabase.closes ? ' '%%''' 9:::: D D DBqBBCCCCCCCC D#'$&&&& ' 's,3=A: A.A)$A:)A..A:: Bc.||S)N)r+)rs r __enter__zAccessDatabase.__enter__s  r c.|dS)NF)r()rexc_typeexc_valexc_tbs r __exit__zAccessDatabase.__exit__s ur N)rrr)T)r )rrr r r-intr r) Connectionr+r=boolrKrLrOtupler[rPr(rerjr r r rrsR 4`>?DDDSDD8;DDDD!2*!2!2!2!2F;6,;;;;2;;;d;bl;;;;zeS>3C3D3333 '''r r)r r)pandasrKloggingtypingrr: getLoggerrrrQrrrrr r r rss    8 $ $     I        -        -   ~~~~~~~~~~r