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 :

[VB & SQL] Recordset reste vide apres SELECT


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 66
    Points : 63
    Points
    63
    Par défaut [VB & SQL] Recordset reste vide apres SELECT
    Salut a tous.

    J'ai un probleme avec un code concernant une base MySQL.
    Ma connection est nickel, je peux sans problemes envoyer des requetes, ect ect ... le probleme ne se situe pas la (je remplis mes tables sans soucis)

    Un bout de code pour expliquer ce que je veux faire :

    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
    Set rs = New ADODB.Recordset
    Set connex = New ADODB.Connection
     
    rs_sql = "SELECT * FROM ma_table"
    connex.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & serv_db & DATABASE=" & datbase & ";USER=" & user_db & ";PASSWORD=" & pwd_user_db & ";OPTION=" & option_db & ""
     
    rs.ActiveConnection = connex
    rs.Open rs_sql, connex
    DoEvents 'peut etre inutile mais sait on jamais ... un coup de lag ?
     
    Msgbox rs.RecordCount
     
    If rs.RecordCount > 0 Then
        rs.MoveFirst
        Do Until Not rs.EOF
            MsgBox rs("ID")
            rs.MoveNext
        Loop
    End If
     
    rs.Close
    Le soucis étant que rs_sub reste désespérément vide (alors que la table ne l'est pas bien entendu).
    Mon Msgbox rs.recordcount me répond inlassablement -1

    Que faire ?

    Merci bien,

    ZeGuizmo

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Pour faire simple : certains drivers de bdd, suivant les paramêtres de connexions déclarés ne renvoient pas le recordcount (surtout si le curseur est coté serveur, ce qui est ton cas, puisque c'est la valeur par défaut, lorsqu'elle n'est pas définie)

    alors essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rs.MoveFirst
    If  Not rs.BOF And Not rs.EOF Then ...
    ou un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.CursorLocation = adUseClient
    avant d'ouvrir ton recordset

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    Salut,

    Merci de la réponse rapide.

    J'ai bien peur de ne pas comprendre ce que tu veux me faire faire.
    Si le recordcount ne fonctionne pas, il suffirait de le virer, ce n'est qu'une sécurité dans mon code.
    Or ca ne fonctionne pas.

    Ainsi ce code ne me retourne rien du tout en msgbox

    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
    Set rs = New ADODB.Recordset
    Set connex = New ADODB.Connection
     
    rs_sql = "SELECT * FROM ma_table"
    connex.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & serv_db & DATABASE=" & datbase & ";USER=" & user_db & ";PASSWORD=" & pwd_user_db & ";OPTION=" & option_db & ""
     
    rs.ActiveConnection = connex
    rs.Open rs_sql, connex
    DoEvents 'peut etre inutile mais sait on jamais ... un coup de lag ?
     
    rs.MoveFirst
    Do Until Not rs.EOF
        MsgBox rs("ID")
        rs.MoveNext
    Loop
     
    rs.Close
    Pour les deux exemples que tu donnes, je ne comprend pas ce que tu veux faire.

    rs.MoveFirst va me renvoyer a la premiere "ligne" du rs

    mais si on le fait suivre par :
    If Not rs.BOF And Not rs.EOF Then

    le If Then ne va jamais passer puisqu'on lui dit de se mettre a la premiere ligne puis si il n'y est pas de faire quelque chose. Mais forcément il y est a la premiere ligne puisqu'on vient de lui dire d'y aller ???

    Quant au rs.CursorLocation = adUseClient je ne comprend pas, mais je vais me documenter.

    Merci a toi d'avoir pris la peine de répondre, et peut etre de prendre la peine de me ré-expliquer

    EDIT : J'ai bien entendu essayé les modifications que tu proposes sans trop chercher a comprendre, cela ne fonctionne pas.

  4. #4
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    as-tu vraiment essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rs.ActiveConnection = connex
    rs.CursorLocation = adUseClient
    rs.Open rs_sql, connex
    Regarde aussi les autres paramètres de la méthode Open d'un Recordset ADO
    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.Open rs_sql, connex,,,,adCmdText
    ! Attention au nombre de ,
    je ne suis pas un spécialiste de MySql (plutot Access ou SQL Server), alors je fais des analogies

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    Ca maaarrche

    Ton rs.CursorLocation = adUseClient fonctionne bien

    Lorsque j'avais essayé, j'ai betement copié collé ce que tu m'as donné alors que le recordset utilisé pour le select s'appelait rs_sb et que dans ma source il y a bien un recordset qui s'appelait rs ... donc ca ne pouvait pas marcher

    Maintenant reste a comprendre, je vais me documenter la dessus.

    Merci de ta disponibilité et de tes réponses.

    A+

    Guizmo

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Pense a noter ton sujet résolu alors...

    adUseClient est une instruction qui met ton curseur (lot de données) du coté client.

Discussions similaires

  1. variable clob apres un select reste vide
    Par makohsarah dans le forum PL/SQL
    Réponses: 0
    Dernier message: 29/04/2010, 14h05
  2. GridView reste vide après remplissage depuis un dataset
    Par TheReturnOfMuton dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/02/2009, 18h32
  3. Réponses: 3
    Dernier message: 05/10/2007, 10h37
  4. Recordset vide après premier export vers Word
    Par sl1980 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/08/2007, 16h25
  5. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 17h37

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