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 ' ') :
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 ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Voici une autre solution (qui marche), qui me crée une connexion, mais pas un DSN :
Comment utiliser cette connexion pour paramétrer un objet QueryDef ? L'argument Name doit rester chaîne vide sinon çà plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
Partager