Autore Topic: [RISOLTO]Classe dinamica per Open di DB  (Letto 572 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[RISOLTO]Classe dinamica per Open di DB
« il: 08 Marzo 2011, 15:36:37 »
Tempo fa ho tentato di creare una classe per eseguire la Open del DB da trattare perché potessi richiamarla  nel  programma tutte le volte in cui ce ne fosse bisogno, ma non ci sono riuscito; allora ho deciso di creare una rouitne in ciascuna delle Form interessate. Così sono potuto andare avanti, ma poiché più passa il tempo e più mi impigrisco, ho ripetuto oggi il tentativo scrivendo il seguente codice:
Ho creato la Classe  "OpenDB":
Codice: gambas [Seleziona]
' Gambas class file
PUBLIC DB_Connection AS NEW Connection   'inizializza la nuova connessione
PUBLIC SUB OpenDB()
DIM $_DbPath AS String = Application.Path & "/ContabFam_DB"                     'Percorso di ricerca del Database ContabFam.db"
DIM $_DbNome AS String = "ContabFamdb"        'Nome del Database
'----------------------------------------
      WITH
          DB_Connection
          .Close
          .Type = "sqlite3"
          .Host = $_DbPath
          .Name = $_DbNome
          .OPEN    'Apro il DB
      END WITH
END

richiamo della classe e accesso ad una tabella del DB:
Codice: gambas [Seleziona]
PRIVATE OpenDBConFam AS OpenDB
........bla.....bla.....bla.........
 OpenDBConFam = NEW OpenDB
    RecMovgg = OpenDBConFam.DB_Connection.EXEC("SELECT * FROM movimgg WHERE DtCoMovgg = '" & i_dataCont & "' ORDER BY NuProMovvgg")

L'ultima istruzione (RecMovgg = OpenDBConFam.DB_Connection.EXEC) fornisce il seguente errore:
Connection is not opened

Ho guiardato e riguardato, fino all'esaurimento nervoso, il codice scritto, ma non ho capito se e dove abbia potuto sbagliare.   :rolleyes: Chi può darmi una mano?
 :(
« Ultima modifica: 09 Marzo 2011, 08:34:08 da Picavbg »
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Classe dinamica per Open di DB
« Risposta #1 il: 08 Marzo 2011, 19:04:53 »
secondo me sbagli approccio

la funzione di connessione scrivila come classe

# PUBLIC SUB _new()
# DIM $_DbPath AS String = Application.Path & "/ContabFam_DB"                     'Percorso di ricerca del Database ContabFam.db" 
# DIM $_DbNome AS String = "ContabFamdb"        'Nome del Database 
# '---------------------------------------- 
#      WITH   
#          DB_Connection 
#          .Close 
#          .Type = "sqlite3" 
#          .Host = $_DbPath   
#          .Name = $_DbNome 
#          .OPEN    'Apro il DB 
#      END WITH   
# END   

e la richiami come hai fatto tu

facendo in questo modo però devi assolutamente ricordari di chiudere la connessione  finito quello che devi fare altrimenti avrai un sacco di connessioni aperte e potresti raggiungere un qualche limite impostato dalla configurazione di  mysql

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Classe dinamica per Open di DB
« Risposta #2 il: 08 Marzo 2011, 23:53:27 »
Ohi ohi ohi ohi! Che sbadato che sono. Ho fatto un sacco di prove, scordandomi del metodo _new!  :hard: :hard:

Hai ragione: definendo la classe OpenDB con
Codice: [Seleziona]
PUBLIC SUB _new()
ha funzionato tutto perfettamente.

Grazie maestro!

Comunque, per onor di cronaca, il mio Dbase é un SQLite3. :D
Ciao
:ciao: