Resultat d'une requete (VBA)

sonia_mgr Messages postés 31 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 1 juillet 2004 - 2 mars 2004 à 16:47
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 - 11 juin 2004 à 11:51
bonjour..

je voudrai savoir comment peut on stocker le resultat d'une requete SQL pour l'afficher ensuite dans un formulaire..
Je veux savoir aussi s'il est possible d'avoir comme condition de recherche pour la requete (WHERE ....=.....)une variable qui n'est autre que la valeur d'un champs sur un formulaire (et donc une variable non constante)??

merci d avance.
So

15 réponses

darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
2 mars 2004 à 17:09
Bonjour,

Tu peux stocker le résultat d'une requête dans un recordset pour toute utilisation future

Par exemple si tu veux les enregistrements de la table test pour lesquels le champ id est inférieur à 5

Dim rst as ADODB.recordset
Dim sSql as String

sSql = "Select * from test where id < 5"

Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.open sSql, currentProject.ActiveConnection, adOpenKeyset, adLockOptimistic

Pour pouvoir boucler sur ce recordset tu n'as qu'à utiliser ceci
Do until rst.EOF
'Affiche les valeurs voulues
msgbox rst(champ1) & " " & rst(champ2), etc...
'Ou
'Les numéros correspondent à l'ordre des colonnes en commençant par 0
msgbox rst(0) & " " & rst(1) & " " etc...

'Passe à l'enregistrement suivant
rst.moveNext
Loop

Si maintenant tu veux dans un formulaire pouvoir utiliser une condition where il te suffit de faire ce genre de chose.

Toujours en utilisant la table test, tu as un formulaire avec un champ texte (txtMax) où tu saisis la valeur max de id

sSql = "Select * from test where id < " & txtMax"

Et le reste est identique

Voilà, désolé pour le roman ;)
0
sonia_mgr Messages postés 31 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 1 juillet 2004
3 mars 2004 à 10:05
Merci pour ces explications mais j'ai maintenant un autre probleme.. (c'etai prévisible!!)
j'ai du mal a comprendre la ligne:
rst.open sSql, currentProject.ActiveConnection, adOpenKeyset, adLockOptimistic

Cela me genere une erreur d execution '3001'
Les arguments sont de type incorrect, en dehors des limites autorisées, ou en conflit les uns avec les autres.

Ya peutetre des truc que j ai pas declaré.. J'ai un peu de mal avec les connexion, projet, dataBase....desolee..

merci bizzz
So
0
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
3 mars 2004 à 10:37
J'ai oublié de préciser qu'il fallait ajouter une référence à
Microsoft ActiveX Data Objects 2.6 Library (2.5,2.4,etc...)

Pour cela, va dans le menu Outils quand tu es sur l'éditeur VBA et choisis référence, puis coche la référence voulue
0
sonia_mgr Messages postés 31 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 1 juillet 2004
3 mars 2004 à 11:08
ça marque encore la meme erreur.
C'est bien la 2.6 ke je doi cocher?? il n'y en a pas d autre a ajouter?
So
0

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

Posez votre question
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
3 mars 2004 à 11:55
Oui il s'agissait bien de la 2.6

Est ce que tu pourrais me montrer le code de ta Sub, que je puisse y regarder de plus près?
0
sonia_mgr Messages postés 31 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 1 juillet 2004
3 mars 2004 à 13:17
voila:

Private Sub txtCode_Exit(Cancel As Integer)

Dim var As String
Dim rst As ADODB.Recordset
Dim sSql As String

If Me.txtCode <> "" Then
var = Me.txtCode
DoCmd.SetWarnings False sSql "select * from PERSONNE where NPERS '" & var & "' ;"
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open sSql, ActiveConnection, adOpenKeyset, adLockOptimistic
If rst.EOF = False Then
Form_SaisieHI!txtNom = rst(2)
Form_SaisieHI!txtPrenom = rst(3)
Else
MsgBox ("le code personnel &var n'existe pas")
End If
Else
Me.txtNom = ""
Me.txtPrenom = ""
End If
End Sub

On fait une recherche sur le code personnel qui est unique.
On affiche ensuite le nom et le prenom correspondants au code.
J'espere ke ça sera assez clair...
So
0
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
3 mars 2004 à 14:20
Oups, je me suis trompé dans l'exemple que je t'ai donné, il faut mettre ceci en fait

rst.Open sSql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Ca devrait fonctionner beaucoup mieux
0
sonia_mgr Messages postés 31 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 1 juillet 2004
3 mars 2004 à 14:28
en effet ça marche bcp mieux ;)
Merci bcp pour ton aide
a la prochaine...
So
0
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
3 mars 2004 à 14:33
je t'en prie, que ne ferait on pas pour un ;)
0
nithdabeille Messages postés 6 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 11 juin 2004
10 juin 2004 à 17:01
ben moi j'y arrive toujours pas!!au secours c URGENT!!
voici mon code:
Private Sub Commande73_Click()
Dim numor, numdest, sql As String
Dim res As Integer
Dim rst As ADODB.Recordset
numor = Me.CboOr.Value
numdest = Me.CboDest.Value
Set rst = New ADODB.Recordset
sql = "SELECT numplace FROM place WHERE idpaqbt=" & numor & ""
rst.CursorLocation = adUseClient
rst.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If rst.EOF = False Then
MsgBox (rst(0))
End If

End Sub

voila!!j'esperes que c assez clair
0
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
11 juin 2004 à 08:47
Quel est le message d'erreur quer tu obtiens?
0
nithdabeille Messages postés 6 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 11 juin 2004
11 juin 2004 à 11:22
il m'affiche "incompatibilité de type" à la ligne rst.open sql,...
0
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
11 juin 2004 à 11:36
A priori le problème vient de ta requête

est ce que ton champ idpaqbt est de type numérique?

Si oui, est ce que ta valeur numoer l'est également?

Sinon, tu dois ajouter des quotes dans ta requête comme suit
idpaqbt='" & numor & "'"
0
nithdabeille Messages postés 6 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 11 juin 2004
11 juin 2004 à 11:47
Voici mon nouveau code:
Private Sub Commande73_Click()
Dim numor, numdestAs integer
dim sql as string
Dim rst As ADODB.Recordset
numor = Me.CboOr.Value
numdest = Me.CboDest.Value
Set rst = New ADODB.Recordset
sql = "SELECT numplace FROM place WHERE idpaqbt=" & numor & ""
rst.CursorLocation = adUseClient
rst.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If rst.EOF = False Then
MsgBox (rst(0))
End If

End Sub

idpaqbt est bien un entier et j'ai changé le numor en entier.
Mais maintenant il m'affiche:"la méthode 'open' de l'objet"recordset" a echoué!!
0
darollinghobbit Messages postés 55 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 18 juin 2004 1
11 juin 2004 à 11:51
Dans ce cas fais afficher ta requête et exécute là dans access dans la partie requête pour voir si elle passe correctement
0
Rejoignez-nous