Access: Méthode "seek"
linux_1er
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
blux Messages postés 27137 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27137 Date d'inscription Statut Modérateur Dernière intervention -
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
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
A voir également:
- Access: Méthode "seek"
- Acer quick access - Forum Logiciels
- Access appdata - Guide
- Exemple base de données access à télécharger gratuit - Forum Access
- Exemple base de données Access de gestion ✓ - Forum Logiciels
- Quick acces ✓ - Forum Windows
2 réponses
J'ai un petit souvenir : access n'autorise pas la manipulation avec des index sur des bases liées, est-ce le cas ?
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
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
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!!
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!!
"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!!