IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

problème avec méthode DAO et table SQL server [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 70
    Points
    70
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    numero_commande = rs.Fields("ID").Value
    en commentaire et creer une nouvelle ligne comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msgbox "ID egal a " & rs.Fields("ID").Value

    Ce qui nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 70
    Points
    70
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    rs.Update
    rs.Bookmark = rs.LastModified
    numero_commande = rs.Fields("ID").Value

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 70
    Points
    70
    Par défaut
    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épondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/09/2011, 16h13
  2. [Vxi3] Problème avec une table SQL SERVER 2005
    Par ahmed_amine dans le forum Designer
    Réponses: 2
    Dernier message: 14/06/2011, 18h10
  3. problème d'ouverture d'une table sql server 2005
    Par WX500 dans le forum Administration
    Réponses: 2
    Dernier message: 03/05/2011, 16h36
  4. Réponses: 6
    Dernier message: 11/02/2008, 13h48
  5. [SQL-Server] Problème avec odbc et ma connexion SQL Server
    Par vodevil dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/12/2005, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo