Création objet ODBC en VBA
Bonjour
J'essaie de créer un objet ODBC via VBA pour m'affranchir complètement du poste sur lequel je me trouve en vue d'exécuter des requêtes directes SQL sur une base distante AS400.
J'ai trouvé quelques tutos ou posts à ce sujet, et j'essaie de faire une synthèse de tout çà en trouvant un code qui marche.
il y a ce tuto dans la FAQ : çà fonctionne pour une base ACCESS, mais pas pour ma base AS400 distante. Voici mon code (la chaîne StrAttributes a été testée avec ce code, et avec les ';' à la place des ' ') :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Private Sub OBCD()
'---- Créer un DSN ---------
Dim strDriver As String
Dim strAttributes As String
Dim intRet As Long
strDriver = "Client Access ODBC Driver (32-bit)" & Chr$(0)
strAttributes = "DSN=ODBCKPI" & Chr$(0)
strAttributes = strAttributes & "DESCRIPTION=Test DSN par VB6" & Chr$(0)
strAttributes = strAttributes & "UID=BAUDP System=LV011BK DATABASE=FGE50C3 SIGNON=1 DBQ=FGE50C3 DFTPKGLIB=FGE50C3 PKG=FGE50C3/DEFAULT(IBM),2,0,1,0,512"
intRet = SQLConfigDataSource(vbNull, 1, strDriver, strAttributes)
If intRet Then
MsgBox "DSN Created"
Else
MsgBox "Create Failed"
End If
End Sub |
D'autre part, pour une base ACCESS, çà me crée un user DSN et je préfèrerait un DSN système (et au passage comment on fait un file DSN ?)
Voici une autre solution (qui marche), qui me crée une connexion, mais pas un DSN :
Code:
1 2 3 4 5 6 7 8 9
| Sub essai()
Dim db As Database
Dim WrkSpaceODBC As DAO.Workspace, ConnectODBC As DAO.Connection, r2 As DAO.Recordset
Dim strODBC As String, ErrDesc As String
Dim qdf As DAO.QueryDef
Set WrkSpaceODBC = DBEngine.CreateWorkspace("ODBC", "Admin", "", dbUseODBC)
Set ConnectODBC = WrkSpaceODBC.OpenConnection("", dbDriverNoPrompt, True, "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};UID=BAUDP;System=LV011BK;DATABASE=FGE50C3;SIGNON=1;DBQ=FGE50C3;DFTPKGLIB=FGE50C3;PKG=FGE50C3/DEFAULT(IBM),2,0,1,0,512;")
ConnectODBC.QueryTimeout = 900
End Sub |
Comment utiliser cette connexion pour paramétrer un objet QueryDef ? L'argument Name doit rester chaîne vide sinon çà plante.
Cette dernière solution est la plus proche de ce que je voudrait faire : la connexion est initialisée, et quand je mets lun paramètre errroné, çà m'ouvre la fenêtre ODBC. Mais comment l'enregistrer en tant que DSN ?
Je sens que çà chauffe, mais j'ai besoin de votre aide pour finaliser complètement ce code.
Merci d'avance