Bonjour,

J'ai un problème de requête SQL à travers un recordset, dans une application EXE développé par une autre personne et qui ne fonctionne pas.

Le principe du programme est de récupérer les valeurs d'une table "EVENEMENT" de les trier et de les ranger dans d'autre table.

Le programme:
J'ai une connection qui s'ouvre sur la BDD grace à cette ligne de commande:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Set ws = CreateWorkspace("ws", "xxx", "xxx", dbUseODBC)
Set db = ws.OpenConnection("Cnx", dbDriverNoPrompt, True, "ODBC;DSN=" + dsn_db + ";")
Cette ligne s'éxécute correctement.


Puis je renseigne ma requête dans la variable string "sql"
Puis je fais un openRecordset:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Private Function TraitEtat() As Boolean

'Déclaration de variable
Dim chTrace As String                                                   ' chaine à tracer dans le fichier log
Dim rs As Recordset                                                     ' Résultat de la requete
Dim sql As String                                                       ' Requête à exécuter
Dim sqlIns As String                                                    ' Requête d'insertion
Dim I, j, k As Long                                                  ' index de boucle
Dim verif As Boolean                                                    ' variable de controle
Dim id_etat_equip, id_etat_domaine, id_etat_nature, id_etat_lib_associe As Integer
Dim Hall As String

'Initialisation des variables
I = 0
j = 0
k = 100
sql = ""

On Error GoTo ErreurSQL

'--------Sélection des enregistrements non traités
sql = "select * from evenement where (cpec=0 and vartype<>'SYS') order by satt6,satt7,rects"
Set rs = db.OpenRecordset(sql)

While Not (rs.EOF)
    'Construction des requêtes d'insertion
    
    'initialisation des identifiants
    id_etat_equip = 0
    id_etat_domaine = 0
    id_etat_nature = 0
    id_etat_lib_associe = 0
    'Récupération id_etat_equip
    For I = 0 To UBound(Tab_eqt)
        If Tab_eqt(I).ch3 = rs.Fields("satt6") Then
            id_etat_equip = Tab_eqt(I).ch1
            Exit For
        End If
    Next I
    'Récupération id_etat_domaine
    For I = 0 To UBound(Tab_attr1)
        If Tab_attr1(I).ch2 = rs.Fields("satt1") Then
            id_etat_domaine = Tab_attr1(I).ch1
            Exit For
        End If
    Next I
    'Récupération id_etat_nature
    For I = 0 To UBound(Tab_attr2)
        If Tab_attr2(I).ch2 = rs.Fields("satt2") Then
            id_etat_nature = Tab_attr2(I).ch1
            Exit For
        End If
    Next I
    'Récupération id_etat_lib_associe
    For I = 0 To UBound(Tab_libass)
        If Tab_libass(I).ch2 = rs.Fields("evttype") Then
            id_etat_lib_associe = Tab_libass(I).ch1
            Exit For
        End If
    Next I
    'Récupération du Hall
    If rs.Fields("satt3") = "HALLB" Then
        Hall = rs.Fields("satt3")
    Else
        Hall = rs.Fields("satt4")
    End If
    'Requête d'insertion
    sqlIns = sqlIns + "insert into tEtat (Etat,Nom_var,libelle,operateur,date,id_etat_equip,id_etat_domaine,id_etat_nature,id_etat_lib_associe,nom_hall) " & _
                "values (" & rs.Fields("nval") & ",'" & rs.Fields("name") & "','" & TraiterApostrophe(rs.Fields("title")) & "','" & rs.Fields("username") & "','" & _
                CDate(rs.Fields("rects")) & "'," & id_etat_equip & "," & id_etat_domaine & "," & _
                id_etat_nature & "," & id_etat_lib_associe & ",'" & Hall & "');" & Strings.Chr$(13) & Strings.Chr$(10)
    'Insertion des enregistrements toutes les 100 requêtes
    If j >= k Then
        'appel de la procédure exécute sql
        If ExecuteSQL(sqlIns, 3) Then
            sqlIns = ""
        End If
        sqlIns = ""
        k = k + 100
    End If
    j = j + 1
    rs.MoveNext
Wend

'*****Insertion des données dans la table tEtat
If Not (sqlIns = "") Then
    verif = ExecuteSQL(sqlIns, 3)
End If

'*****Mise à jour des données insérées dans la table evenement
    'mise à jour des données traitées et les données invalides de la table compteur ( mise à 1 du champ cPec )
    sql = "update evenement set cpec=1 where cpec=0"
    Set rs = db.OpenRecordset(sql)

'fermeture du recordset
rs.Close
Set rs = Nothing

chTrace = "Fin de traitement des données concernant les états - Table tEtat"
TraceLog (chTrace)
TraitEtat = True
Exit Function

ErreurSQL:
    TraitEtat = False
    chTrace = "Erreur de mise à jour de la table Etat , Erreur : " + Err.Description
    TraceLog (chTrace)
    ControlEssai = False

End Function
Et le problème se trouve ici, lorsque je "set", il y a un problème que je ne sais déterminer et je bascule sur "Erreur SQL". Mais je ne connais pas l'erreur et je ne sais pas pk ca plante.

A savoir que lorsque j'exécute cette requete dans un editeur elle ne plante pas, et j'obtiens des résultats.


Merci d'avance pour votre aide.