Message d'erreur <- = -> ....

Signaler
Messages postés
90
Date d'inscription
vendredi 18 octobre 2002
Statut
Membre
Dernière intervention
27 décembre 2004
-
Messages postés
91
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
2 novembre 2005
-
J'ai cree un code vba qui ouvre un recordset d'une querie. la querie en la lancant manuellement fonctionne mais par code bugg avec ce message suivant : too few parameter : 1 ???????

je conclue donc que mon probleme se trouve dans le requete SQL de ce querie mais quoi ??
Merci de m'expliquer.

Dim dbs As Database
Dim rst As DAO.Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("querie")

1 réponse

Messages postés
91
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
2 novembre 2005

Si ta requête nécessite des paramètres d'entrée, il s'agit de les lui fournir.

Exemple :
Supposons une base de données regroupant les acteurs dans une table et leurs films dans une autre.

Acteur = {ACT_key, Nom, Prénom, Nationalité, ...}
Films = { FLM_key,Titre, Genre, Résumé,ACT_key}

Tu cherches tous les films joués par un acteur particulier.
La requête est du type :
SELECT * FROM table WHERE table.[champ] = paramètre

Ici, requête en VB :
SELECT "liste des champs que tu veux" FROM Acteur, Films WHERE [Films]![ACT_key] = [Acteur]![ACT_key]

Plutôt que d'utiliser le vieux système DAO, préfère lui ADO. (en ajoutant la biblio appropriée : ADODB)
Le code devient:
Private Sub FilmParActeur()

Dim cnx As New ADODB.Connection
Dim rc As New ADODB.Recordset
Dim query As String 'Pour ta requête
Dim ActStr As String 'Pour l'acteur
Dim Nom(2) As String
Dim ActKey As Long

ActStr = InputBox "Nom de l'acteur : ", "Acteur"
Nom = Split(ActStr," ")

'La connexion
cnx.ConectionSting = App.Path & "\mabase.mdb"
cnx.Provider = "Microsoft.Jet.Oledb.4.0"
cnx.Open

'Search for ACT_keyquerie "SELECT * FROM Acteur WHERE [Acteur]![Nom] """ & Nom(1) & """"If Nom(2) <> "" Or Nom(2) <> " " Then querie querie & " AND [Acteur]![Prénom] """ & Nom(2) & """"

'Open Recordset for Acteur
rc.Open querie, cnx, AdOpenDynamic, AdLockReadOnly
If rc.EOF = True Then Exit Sub
ActKey = rc.Fields("ACT_Key")
rc.Close

'Open Recordset for Films
querie = "SELECT * FROM Films WHERE [Films]![ACT_Key] LIKE " & ActKey
rc.Open querie, cnx, AdOPenDynamic, AdLockOptimistic
If rc.EOF =  True Then Exit Sub

For i = 0 To rc.Fields.Count - 1
Debug.Print rc.Fields(i)
Next i

rc.Close
cnx.Close
End Sub


Cette procédure permet de trouver les films d'un acteur par rapport à son nom et à son prénom, en ayant repérer la clef primaire de cette acteur.

La méthode est du même style pour DAO.
Essaie les deux méthodes, DAO et ADO.

J'espère que ça va t'aider,

A plus,

PrX, :) Beginner (to Initiate) but not Out of Order
0