Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188

    [VB& SP6] Parametrizzazione istruzione apertura connessione archivio.

    Buongiorno,

    ho una fissa che mi attanaglia e che non sono riuscito a risolvere.
    Volevo crearmi una sub contenente le 3 istruzioni di connessione archivio (adodb.connection), ma non riesco a passare il nome della connessione. Mi spiego:

    vorrei racchiudere queste istruzioni

    codice:
         Set dbarchivio = New Connection
          dbarchivio.CursorLocation = adUseClient
      
        
        dbarchivio.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=miodatabase;Jet OLEDB:Database Password="
    in una sub da richiamare dove ho dbarchivio dichiarata come variabile (ora mi scuso se non sto usando i termini tecnici corretti)

    Tipo:
    codice:
    public sub apridb (byval nomedb as adodb.connection)
         Set apridb= New Connection
          apridb.CursorLocation = adUseClient
    
        
        apridb.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=miodatabase;Jet OLEDB:Database Password=" 
    
    end sub
    da richiamare

    codice:
    apridb dbarchivio

    Il problema è che dopo l'struzione, dbarchivio non è inizializzata. Questo perchè non inizializza le prime due istruzioni, che se le metto fuori dalla sub, prima del richiamo della stessa, allora funge. Ma io volevo generalizzare anche loro, per scrivere meno codice

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    apridb è il nome della Sub, non può essere ANCHE il nome di una connessione.

    Devi prima dichiarare una variabile globale, quindi Pubblic, di tipo Connection, in un modulo BAS. Esempio:
    codice:
    Public CN As ADODB.Connection
    Poi potrai usarla nella tua Sub, per cui
    codice:
    Set CN = New ADODB.Connection

    N.B. Il parametro nella Sub è completamente sbagliato, deve essere una stringa che identifica il nome del database.


  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Quote Originariamente inviata da gibra Visualizza il messaggio
    apridb è il nome della Sub, non può essere ANCHE il nome di una connessione.

    Devi prima dichiarare una variabile globale, quindi Pubblic, di tipo Connection, in un modulo BAS. Esempio:
    codice:
    Public CN As ADODB.Connection
    Poi potrai usarla nella tua Sub, per cui
    codice:
    Set CN = New ADODB.Connection

    N.B. Il parametro nella Sub è completamente sbagliato, deve essere una stringa che identifica il nome del database.


    Chiedo scusa, forse il caldo, ho sbagliato il copia ed incolla.
    codice:
    public sub apridb (byval nomedb as adodb.connection)
         Set nomedb = New Connection
          nomedb .CursorLocation = adUseClient
    
        
        nomedb .Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=miodatabase;Jet OLEDB:Database Password=" 
    
    end sub

    richiamo con
    codice:
    apridb dbarchivio
    dove, in un modulo, ho

    codice:
     public dbarchivio as adodb.connection

  4. #4
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    secondo me confondi il nome dell'archivio con la connessione

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Quote Originariamente inviata da patel Visualizza il messaggio
    secondo me confondi il nome dell'archivio con la connessione
    Scusa, ma l'archivio è miodatabase, non è di nostro interresse ora.

  6. #6
    Quote Originariamente inviata da benjy Visualizza il messaggio
    codice:
    public sub apridb (byval nomedb as adodb.connection)
         Set nomedb = New Connection
          nomedb .CursorLocation = adUseClient
    
        
        nomedb .Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=miodatabase;Jet OLEDB:Database Password=" 
    
    end sub

    richiamo con
    codice:
    apridb dbarchivio
    dove, in un modulo, ho

    codice:
     public dbarchivio as adodb.connection
    IMHO, ti conviene convertire la sub in una function che ha come parametro almeno la *stringa* di connessione e restituisce una adodb.connection.

    P.S.
    potrebbe funzionare anche con la sub che hai fatto tu se invece di passare la connection ByVal la passi ByRef sulla cui differenza ti consiglio di documentarti approfonditamente.

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da benjy Visualizza il messaggio
    Chiedo scusa, forse il caldo, ho sbagliato il copia ed incolla.
    Sarà anche il caldo, ma il tuo codice è comunque tutto sbagliato.
    E visto che non hai fatto alcuna domanda su ciò che ti è stato indicato, dubito molto che tu sappia cosa stai scrivendo.

  8. #8
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    inoltre cerca di usare per le variabili nomi significativi, chiamare dbarchivio una connessione porta confusione a te ed a chi ti legge

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Quote Originariamente inviata da sspintux Visualizza il messaggio
    P.S.
    potrebbe funzionare anche con la sub che hai fatto tu se invece di passare la connection ByVal la passi ByRef sulla cui differenza ti consiglio di documentarti approfonditamente.
    Perfetto!, Grazie. Mi mancava la conoscenza del byref. Mi studio le varie funzioni man mano che mi capitano, e quindi aumento le mie conoscenze di volta in volta (sono completamente autodidatta del VB6, da programmazione Fortran e Cobol su S1 IBM, vogliate quindi perdonarmi). Comunque, anche eliminando il byref, funge. E' proprio il byval che me la manda in tilt.

    ti conviene convertire la sub in una function che ha come parametro almeno la *stringa* di connessione e restituisce una adodb.connection.
    In programmazione, la stringa di connessione è già parametrizzata, rispetto alla licenza d'uso, ma non ho voluto appesantire il codice della mia richiesta.

    Siccome, come dicevo prima sono autodidatta, a livello prestazioni/velocità, uso memoria etc. etc., conviene racchiudere tali istruzioni in una SUB o in una FUNCTION? Chiedo perchè avevo già fatto la stessa cosa per la lettura dei recordet.

    Grazie.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    188
    Quote Originariamente inviata da gibra Visualizza il messaggio
    Sarà anche il caldo, ma il tuo codice è comunque tutto sbagliato.
    E visto che non hai fatto alcuna domanda su ciò che ti è stato indicato, dubito molto che tu sappia cosa stai scrivendo.
    Caro Gibra, con tutta la stima che ho per te e per il tuo lavoro, ma... questo post dove affermi che è tutto sbagliato e che non so cisa sto scrivendo, non è riferito al codice che ho riportato dopo aver fatto la battuta del caldo, giusto? Altrimenti sarebbe poco rispettoso, visto che quelle istruzioni sono corrette se prese al di fuori del tentativo di parametrizzarle, giusto? Ovvero: se io avessi una routine
    codice:
    private sub prova
     dim nomedb as adodb.connection
    Set nomedb = New Connection
          nomedb .CursorLocation = adUseClient
    
        
        nomedb .Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=miodatabase;Jet OLEDB:Database Password="
    ... questa funzionerebbe (anzi, funziona) normalmente. Magari non è il massimo della codifica, però funge.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.