Access: Méthode "seek"

Fermé
linux_1er Messages postés 14 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 17 août 2010 - 28 juil. 2010 à 12:23
blux Messages postés 26030 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 10 mai 2024 - 17 août 2010 à 15:23
Bonjour,

J'ai un problème avec l'utilisation de la méthode seek dans VBA for Access. J'ai bien écrit le code (ça ne fonctionne pas)mais je ne sais pas s'il faut activer d'autres références. Voici mon code et merci d'avance pour votre aide:


Private Sub Commande76_Click()
On Error GoTo err_en
'paramètres de connection
Dim connex As ADODB.Connection
Dim r_client As New ADODB.Recordset
Dim fld As ADODB.Field

'variable du code à manipuler
Dim val As Variant

Set connex = CurrentProject.Connection
val = Me.zt_val.Value

'ouverture du recordset client
r_client.Open "client", connex, adOpenKeyset, adLockReadOnly, adCmdTableDirect

With r_client
'définition de l'index du recordset
.Index = "primarykey"

'recherche de l'enregistrement spécifié
.Seek val, adseekfirsteq
If .EOF Then
MsgBox "Désolé, aucun client ne correspond à ce code"
Else
'affiche le nom du client
MsgBox r_client("nom")
End If
End With

'gestion des erreurs
er_sub:
Exit Sub

err_en:
MsgBox Error$
Resume er_sub
End Sub


2 réponses

blux Messages postés 26030 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 10 mai 2024 3 289
28 juil. 2010 à 13:57
Salut,

qu'est-ce qui ne fonctionne pas ? Message d'erreur ? Résultat inattendu ?
0
linux_1er Messages postés 14 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 17 août 2010
31 juil. 2010 à 12:58
Merci, au fait, ça ne signale rien du tout. rien ne se passe comme si je n'avais pas activé une références particulière. Même si c'est le cas, je ne sais pas laquelle activer???.
0
linux_1er Messages postés 14 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 17 août 2010
31 juil. 2010 à 13:12
excuse moi, mais cela me met ce message d'erreur :

"Erreur de compilation:
Membre de méthode ou de données introuvable"

L'erreur est signalée au niveau du ".Index" et du ".seek"

Merci d'avance!!
0
blux Messages postés 26030 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 10 mai 2024 3 289
2 août 2010 à 10:45
J'ai un petit souvenir : access n'autorise pas la manipulation avec des index sur des bases liées, est-ce le cas ?
0
linux_1er Messages postés 14 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 17 août 2010
8 août 2010 à 17:55
Oui c'est le cas merci beaucoup.

Au fait, j'ai un autre problème, je te remercie d'avance si tu peu m'aider:


Situation: j'ai 2 tables ( client, commande) et mon objectif est d'afficher les "n" plus grosses commandes d'un client "x" sélectionné à partir d'une liste. mais à chaque fois que j'exécute j'ai une erreur du type :" '-2147217913(80040e07)':
Type de données incompatible dans l'expression du
critère'"
J'ai essayé plein d truc mais rien n'a marché, au pire ça s'aggrave. je ne peux plus avancer dans mon projet. Merci de votre aide!!

Voici mon code:

Private Sub Commande83_Click()
Dim nb As Integer
Dim connex As ADODB.Connection
Dim r_cde As New ADODB.Recordset
Dim txt_sql As String
Dim i As Integer

Set connex = CurrentProject.Connection

'paramètre de la requete qui renvoie la liste des commandes du client
'sélectionné

txt_sql = "SELECT commande.code_commande,commande.date_commande, Sum(([commande.prix_u]*[commande.quantité_commandée])) as total from commande where commande.code_client='" & Forms!rec_clt!clt & "' group by commande.code_commande,commande.date_commande order by Sum([commande.prix_u]*[commande.quantité_commandée])"
Debug.Print txt_sql

'ouvrir le recordset
r_cde.Open txt_sql, connex, adOpenKeyset, adLockOptimistic

'récupère le nombre de commande à afficher
nb = Forms!rec_clt!nbre

'vider la liste à partir de la fin
For i = Me.clt.ListCount - 1 To 0 Step -1
Me.clt.RemoveItem (i)
Next i

i = 1
'affiche les n plus grosses commandes
Do While (Not r_cde.EOF) And i <= nb
Me.clt.AddItem r_cde!code_commande & ";" & r_cde!date_commande
r_cde.MoveNext

i = i + 1

Loop
End Sub
0
blux Messages postés 26030 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 10 mai 2024 3 289
8 août 2010 à 19:16
Ca plante où ? Dans la requête ?
Parce que si code_client est de type numérique, pas besoin de l'enquoter comme tu le fais...
0
linux_1er Messages postés 14 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 17 août 2010
12 août 2010 à 10:58
Exactement, c dans la requête que ça plante! Je vais essayer ce que t'as dit. Merci, je t'informe après.!!
0
linux_1er Messages postés 14 Date d'inscription mardi 1 juin 2010 Statut Membre Dernière intervention 17 août 2010
16 août 2010 à 11:24
slt! désolé, j'étais pas sur place! Je réussi à passer l'étape précédente mais je coince à ce niveau : 'vider la liste à partir de la fin
For i = Me.clt.ListCount - 1 To 0 Step -1
Me.clt.RemoveItem (i)
Next


L'erreur que ça écrit est : "erreur d'exécution '6014': la propriété OrigineSource doit être définie à la valeur "liste de valeurs" pour utiliser cette méthode".

En fait je dois vider la liste pour me permettre d'insérer uniquement les commandes dont j'ai besoin.

Merci d'avance!!
0
blux Messages postés 26030 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 10 mai 2024 3 289
17 août 2010 à 12:41
L'objet ctl est de quel type ?
0