Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2010, 19h59   #1
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Par défaut problème avec méthode DAO et table SQL server

Bonsoir tout le monde,
Je rencontre un problème avec la méthode DAO.
Je travaille sur des tables SQL server et je rencontre une erreur d'execution 94 (utilisation incorrecte de Null), au niveau de la ligne "numero_commande = rs.Fields("ID").Value" (voir code ci-dessous)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'insertion dans dbo_COMMANDE_MERE
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb()
Set rs = db.OpenRecordset("dbo_COMMANDE_MERE", dbOpenDynaset, [dbSeeChanges])
rs.MoveLast
rs.AddNew
rs.Fields("NUMERO_COMMANDE").Value = nouv_num_bc_complet
rs.Fields("DATE_COMMANDE").Value = Now()
rs.Fields("ID_FOURNISSEUR").Value = id_fournisseur
rs.Fields("DEVISE").Value = Me.txt_devise.Value
numero_commande = rs.Fields("ID").Value
rs.Update
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
Pourtant dans l'excellent article de Christophe WARIN, il est mentionné "Dans le cas où un des champs est de type NuméroAuto, il est impossible d'affecter une valeur à ce champ. La numérotation automatique est gérée par le moteur Jet. Toutefois, pour des raisons diverses et variées, vous pouvez avoir le besoin de connaitre la nouvelle valeur du NuméroAuto créé. La valeur d'un tel champ est disponible avant l'appel de la méthode Update."

Ma ligne est bien placée avant Update et je ne vois pas trop comment m'en sortir sur ce coup.
Si quelqu'un avait une petite idée ça me rendrait bien service !
Merci d'avance à tous
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 23h40   #2
Membre habitué
 
Homme jean maury
Inscription : mars 2009
Messages : 116
Détails du profil
Informations personnelles :
Nom : Homme jean maury
Âge : 42
Localisation : Pologne

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : mars 2009
Messages : 116
Points : 111
Points : 111
Bonsoir.

Quelle est la valeur du champ ID sous SQL_Serveur apres le rajout des donnees ? Une valeur est elle presente ou le champ est il vide ?

Comment est declaree la valeur numero_commande ?

Peut etre mettre la ligne

Code :
1
2
 
numero_commande = rs.Fields("ID").Value
en commentaire et creer une nouvelle ligne comme suit :

Code :
1
2
 
msgbox "ID egal a " & rs.Fields("ID").Value

Ce qui nous donne :
Code :
1
2
3
 
'numero_commande = rs.Fields("ID").Value
msgbox "ID egal a " & rs.Fields("ID").Value
La boite de dialogue affichera alors la valeur du champ ID. Ainsi il sera possible peut etre de voir pourquoi ca pose probleme.

Cdlt.
jj4822 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 11h27   #3
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Bonjour,
Merci d'avoir pris le temps de me lire et me répondre.
Je pense n'avoir pas été assez clair lors de mon premier message.
Mon champ "ID" est ma clé primaire générée automatiquement par SQL server (champ Identity avec incrément).
J'ai juste besoin d'en récupérer la valeur après insertion afin de l'affecter à la variable publique "numero_commande" de type Long, pour ensuite m'en servir dans un autre formulaire.
Si je mets le code suivant, c'est à dire sans "numero_commande = rs.Fields("ID").Value", tout se passe bien, l'enregistrement s'effectue sans problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'insertion dans dbo_COMMANDE_MERE
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb()
Set rs = db.OpenRecordset("dbo_COMMANDE_MERE", dbOpenDynaset, [dbSeeChanges])
rs.MoveLast
rs.AddNew
rs.Fields("NUMERO_COMMANDE").Value = nouv_num_bc_complet
rs.Fields("DATE_COMMANDE").Value = Now()
rs.Fields("ID_FOURNISSEUR").Value = id_fournisseur
rs.Fields("DEVISE").Value = Me.txt_devise.Value
rs.Update
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
C'est à partir du moment où je cherche à connaître le nouveau numéro d'enregistrement que ça provoque l'erreur et bien évidemment que l'enregistrement ne s'effectue pas.
D'ordinaire, sur des tables Access, ça fonctionne tout le temps, mais là ce sont des tables SQL server.
Y aurait-il un temps de latence ?
Merci d'avance de vos réponses
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 12h00   #4
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 936
Points : 7 936
bjr,

avec sql server, le numéro auto semble donc être généré à l'insertion avec l'Update
comme il n'y a plus d'enregistrement courant après l'insertion, il faudrait essayer de se repositionner dessus avec BookMark et LastModified

à tester avec sql server, je ne l'ai pas :
Code :
1
2
3
4
 
rs.Update
rs.Bookmark = rs.LastModified
numero_commande = rs.Fields("ID").Value
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 12h13   #5
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Bonjour Arkham46,
Merci de cette réponse le problème est effectivement résolu de cette manière.
Encore un grand merci et aussi une très bonne année 2011 à tout le monde.
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h30.


 
 
 
 
Partenaires

Hébergement Web