Newsgroup: it.comp.appl.access
Titolo: Connessione ODBC via codice

ciao a tutti,
ho un database collegato per alcune tabelle ad un'altro database access e 
alcune tabelle collegate via ODBC a due diversi database SQL, considerato 
che l'applicazione dovrà essere installata su duverse macchine client, 
vorrei creare la connessione a questi due database direttamente via codice, 
attualmente ogni volta che devo installare il programma su una macchina, 
devo prima controllare se sulla macchina esiste il DSN di sitema, se non 
esiste crearlo ecc... Qualcuno può aiutarmi?
Ciao Tommy 

 wrote in message
news:c25bf.46951$
Pe2.8...@twister2.libero.it

Non dici quali sarebbero i Database SQL, potrebbe servire per
sapere se supportano una connessione DSN-LESS(che è la cosa
migliore da fare).
Io uso questa funzione per connettere le Linked table di SQL_Sevrver:
' Premessa poichè verifico il Link anche delle Query PT ho una
' Tabella d'apoggio chiamata "Linked" nella quale salvo :
' NomeOggetto(Il nome della Tabella o Query)
' TipoOggetto(T=Tabella Q=Query)
' La Connection String la recupero da Key di registro criptate
CNNSTR = "ODBC;DRIVER={SQL Server};SERVER=" & NomeServer & _
            ";UID=" & User & _
            ";PWD=" & PWD & _
            ";DATABASE=" & NomeDatabase & _
            ";LANGUAGE=Italiano;"
Public Function ReconnectODBCTable(CNNSTR as string) As Boolean
On Error GoTo Err_ConnectToSQL
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim rst As DAO.Recordset
    Dim intCounter As Integer
    intCounter = 0
    ReconnectODBCTable = False
 
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT  Nome FROM Linked WHERE
[Tipo]='T'", dbOpenDynaset)
    rst.MoveFirst
Start:
    Do Until rst.EOF
         Set tdf = db.TableDefs(rst!Nome)
         tdf.Connect = CNNSTR
         tdf.RefreshLink
         intCounter = intCounter + 1
         rst.MoveNext
    Loop
 
    ReconnectODBCTable = True
 
Exit_ConnectToSQL:
On Error Resume Next
 
    rst.Close
    db.Close
    Set rst = Nothing
    Set db = Nothing
    Exit Function
 
Err_ConnectToSQL:
    If Err.Number = 3265 Then   'TableDef non trovata
        Set tdf = db.CreateTableDef(rst!Nome)
        tdf.Connect = CNNSTR
        tdf.SourceTableName = rst!Nome
        db.TableDefs.Append tdf
        db.TableDefs.Refresh
        Resume Start
    Else
        ReconnectODBCTable = False
        MsgBox Err.Description
        Resume Exit_ConnectToSQL
    End If
End Function
Public Function ReconnectODBCQuery(CNNSTR as string) As Boolean
On Error GoTo Err_ConnectToSQL
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    Dim intCounter As Integer
    intCounter = 0
    ReconnectODBCQuery = False
 
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT  Nome FROM Linked WHERE
[Tipo]='Q'", dbOpenDynaset)
    rst.MoveFirst
Start:
    Do Until rst.EOF
         Set qdf = db.QueryDefs(rst!Nome)
         qdf.Connect = CNNSTR
         rst.MoveNext
    Loop
 
    ReconnectODBCQuery = True
 
Exit_ConnectToSQL:
On Error Resume Next
 
    rst.Close
    db.Close
    Set rst = Nothing
    Set db = Nothing
    Exit Function
 
Err_ConnectToSQL:
   If Err.Number = 3265 Then   'TableDef non trovata
      Set qdf = db.CreateQueryDef(rst!Nome)
      qdf.Connect = CNNSTR
      qdf.SQL = "SELECT;"
      qdf.ReturnsRecords = True
      Resume Start
   Else
      ReconnectODBCQuery = False
      MsgBox Err.Description
      Resume Exit_ConnectToSQL
   End If
End Function
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Alessandro Baraldi ha scritto:

uso MSDE 2000, ho un database chiamato Gest2005 e uno chiamato Cli2005
e devo collegare le due tabelle relative, nell'esempio che mi hai
postato tu considerando che sono due i database, devo fare   due
diverse Connection String ?
Ciao Tommy

 Ciao Tommy
Ovviamente si, ma ti conviene inserire un 3° campo nella
tabella, nel quale memorizzi la stringa di Connessione o la
provenienza, in questo modo rendi tutto automatico, quindi
fai un pò di modifiche alla Routine che ti ho indicato e recuperi
la ConnetcionString dalla tabella.
