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".
' 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.
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
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
(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. ?
(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
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é, jen 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
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é, jen ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidp47a5ea-bce8-4da8-bb67-87e0c49c57e8
"Michel Pellegrini" <Michel.Pellegrini@Enter-Net.com> a écrit dans le
message de news: %23kGEVj2xHHA.1776@TK2MSFTNGP03.phx.gbl...
| (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
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é, jen 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
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
(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
(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