Requete sql server + vb6

chaima01 Messages postés 24 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 11 novembre 2012 - 18 mai 2011 à 00:11
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 18 mai 2011 à 11:36
bonsoir ,

j'ai 2 tables :

serveur ( num_serie(clé_primaire),nom,code_marque,adresse_ip)

marques( code_marque (clé_primaire),nom_marque)

je veux réaliser une requête qui permet d'afficher le nom de la marque suivant code_marque. j'utilise vb6.
voici mon essai

Rs3.Open "select * from marques ", cnn, adOpenKeyset, adLockOptimistic
If Rs3.RecordCount > 0 Then
i = 1
Rs3.AbsolutePosition = 1
MSFlexGrid1.Rows = 1
Do While Not Rs3.EOF
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
c = Rs3.Fields("nom_marque")
i = i + 1
Rs3.MoveNext
Loop
End If

Rs.Open "select * from serveur", cnn, adOpenKeyset, adLockOptimistic

If Rs.RecordCount > 0 Then
i = 1
Rs.AbsolutePosition = 1
MSFlexGrid1.Rows = 1
Do While Not Rs.EOF
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
MSFlexGrid1.TextMatrix(i, 1) = Rs.Fields(0)
MSFlexGrid1.TextMatrix(i, 2) = Rs.Fields(1)

MSFlexGrid1.TextMatrix(i, 3) = c

MSFlexGrid1.TextMatrix(i, 4) = Rs.Fields(3)


i = i + 1
Rs.MoveNext
Loop
End If

Rs.Close
rs3.close
le probléme c'est que dans l'exécution le champ nom marque est vide

svp aider moi

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2011 à 00:49
Salut

Première précaution : Supprime tous les "On Error Resume Next" présents dans ton code : ils masquent les erreurs réelles. A n'utiliser que dans certains cas précis.

De quels types sont tes objets cnn, Rs, rs3; comment sont-ils déclarés ?

As-tu suivi ton programme pas-à-pas pour vérifier, par exemple, ce que renvoie .RecordCount ?
Débogage :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2011 à 00:49
La prochaine fois, merci d'utiliser la coloration syntaxique (3ème icone à droite) pour coller ton code = plus facile à lire + conserve les indentations en début de ligne.
0
chaima01 Messages postés 24 Date d'inscription lundi 1 mars 2010 Statut Membre Dernière intervention 11 novembre 2012
18 mai 2011 à 01:08
Option Explicit
Dim Rs As New ADODB.Recordset
Dim Rs3 As New ADODB.Recordset
Public cnn As New ADODB.connection

Private Sub Form_Load()
Rs3.Open "select * from marques ", cnn, adOpenKeyset, adLockOptimistic
If Rs3.RecordCount > 0 Then
i = 1
Rs3.AbsolutePosition = 1
MSFlexGrid1.Rows = 1
Do While Not Rs3.EOF
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
c = Rs3.Fields("nom_marque")
i = i + 1
Rs3.MoveNext
Loop
End If

Rs.Open "select * from serveur", cnn, adOpenKeyset, adLockOptimistic

If Rs.RecordCount > 0 Then
i = 1
Rs.AbsolutePosition = 1
MSFlexGrid1.Rows = 1
Do While Not Rs.EOF
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
MSFlexGrid1.TextMatrix(i, 1) = Rs.Fields(0)
MSFlexGrid1.TextMatrix(i, 2) = Rs.Fields(1)

MSFlexGrid1.TextMatrix(i, 3) = c

MSFlexGrid1.TextMatrix(i, 4) = Rs.Fields(3)


i = i + 1
Rs.MoveNext
Loop
End If

Rs.Close
Rs3.close 

end sub


j'ai suivi le programme, mais toujours le champ nom marque est vide !!
pouvez-vous m'aider ?!
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
18 mai 2011 à 10:37
Bonjour,

Plusieurs remarques:

1)Pourquoi faire 2 SELECT totalement indépendants, nom_marque devant nécessairement être inclue dans les 2 tables, rajoutes une clause WHERE.
2) Est-il normal que tu remplisses la même Grid ?
3) Evites d'utiliser MSFlexGrid qui n'est pas DataBound, utilises pour les cas simples la DataGrid et pour les plus complexes MSHFlexGrid. Pour les 2 tu fais
Set maGrid.DataSource = mon_Recordset
au lieu de faire une itération qui prend du temps.

Enfin, as-tu fait comme le disait Jack à l'aide de la touche F9 et cie. Si oui, donne-nous le résultat avec précision (ligne, valeur de variable, etc...)

Calade
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mai 2011 à 11:36
Re

Oui, quelle est la valeur de .RecordCount après chaque requète ?

Remarques anodines qui ne sont pas source d'erreur :
- A quoi sert ta variable 'i' ?
- .AbsolutePosition : je ne connais pas. Essaye d'utiliser le simple .MoveFirst
- Pour alléger la relecture de ton code, tu peux remplacer
Rs.Fields(1)
par l'une de ces syntaxes, plus lisibles
Rs.Fields("le nom du champ").Value
Rs![le nom du champ]
- Pour éviter de créer mille variables, tu peux réutiliser le même RecordSet pour chaque requète, suffit de lui faire un .Close avant de le réutiliser.
0
Rejoignez-nous