Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme bizarre avec OpenRecordset()

4 réponses
Avatar
Michel Pellegrini
J'ai un code simple. Lorsque je supprime une valeur dans
un formulaire dans un contrôle Zone de texte (lié à un champ
d'une table) dans un formulaire, il y a une valeur dans un
autre champ du même enregistrement qui est aussi supprimé
dans la table.

Voici le code:

' TABLE
' TNom : Nom de la table.
' NomID : Nom de la clé primaire de la table (NuméroAuto)
' SecondNom : Valeur qui doit être supprimée dans la table.

' FORMULAIRE
' Controle1 : Nom du contrôle dans lequel je supprime ce qu'il y a.
' ControleID : Contrôle lié à NomID (donc, à la clé primaire).

Private Sub Controle1_LostFocus()

Dim stAnnule As String
Dim rst As Recordset

' Cette ligne simmule un clic de souris sur "Sauvegarder
Enregistrement".

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

' Me.ControleID contient le numéroauto (clé primaire de
l'enregistrement)

If IsNull(Me.Controle1.Value) Then
stAnnule = Me.ControleID
stAnnule = "NomID = " & stAnnule

Set rst = CurrentDb.OpenRecordset("TNom", dbOpenDynaset)

rst.MoveLast
rst.FindFirst stAnnule

rst.Edit
rst!SecondNom = Null
rst.Update

rst.Close

End If

End Sub
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Access retoure l'erreur suivante lors du runtime à propos de FindFirst:
"Erreur de compilation: Membre de méthode ou de données introuvable."

Si je place un breakpoint avant la rencontre de rst.FindFirst, il
retourne la même erreur alors qu'il n'a même pas encore rencontré cette
ligne.

Ce qui est bizarre est que j'ai une autre base de donnée, différente
de celle-ci, qui contient un code identique, et il n'y aucun problème.

Michel.Pellegrini@Enter-Net.com
Vercheres QC Canada

4 réponses

Avatar
Michel Pellegrini
Dans le code de mon message précédent, si je place un point
d'exclamation devant toutes les lignes, sauf les principales,
il reste ceci:

Private Sub Controle1_LostFocus()

Dim rst As Recordset

Set rst = CurrentDb.OpenRecordset("TNom", dbOpenDynaset)

rst.Close

End Sub

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Acces renvoie cette erreur pour la ligne "Set rst..."

Erreur d'exécution '3001'
Invalid argument

1) J'ai bien une table que j'ai nommé TNom. D'ailleurs,
c'est ma seule table, j'ai créé cette base de données
pour faire ce test.

2) Si je remple dbOpenDynaset pour dbOpenTable, il retourne
la même erreur.

Qu'est-ce qui cloche, tout semble correct ?


Vercheres QC Canada
Avatar
Michel Pellegrini
(Moi)
|>
|> Private Sub Controle1_LostFocus()
|>
|> Dim rst As Recordset
|> Set rst = CurrentDb.OpenRecordset("TNom", dbOpenDynaset)
|> rst.Close
|>
|> End Sub
|>
|> ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|> Acces renvoie cette erreur pour la ligne "Set rst..."
|>
|> Erreur d'exécution '3001' Invalid argument

Je viens de trouver la réponse sur cette page Web:
http://forum.hardware.fr/hfr/Programmation/vba-acceder-enregistrements-sujet
_14202_1.htm

1) Dans le module (sous Microsoft Visual Basic) il faut cocher
"Microsoft DAO 3.6 Object Library" dans Menu Outils/Références.

L'erreur 3001 est réglée. On reçoit maintenant l'erreur 13. On corrige
cette erreur en déclarant la variable rst comme ceci:

2) Dim rst as DAO.Recordset

Ce que je ne comprends pas est que dans les exemples qui se trouvent
à la page OpenRecordset dans l'aide Visual Basic d'Access, cette variable
est toujours déclaré comme ceci:

Dim rst as Recordset

Est-ce parce que il y a une autre case qu'on peut cocher
pour ne pas avoir besoin d'utiser le DAO. ?


Vercheres QC Canada
Avatar
Raymond [mvp]
Bonjour.

c'est parce qu'une grosse partie des fonctions ADO et DAO portent le même
nom et que ADO dans certaines versions est la librairie par défaut (access
2000 par exemple). conclusion, si on ne précise pas, ton recordset DAO se
dirige vers la librairie ADO. Pour être compatible avec toutes les versions,
préciser DAO. voir "Opérations obligatoires à réaliser " sur la page :
http://officesystem.access.free.fr/migration.htm

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j’en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidp47a5ea-bce8-4da8-bb67-87e0c49c57e8


"Michel Pellegrini" a écrit dans le
message de news: %
| (Moi)
||>
||> Private Sub Controle1_LostFocus()
||>
||> Dim rst As Recordset
||> Set rst = CurrentDb.OpenRecordset("TNom", dbOpenDynaset)
||> rst.Close
||>
||> End Sub
||>
||> ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
||> Acces renvoie cette erreur pour la ligne "Set rst..."
||>
||> Erreur d'exécution '3001' Invalid argument
Avatar
Michel Pellegrini
(Moi)
|> [...] On reçoit maintenant l'erreur 13. On corrige
|> [...] cette erreur en déclarant la variable rst comme ceci:
|> Dim rst as DAO.Recordset
|> Ce que je ne comprends pas est que dans les exemples qui se
|> trouvent à la page OpenRecordset dans l'aide Visual Basic
|> d'Access, cette variable est toujours déclaré comme ceci:
|> Dim rst as Recordset
|>
|> Est-ce parce que il y a une autre case qu'on peut cocher
|> pour ne pas avoir besoin d'utiser le DAO. ?

(Raymond, Access MVP)
|> c'est parce qu'une grosse partie des fonctions ADO et DAO
|> portent le même nom et que ADO dans certaines versions est
|> la librairie par défaut (access 2000 par exemple). conclusion,
|> si on ne précise pas, ton recordset DAO se dirige vers la
|> librairie ADO. Pour être compatible avec toutes les versions,
|> préciser DAO. voir "Opérations obligatoires à réaliser " sur la page :
|> http://officesystem.access.free.fr/migration.htm

Ok, merci, j'ai effectivement Access 2000.


Vercheres QC Canada