Bonjour,
J'ai un souci avec une requête que je passe à un serveur Oracle via ODBC.
Le souci, c'est que j'ai toujours l'erreur suivante :
"Erreur générale ODBC"
Le code de ma fonction est le suivant :
Un autre essai impliquant un autre driver ODBC m'a donné le même résultat (c'est sans doute une grosse boulette sans doute plus grosse que moi, mais je ne la vois pas).
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 Public Function FctExecOracle1( _ ByVal StrUsr1 As String, _ ByVal StrPwd1 As String, _ ByVal StrNomBase As String, _ ByVal StrRequete As String, _ ByVal WbkActif1 As Workbook, _ ByVal StrFeuilleDestination As String, _ Optional ByVal StrCelluleDestination As String = "A1") As Boolean Dim SheetActif As Worksheet Dim StrBaseConnexion As String Dim BoolResult As Boolean Dim StrNomProcApp As String 'Stockage de la procédure appelante On Error GoTo Erreur StrNomProcApp = NomProc NomProc = "FctExecOracle1" 'Gestion des erreurs (procédure en cours) BoolResult = False Set SheetActif = WbkActif1.Worksheets(StrFeuilleDestination) SheetActif.Visible = True SheetActif.Activate Selection.ClearContents StrBaseConnexion = "ODBC;DRIVER={Microsoft ODBC pour Oracle}" & _ ";UID=" & StrUsr1 & _ ";PWD=" & StrPwd1 & _ ";SERVER=" & StrNomBase With ActiveSheet.QueryTables.Add(Connection:=StrBaseConnexion, _ Destination:=Range(StrCelluleDestination), Sql:=StrRequete) .FieldNames = True .AdjustColumnWidth = True .Refresh (False) 'attend le résultat avant de continuer la procédure End With BoolResult = True Sortie: Set SheetActif = Nothing FctExecOracle1 = BoolResult Exit Function Erreur: Resume MsgBox Err.Number & " - " & Err.Description, vbCritical, "Import de données" GoTo Sortie End Function
Le deuxième essai a été réalisé en remplaçant le contenu de la fonction ci-dessus par le bout de code suivant (trouvé ailleur sur le Net).
En fait il plante sur le "refresh".
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 INSTANCE = StrNomBase '"Exemple" User = StrUsr1 'scott" MDP = StrPwd1 '"tiger" PL_SQL = StrRequete '"select * from all_all_tables" DRV_ODBC = "Oracle ODBC Driver" 'Connexion With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DRIVER={" & DRV_ODBC & "};SERVER=" & INSTANCE & ";UID=" & User & ";PWD=" & MDP & ";DBQ=" & INSTANCE & ";DBA=W;APA=T;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST= T;FRL=F" _ ), Array(";MTS=F;CSR=F;PFC=10;TLO=O;")), Destination:=ActiveCell) .CommandText = PL_SQL .Refresh BackgroundQuery:=False End With
Est-ce que vous pourriez m'aider à voir ce qui cloche, car là j'avoue que je m'arrache un peut le cheveux.
Par avance merci.
Marco.
Partager