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 :

Problème avec un recordset


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut Problème avec un recordset
    Bonjour,

    Je n'arrive pas à voir pourquoi j'ai un tel comportement :

    J'ai un programme VB6 qui exécute une requête passée à une base DB2 Windows mais lorsque le programme renvoie le recordset, il ne contient que 100 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim req As String
     
    ... 
     
    Set Rec = cO.OpenRecordset(req, dbOpenSnapshot)
     
    Debug.Print Rec.RecordCount
     
    ...
    Cela est donné par le Debug.Print.

    Quand j'exécute ma requête en dehors de VB dans un client DB2, j'ai 109 lignes, je ne vois pas du tout pourquoi !!

    Merci d'avance pour tout complément d'information.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    hmm, juste avant de faire ton count essaye "Rec.movelast"

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    Non j'essaye de faire cela, le résultat est exactement identique !

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

    Je ne connais pas DB2, mais c'est peut-être une restruction du à la technologie DAO que tu utilises. C'est juste une hypothèse.

    As-tu essayé avec ADO, c'est conseillé pour se connecter à une autre source.
    Il est préférable en général d'utiliser DAO pour une connexion avec une base Access.

    Tu as des tutos sur ADO dans la page cours VB.

    Starec

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    juste pour vérifier, as-tu bouclé sur tout recordset pour compter toi même le nombre d'enregistrements retournés ?

    On ne sait jamais ...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    Pour info, voilà ma boucle principale qui utilise le code suivant où j'ai rajouté un compteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim counter As Integer
    counter = 1
    Rec.MoveLast
    Rec.MoveFirst
    Do Until Rec.EOF
    ...
         Print.Debug counter
         counter = counter + 1
    ...     
    Loop
    Ce code me donne aussi un compteur = 100.
    Donc je ne comprends vraiment pas.

    Concernant l'utilisation de ADO pour DB2, avez-vous des exemples particuliers ?

    Merci d'avance.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    Pour information, j'exécute une requête beaucoup plus simple :

    "SELECT * FROM MATABLE" ça me donne le nombre d'enregistrements total.

    Par contre, lorsque j'utilise une requête beaucoup plus complexe, je n'ai pas tout ce que je veux!

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    je peux voir exactement le contenu de ta boucle while not eof please ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    OK, ci-dessous la boucle :

    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
     
    Do Until Rec.EOF
                'Traitement des données
                If Not TraitementDonnees(Feuille, _
                                         FeuilleParam, _
                                         Rec, _
                                         FlagVM, _
                                         xCol) Then GoTo SafeExit
     
                'Les Totaux
    '            TotalVS(0) = TotalVS(0) + Rec!VS
    '            TotalVM(0) = TotalVM(0) + Rec!VM
    '            TotalCDV(0) = TotalCDV(0) + Rec!CDV
    '
    '            TotalVS(1) = TotalVS(1) + Rec!VS_P
    '            TotalVM(1) = TotalVM(1) + Rec!VM_P
    '            TotalCDV(1) = TotalCDV(1) + Rec!CDV_P
     
                If (IsNull(Rec!NBRETITRESNOUV) = False) Then
                    TotalVSRgr(0) = TotalVSRgr(0) + Rec!NBRETITRESNOUV
                End If
                If (IsNull(Rec!NBRETITRESANC) = False) Then
                    TotalVSNRgr(0) = TotalVSNRgr(0) + Rec!NBRETITRESANC
                End If
                If (IsNull(Rec!NBRETITRESNOUV_P) = False) Then
                    TotalVSRgrP(0) = TotalVSRgrP(0) + Rec!NBRETITRESNOUV_P
                End If
                If (IsNull(Rec!NBRETITRESANC_P) = False) Then
                    TotalVSNRgrP(0) = TotalVSNRgrP(0) + Rec!NBRETITRESANC_P
                End If
                If (IsNull(Rec!Q_VOIX) = False) Then
                    TotalVoixRgr(0) = TotalVoixRgr(0) + Rec!Q_VOIX
                End If
     
                'On additione que les pouvoirs en propre
                TotalTit = TotalTit + Rec!N_POUVOIRS
                'Modif UT0AX1 le 21/09/00 tri par intermédiaire: total par intermédiaire
                ' gestion rupture
    '            If xCol("Tri") = CS_TRI_INTERMED_RETOUR Then
    '                oldIntermed = IIf(IsNull(Rec!N_INTERMED), "Inconnu", Rec!N_INTERMED)
    '            End If
                Rec.MoveNext
    '            If Not Rec.EOF And xCol("Tri") = CS_TRI_INTERMED_RETOUR Then
    '                curIntermed = IIf(IsNull(Rec!N_INTERMED), "Inconnu", Rec!N_INTERMED)
    '            End If
                If xCol("ImprimerAdresse") = 1 Then
                    Lg = Lg + 4 '4 lignes par groupe avec adresse
                Else
                    Lg = Lg + 2 '2 lignes par groupe
                End If
     
                ' Total puis rupture sur intermédiaire
     
                'Gestion de la rupture de page
                RupturePage = RupturePage + 1
                If RupturePage >= LimitePage Then
                    .Cells(Lg, 1).PageBreak = xlManual
                    If Not Rec.EOF Then
                        If Not InsertionEntete(FeuilleParam, Feuille, xCol) Then GoTo SafeExit
                    End If
                    RupturePage = 0
                End If
            Loop

  10. #10
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 108
    Points : 16 640
    Points
    16 640
    Par défaut
    "SELECT * FROM MATABLE" ça me donne le nombre d'enregistrements total.
    Donc forcement, ta requête qui ne te retourne pas tous les enregistrements, fonctionne

    Dans cette requete, une des conditions n'est pas remplis par (109-100=) 9 de tes enregistrements de ta table.
    En general on construit une requete pour qu'elle ne retourne que les enregistrements souhaités, il semplerait qu'elle le fait tout simplement.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    mets un point d'arrête sur tes 2 safeexit, pour moi le problème est là

Discussions similaires

  1. Problème avec un recordset
    Par five1966 dans le forum VBA Access
    Réponses: 14
    Dernier message: 26/12/2008, 18h28
  2. Problème avec adodb.recordset
    Par Pierre Fauconnier dans le forum VB.NET
    Réponses: 4
    Dernier message: 07/05/2007, 15h43
  3. Problème avec le recordset
    Par mademoizel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/03/2007, 12h28
  4. Problème avec un RecordSet
    Par Oberown dans le forum ASP
    Réponses: 4
    Dernier message: 04/01/2007, 11h59
  5. Problème avec ADODB.Recordset
    Par Edouard Kaiser dans le forum ASP
    Réponses: 13
    Dernier message: 09/08/2005, 17h54

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