Newsgroup: it.comp.lang.visual-basic
Titolo: dsn-less connection con ODBCdirect

Salve,
volevo provare ad efettuare una connessione tramite ODBCdirect ad un
database access MDB usando una DSN-less connection.
usando una connessione normale, cioe' utilizzando un DSN registrato, tutto
bene, ma non riesco a fare funzionare quello che M$ indica nell'articolo:
HOWTO: Use "DSN-Less" ODBC Connections with RDO
Article ID: Q166392 
.....
With Microsoft Visual Basic versions listed above, you can specify your
ODBC driver and server in your connect string when using RDO (Remote Data
Objects) and DAO (Data Access Objects). This eliminates the need to set up
a DSN (Data Source Name). This is called a "DSN-Less" ODBC connection
because you do not need to set up a DSN in order to access your ODBC
database server. 
To do this, you specify a "driver=" parameter in your connect property. The
following three examples show how this is done with the SQL Server, Access,
and Oracle ODBC drivers: 
   'Microsoft SQL Server ODBC Driver example
    cnstr = "driver={SQL Server};server=myserver;" & _
      "database=pubs;uid=sa;pwd="
   cn.Connect = cnstr
   'Microsoft Access ODBC Driver example
   cnstr = "Driver={Microsoft Access Driver (*.mdb)};" & _
     "Dbq=c:\program files\devstudio\vb\biblio.mdb;" & _
     "Uid=Admin; Pwd="
   cn.Connect = cnstr
?? tra parentesi, cos'e' un dbq, nei manuali e nella guida On-Line non ho
trovato niente, e non riesco ad accedere al sito M$ del KB perche' mi
ritorna un errore di script alla prima pagina .asp del support.
per cui io provo:
    Set wks = DBEngine.CreateWorkspace("ODBCWorkspace", "", "", dbUseODBC)
    cnstr = "Driver={Microsoft Access Driver (*.mdb)};" & _
         "Dbq=d:\vbhotel5\files\vbhotel.mdb;" & _
        "Uid=Admin; Pwd="
 
    Set cnn = wks.OpenConnection("vbhot", _
        dbDriverNoPrompt, False, cnstr)
e mi becco un bell'errore 3001: argomento non valido, mentre la normale
connessione
    Set cnn = wks.OpenConnection("", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=vbhot;DSN=vbhot")
funziona da favola.
l'esempio M$ riporta
 Private Sub Command1_Click()
        Dim Cn As New rdoConnection           'creatable rdoConnection
        Dim Qr As New rdoQuery                'creatable rdoQuery
        Dim Rs As rdoResultset                'pointer to rdoResultset
        Dim cnstr As String                   'hold connection info
        cnstr = "driver={SQL Server};server=myserver;" & _
          "database=pubs;uid=sa;pwd="
        Cn.Connect = cnstr            <--------------------------
        Cn.CursorDriver = rdUseClientBatch
        Cn.EstablishConnection Prompt:=rdDriverNoPrompt
        Set Qr.ActiveConnection = Cn
        Qr.SQL = "Select * From Authors"
        Set Rs = Qr.OpenResultset(Type:=rdOpenKeyset, _
          LockType:=rdConcurBatch)
        Debug.Print Rs(0), Rs(1), Rs(2)
 End Sub
ma gli oggetti connection di ODBCdirect non hanno questa proprieta'
.Connect
.....
ogni suggerimento per ODBCdirect e' mooolto apprezzato
saluti e buon lavoro
Andrea Montanari
hs...@guest.net

 
hs...@guest.net
Dunque, se non sbaglio nel foglio esempi.xls di office 97 c'e' un esempio
pertinente (RDOExample) - se non l'hai scrivi e te lo spedisco. DBQ e' un
parametro del driver ODBC specifico: in particolare per alcuni e' DBQ, per
altri DB o DATABASE. Trovi alcuni informazioni in genere sulla
documentazione del fornitore del driver  
Sub RDOExample()
Dim ws As Workspace
Dim rs As Recordset
Dim qt As QueryTable
Dim c As Connection
Dim ConnectStr As String
Dim NewSheet As Object
 
    ConnectStr = "odbc;Driver={Centura SQLBase 32-bit Driver -NT &
Win95};DATABASE=PRDCOVER;"
    'Crea un'area di lavoro che evita l'utilizzo di DAO
    Set ws = CreateWorkspace("w1", "admin", "", dbUseODBC)
    'Apre la connessione alla cartella contenente i file DBF
    Set c = ws.OpenConnection("", 1,0 , ConnectStr)
    'Recupera tutti i record dalla tabella e consente solo lo spostamento
in avanti
    'tra i record (modalità più veloce)
    Set rs = c.OpenRecordset("select ORR,CDN,RSS,ACD from AFFARE where
STT_CDN='CN' and STT_RSS='CN' and UY='1998' and CLSCD='cNM' and
TPECD='tFA'", dbOpenForwardOnly)
    'Inserisce un nuovo foglio di lavoro nella cartella di lavoro attiva
    Set NewSheet = Worksheets.Add
    'Inserisce sul nuovo foglio una nuova tabella query basata
    'sul set di record
    Set qt = NewSheet.QueryTables.Add(rs, Range("a1"))
    'Esegue un aggiornamento asincrono della tabella query
    qt.Refresh False
    'Chiude il set di record
    rs.Close
    'Chiude la connessione
    c.Close
Questo esempio e' funzionante.
.Connect non e' un metodo ma una PROPRIETA' dell'oggetto Connection di
ODBCDirect
hope this helps
Mbot...@cs.unibo.it