[Vb6/MySQL]probleme RecordCount

Résolu
essedik -  
 Renfield -
Bonjour Tout le monde
je developpe une application en VB6 qui utilise une bases de données MySQL j'ai declaré un objet de type ADODB.Recordset comme suit:
Dim rsselect As New ADODB.Recordset

mais lorsque je veux utiliser la methode RecordCount comme suit :
Debug.Print rsselect.RecordCount
il m'affiche tjrs
la valeur -1.
voila mon morceau de code en VB6:
SQLOF = "SELECT HistoriquePointages.OF, HistoriquePointages.DatePointage AS MaxDeDatePointage,HistoriquePointages.CodeEmploye, OF.Nom"
SQLOF = SQLOF & " FROM HistoriquePointages, OF"
SQLOF = SQLOF & " Where (HistoriquePointages.OF=OF.OF)"
SQLOF = SQLOF & " GROUP BY HistoriquePointages.OF, HistoriquePointages.CodeEmploye, OF.Nom"
SQLOF = SQLOF & " Having (((HistoriquePointages.CodeEmploye) = '" & Personnel.Code & "'))"
SQLOF = SQLOF & " ORDER BY HistoriquePointages.DatePointage DESC;"
Dim rsselect As New ADODB.Recordset
rsselect.Open SQLOF, AdoConnexion, adOpenStatic, adLockOptimistic
Debug.Print rsselect!OF
Debug.Print rsselect.RecordCount

connaissant que la ligne de code:
Debug.Print rsselect!OF

m'affiche le bon resulat cad que la requete s'execute
Quelqu'un a une idée la-dessus?
Merci pour toute collaboration.

6 réponses

  1. Lupin
     
    Bonjour,

    Dim rsselect As New ADODB.Recordset

    avant d'interroger le "recordset", l'ensemble créé par la requête,
    il faut renseigner les pointeurs avec les lignes

    rsselect.MoveLast
    rsselect.MoveFirst
    Debug.Print rsselect.RecordCount

    Lupin
    1
    1. Essedik
       
      Bonjour
      Merci bien pour votre reponse, j'ai testé vos ligne de code mais il ya tjrs une erreur au niveau de :
      rsselect.MoveLast
      pouvez me fournir plus d'explication surtout sur l'idée des pointeurs avec MySQL.
      Merci de vouloir continuer la discussion
      0
    2. Lupin
       
      re:

      désolé, je me suis tromper !

      les lignes doivent apparaitre la requête.

      re:

      désolé, je me suis tromper !

      les lignes doivent apparaitre la requête.

      Dim rsselect As New ADODB.Recordset

      SQLOF = "SELECT HistoriquePointages.OF, HistoriquePointages.DatePointage AS MaxDeDatePointage,HistoriquePointages.CodeEmploye, OF.Nom"
      SQLOF = SQLOF & " FROM HistoriquePointages, OF"
      SQLOF = SQLOF & " Where (HistoriquePointages.OF=OF.OF)"
      SQLOF = SQLOF & " GROUP BY HistoriquePointages.OF, HistoriquePointages.CodeEmploye, OF.Nom"
      SQLOF = SQLOF & " Having (((HistoriquePointages.CodeEmploye) = '" & Personnel.Code & "'))"
      SQLOF = SQLOF & " ORDER BY HistoriquePointages.DatePointage DESC;"
      rsselect.Open SQLOF, AdoConnexion, adOpenStatic, adLockOptimistic

      rsselect.MoveLast
      reselect.MoveFirst

      Debug.Print rsselect.RecordCount

      Lupin
      0
      1. Essedik > Lupin
         
        Bonjour
        Merci bcp Lupin mon probleme est resolu mais j'ai rencontré un autre probleme:
        j'ai declaré un Recordset et j'ai acces à ce recordset :
         Dim rsselectdeb As New ADODB.Recordset
        Set rsselectdeb = AdoConnexion.Execute(sqlselectdebut)

        et la ligne code suivante me renvoie un resultat:
        rsselect.MoveLast
        Debug.Print rsselect!OF

        Ma requete est la suivante
        Dim sqlselectdebut As String
        sqlselectdebut = "select * from Pointages "
        sqlselectdebut = sqlselectdebut & " WHERE (((Pointages.Matricule)= '" & Personnel.Code & "') "
        sqlselectdebut = sqlselectdebut & " And  ((Pointages.HeureFin)Is Null)) "

        mais le probleleme que la ligne de code :
        Debug.Print rsselectdeb.EOF
        Debug.Print rsselectdeb.BOF
        m'affiche tjrs la valeur True cad que l'enregistrement est vide.la table sur laquelle je fait la requete "Pointages" contient 1024 enregistrement est ce que le probleme est là?
        Merci pour toute collaboration.
        0
  2. Utilisateur anonyme
     
    re:

    je recommance mon texte :

    avant d'interroger le "recordset", l'ensemble créé par la requête,
    il faut renseigner les pointeurs avec les lignes

    rsselect.MoveLast
    rsselect.MoveFirst
    Debug.Print rsselect.RecordCount

    vous tenter d'interroger le recordset alors que les pointeurs
    ne sont pas renseignés !

    Debug.Print rsselectdeb.EOF
    Debug.Print rsselectdeb.BOF

    Le [ .MoveLast ] et le [ .MoveFirst ] ne sont pas optionnel.
    si vous ne placez pas ces 2 lignes, les pointeurs ne sont pas
    tous renseignés.

    ceci en supposant que la requete est bonne !

    Lupin
    0
    1. Essedik
       
      Bonjour
      Merci bien pour votre reponse Lupin
      j'ai ajouté les deux lignes
      rsselectdeb.MoveLast
      rsselectdeb.MoveFirst
      mais j'ai tjrs le meme probleme , pour la requete apparement il n'a ya pas de probleme ; je l'ai testé sur le meme code mais avec une base access equivalente à celle de MySQL et ça marche normalement; le probleme est-elle due à la taille de la table(1024 enregistrement) ou à l'acces à la syntaxe d'execution de la requete?
      je me bloque dans mon travail et je ne peux plus avancer.
      Merci de bien vouloir continuer la discussion.
      0
      1. Renfield > Essedik
         
        Le recordCount sera toujours à -1 si le Curseur est du coté du Serveur...

        ajoutes :
        rsSelectDeb.CursorLocation = adUseClient

        avant l'ouverture du Recordset.
        0
  3. Utilisateur anonyme
     
    re:

    malheureusement, je ne connais pas assez MySQL pour aller
    plus loin. Sous Access, vous devriez obtenir un résultat.

    Lupin
    0
  4. Pascal_22 Messages postés 559 Statut Membre 54
     
    Salut !!

    Est-ce que le problème persiste, je sais pourquoi le
    recordcount =-1 et que ton movelast/movefirst ne fonctionne pas !!!

    a+
    Pascal_22
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gueye
     
    bjr
    je vx me connecter sur une bd Mysql et je trouve une erreur sur la decraration du driver. si qlq un peut m aider?

    voici le code:
    Dim strConn As String, strSql As String
    strConn = "Provider=Microsoft ADO 3.51 Object Library;Data Source=.\gueye;Persist Security Info=False"
    strSql = "select * from Client"

    Set oConn = New ADODB.Connection
    oConn.Open strConn

    Set oRs = New ADODB.Connection

    oRs.Open strSql, oConn, adOpenStatic
    0
  7. koberfo
     
    Bonjour,
    Merci de m'aider.j'ai un message d'erreur au niveau de la ligne suivante:
    nb = rst.RecordCount + 1

    Mon code est le suivant:

    Dim cnx As ADODB.Connection
    Set cnx = New ADODB.Connection
    cnx.Provider = "Microsoft.Jet.OLEDB.4.0"
    cnx.ConnectionString = "C:\print1\cheque.mdb"
    cnx.Open

    Set rst = New ADODB.Recordset
    rst.ActiveConnection = cnx
    rst.LockType = adLockOptimistic
    Dim nb As Double

    nb = rst.RecordCount + 1

    rst.Open "INSERT INTO cheque [(code[, num_cheque[, date_chek[, date_ops[, montant_chiffre[, montant_lettre[, beneficiaire[, utilisateur]]]]]]])]VALUES (nb[, num_cheque.text[, date_chek.text[, date_chek.text[, montant_chiffre[, montant_lettre.text[, beneficiaire.text[, 'vol']]]]]]])"
    0
    1. Renfield
       
      tu ne peux questionner le recordcount : ton recordset est fermé et ne contien, donc, aucun enregistrement

      quant à ta requete, elle est.... étrange (présence de toutes ces [ et ]

      je pense que tu souhaitais faire :

      rst.Open "INSERT INTO cheque ([code], [num_cheque], [date_chek], [date_ops], [montant_chiffre], [montant_lettre], [beneficiaire], [utilisateur]) VALUES (" & nb & ", '" & num_cheque.text & "', #" & Format$(date_chek.text, "MM\/DD\/YYYY") & "#, #" & Format$(Date,"MM\/DD\/YYYY") & "#, " & montant_chiffre & ", '" & montant_lettre.text & "', '" & beneficiaire.text & "', 'vol')"
      0