Requete sql server + vb6

Signaler
Messages postés
24
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
11 novembre 2012
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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.
Messages postés
24
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
11 novembre 2012

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 ?!
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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.