cs_Squallou
Messages postés249Date d'inscriptionmardi 5 août 2003StatutMembreDernière intervention15 juillet 2006
-
19 févr. 2006 à 10:43
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 2006
-
20 févr. 2006 à 13:22
Hello tout le monde
J'ai un tout petit pb avec une requête SQL sous VB6/ADO.
Admettons que j'ai la table Client qui contient des numéros de clients dans sa colonne 'NumCli'.
Je voudrais afficher une erreur si l'utilisateur saisit un code qui n'existe pas (du genre code 4 alors que ça s'arrête à 3). Mais je ne trouve pas comment faire...
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 févr. 2006 à 11:04
Salut
"Colonne" ... colonne de quoi ?
Pour cela, une fois que la saisie est terminée et que la personne a validé (ou sort de la zone de saisie), il faut questionner la DB avec un RecordSet.
Je suppose que tu as une connexion à ta DB : maConn
Dim monRS As RecordSet
Set monRS = New RecordSetsSQL "Select NoClient From maTable Where NoClient " & monNoSaisi ' la valeur dans colonne NumCli
monRS.Open sSQL, maConn, adOpenStatic, adLockReadOnly
If monRS.RecordCount = 0 Then
' Le n° n'existe pas
Else
' Le n° existe
End If
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 févr. 2006 à 11:53
Pas normal.
Il doit y avoir un problème avec ton code.
S'il n'exécute pas le Else, c'est que la structure d'un For-Next, Do-Loop ou un autre If est incomplète.
Vérifie bien.
Eventuellement, colle ici ton code qu'on y jette un oeil.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 févr. 2006 à 12:21
Ah bah voilà :
Le numéro client est un chiffre.
Je suppose que le champ ClientCode dans ta DB a aussi été déclaré comme numérique.
Dans une requète SQL, il ne faut pas encadrer les chiffres avec les '
Par contre, ta variable client en VB est un chiffre et tu l'insères dans une chaine : Il est préférable (mais pas obligatoire) de la convertir en String :
"SELECT ClientNom FROM client WHERE ClientCode=" & CStr(client)
Donc, c'était normal qu'il ne trouve jamais ton numéro.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 févr. 2006 à 12:36
Tu disais que le RecordCount renvoyait -1 : Bizarre
Teste donc si le RecordCount > 0
Est-ce que ta DB est bien ouverte ?
Est-ce que tu as mis des "On Error Resume Next" qui te masqueraient le problème ?
Est-ce que ta variable "client" contient bien quelques chose dans ta Sub ?
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Squallou
Messages postés249Date d'inscriptionmardi 5 août 2003StatutMembreDernière intervention15 juillet 2006 19 févr. 2006 à 12:45
Oui il n'y a aucun pb, en ne mettant pas le IF et si je saisis un nombre existant j'ai bien le nom correspondant. En cas de numéro valide le résultat est nickel donc.
Mais en effet mon RecordCount est toujours égal à -1 que ça soit en cas de numéro valide ou non.
Il n'y a pas de On error, la base est bien ouverte (puisque la requête est bien exécutée de toute manière...), la variable client est bonne (idem)
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200618 20 févr. 2006 à 13:22
Faut dire que la propriété RecordCount se comporte bizarrement.
Avec DAO, pour être sùr du résultat, il fallait faire un rs.movelast avant le rs.recordcount.
En ADO, j'ai aussi rencontré le même problème.
Donc, perso, si je n'ai besoin que de savoir si la requête a remonté des enregistrements ou non je teste le EOF, c'est plus sùr.
Autre chose, j'ai remarqué qu'en ADO, il y avait moins de problèmes en utilisant le paramètre adOpenKeyset plutôt que adOpenDynamic ou adOpenStatic.
Pour connaître le nombre exact d'enregs correspondants à mes critères, je fais plus confiance à une requête "select count(*) ....". C'est peut-être inutile mais au moins, je n'ai jamais eu de mauvaise surprise avec.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?