IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

VB6: Requete SQL avec recordsert


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Par défaut VB6: Requete SQL avec recordsert
    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.

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Aucun rapport avec la question mais...
    Avec cette syntaxe:
    seul k est déclaré As Long, I et j seront des Variants.
    La syntaxe correcte est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim I As Long, j As Long, k As Long
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pour connaitre l'erreur enlève ta gestion d'erreur.

    Ton db est-il bien déclaré en public ?

    Starec

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    "ODBC;DSN=" + dsn_db + ";")
    Il est préférable d'utiliser & pour du literal et reserver + pour les opérations, cela dit, le probléme n'est peut être pas là.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

Discussions similaires

  1. Requete SQL avec Rand()
    Par leloup84 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/02/2006, 16h41
  2. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58
  3. REQUETE SQL AVEC HAVING
    Par juju_77 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 05/08/2005, 09h49
  4. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18
  5. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo