Autore Topic: metodo per l'accesso ad un DB SQLite3  (Letto 580 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
metodo per l'accesso ad un DB SQLite3
« il: 09 Novembre 2010, 22:59:50 »
Mi riferisco a questa discussione]http://www.gambas-it.org/smf/index.php?topic=1128.msg12439#msg12439]questa discussione perché non riesco ad usare bene una classe che avevo creato allo scopo di gestire in maniera snella l'avvio di una connessione ad un DB SQLite3, ogni volta che mi serve dentro un programma, senza dovere ripetere le solite 5 o 6 istruzioni, con perdita di tempo e buona possibilità di commettere stupidi errori.

É stato proprio quel post a spingermi a provare e sembrava che ci fossi riuscito; infatti andava tutto bene per la gestione della connessione in lettura, ma ho impegato tutto un pomeriggio per cercare di capire, senza riuscirvi, come mai nella registrazione di due record in una stessa tabella, il primo ci finiva, mentre il secondo non sempre. Per uscire dal guazzabuglio ho abolito la classe che avevo creato ed ho utilizzato una "PUBLIC SUB" dentro la stessa Form.Class, però mi resta l'onere di doverla riprendere ogni volta che mi servirà, invece, se riuscissi ad inserirla in una classe sarebbe tutto molto più semplice.
Ecco cosa avevo preparato:
1) La classe che si occupava dell'apertura della connessione:
Codice: gambas [Seleziona]
' Gambas class file
'------------------------------- ApriDB.Class ------------------------------------------------------------------------------------------

PUBLIC DB_Connection AS NEW Connection   'inizializza la nuova connessione
PUBLIC RecTbpiacon AS Result

PRIVATE CONST $_DbNome AS String = "ContabFamdb"        'Nome del Database

PUBLIC SUB _new()

DIM $_DbPath AS String = Application.Path & "/ContabFam_DB"                     'Percorso di ricerca del Database ContabFam.db"
'----------------------------------------
      WITH
          DB_Connection
          .Type = "sqlite3"
          .Host = $_DbPath
          .Name = $_DbNome
          .OPEN    'Apro il DB
      END WITH
END


2) Nella sezione delle dichiarazione della Form.Class:
Codice: gambas [Seleziona]
PRIVATE DBOpen AS ApriDB


3)Nella Procedura_Evento di accesso alla tabella da interrogare:
Codice: gambas [Seleziona]
DBOpen = NEW ApriDB
  DBOpen.RecTbpiacon = DBOpen.DB_Connection.EXEC("SELECT * FROM piancont WHERE NomeVoce = '" & LAST.Text & "'")
  IF DBOpen.RecTbpiacon.Available THEN 
---------------- bla bla bla ----------------
---------------- bla bla bla ----------------
  ENDIF
  DBOpen.DB_Connection.Close


4)Nella Procedura_Evento di insertimento righe in  tabella:
   4.a) La Open e per le interrogazioni e l'inserimento di righe nuove era affidata ad una SUb che veniva richiamata con:
           
Codice: [Seleziona]
 $_Return = InsNuoVoce(i_ComboIns, $_SiNo)
   4.b) La "InsNuoVoce" si occupava della Open, di qualche interrogaziione, della Commit finale e della Close della connessione, mentre il lavoro della registrazione vera e propria veniva affidata ad una successiva Function che era richiamata con:
           
Codice: [Seleziona]
$_Esito = InsVocePiaCont($_NomeVoce, $_SiNo, i_NumCto, i_PassIncr, i_ToVoxNuo)
    4.c) La "InsVocePiaCont" svolgeva perciò la registrazione della riga di tabella coi dati che le venivano passati, senza eseguire alcun commit dopo la registrazione.

Purtroppo non posso riproporre il codice perché l'ho ora adattato al nuovo metodo di apertura della connessione.:

Mi rendo conto che é venuto fuori un procedimento un pò ingarbugliato, però penso che aggiustando qualcosa nei collegamenti del DB, qualcosa che non riesco a capire, funzionerà.

Ecco, ma cosa?   ??? :rolleyes:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: metodo per l'accesso ad un DB SQLite3
« Risposta #1 il: 15 Novembre 2010, 14:46:51 »
Se devo dire la verità, nonostante la tua prolissa descrizione, non ho capito la tua domanda (se ce n'era una... :P ).

Scherzi a parte, l'idea generale è ok, ma non ho modo di verificare i tuoi dubbi...

Da quello che scrivi sembra che le query eseguite non si comportano sempre allo stesso modo, ma questo dipende da cosa fanno queste query, che dati trattano, magari stai tentando di scrivere duplicati che, senza un controllo specifico non vedi come errori.

Secondo me, prima di incasinarti per bene, direi di fare dei test mirati solo a quella classe, magari creandoti un semplice metodo Test, dove crei e chiami la classe, magari sotto debug, oppure inserendo dei PRINT di verifica (dopo li cancelli, una volta finito).

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: metodo per l'accesso ad un DB SQLite3
« Risposta #2 il: 15 Novembre 2010, 22:56:01 »
Diciamo che la domanda é molto ben celata, proprio per non fare capire alcunché a chi volesse darmi una mano.  ;D ;D

L'idea é nata dalla lettura di una discussione sull'argomento, dove però non era citato alcun esempio sul metodo utilizzato. Ho allora tentato di scrivere qualcosa senza però riuscire nell'intento. Momentaneamente ho accantoonato il problema perché utilizzando una sub dentro la Form.Class interessata ho superato egregiamente l'ostacolo. Sicuramente lo riprenderò ed allora mi calerò con impegno nella ricerca della soluzione ottimale.
 :)
Ciao.
:ciao: