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

Requêtes et SQL. Discussion :

Insert Into erreur "ODBC --Call Failed" avec un champ sql server Identify


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Insert Into erreur "ODBC --Call Failed" avec un champ sql server Identify
    Bonjour,

    Je travail sur la ré écriture complète de bases Access 2000 vers un Project access (.ADP) / sql server.

    Etant donnés qu'il s'agit d'une ré écriture complète, je me sert d'une base de données Access (.MDB) pour faire la migration des données, donc dans ce cas les tables des différentes base Access sont liée a ce projet ainsi que mes futures Tables Sql Server. voila pour l'environnement.

    J'effectue mon transfert de données, via des requetes INSERT INTO relativement simple tel que :

    Requête 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO dbo_AgenceDodNiv1 ( IDAgenceNiv1, NumDOD, NomAgence )
    SELECT AgenceDOD.N°Agence, AgenceDOD.N°DOD, AgenceDOD.NomAgence
    FROM AgenceDOD;
    Requête 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO dbo_AgenceDodNiv2 ( IDAgenceNiv2, IDAgenceNiv1, NomAgence )
    SELECT SousAgence.N°SsAgence, SousAgence.N°Agence, SousAgence.Nom
    FROM SousAgence
    Ces requêtes sont lancées depuis du vba de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim db As DAO.Database
        Dim qdef As DAO.QueryDef
     
        Set qdef = db.QueryDefs("AgenceNiv1_Append")
        qdef.Execute dbSeeChanges
        qdef.Close
     
        Set qdef = db.QueryDefs("AgenceNiv2_Append")
        qdef.Execute dbSeeChanges
        qdef.Close
    Les 2 tables dbo_AgenceDodNiv1 et dbo_AgenceDodNiv2 ont la même structure. et comme clés primaire, un champ auto dans ACCESS et un champ Int dans SQL Server. dans sql server j'ai positionné ce champ a Identify = Yes de façon a garder le numéro automatique pour les futures enregistrements.

    Mon problème est le suivant :

    La table dbo_AgenceDodNiv1 se met à jour correctement et conserve les ancien numéro. dbo_AgenceDodNiv2 ne se met pas à jour.

    si je rajoute l'argument dbFailOnError à dbSeeChanges, j'ai une erreur "ODBC __CallFailed"

    si après avoir executé mon bout de code j'execute à la main la requête correpondant a la table dbo_AgenceDodNiv2, il m'indique une erreur de "Key violation". MAIS, si j'execute à la main cette requête après avoir fermé puis ré-ouvert mon.mdb, CELA FONCTIONNE !!!

    j'ai essayé d'intercaller entre les 2 INSERT le bout de code suivant : Sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        CurrentDb.TableDefs.Refresh
        Set tbl = MyDB.TableDefs("dbo_AgenceDodNiv1")
        tbl.RefreshLink
        Set tbl = MyDB.TableDefs("dbo_AgenceDodNiv2")
        tbl.RefreshLink
    J'ai essayé de faire mes INSERT en ADODB : Sans succès

    et bien sur si je met la propriété Identify = No, cela fonctionne

    mais pourquoi cela fonctionnerais avec la Propriété Identify = Yes pour la première table et pas pour la 2ème ?

    [EDIT]Je précise qu'il ny pas encore de relation de définie sous SQL SERVER[FIN EDIT]

    J'avoue que je suis un peu a bout de souffle, en espérant vous avoir fournit un maximum d'information et que vous puissiez m'aider.

    Codialement,
    Jayjazz

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 056
    Points : 24 655
    Points
    24 655
    Par défaut
    Bonjour,

    Les champs ID sont de type numero auto ?

    Cordialement,

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    Bonjour,
    dans SQL server il faut affecter un incrément que l'on doit définir. ce qui doit etre ton problème.
    Bonne soirée

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    d'abord, merci de vous interesser a mon cas

    Oui les champs ID sont des numéros auto sous SQL Server, c'est cette fameuse proprété Identify qui fait que c'est un numéro auto, et l'incrément est de 1 avec un départ a 1

    Lorsque je retire cette propriété, tout fonctionne correctement, mais des que je la remet cela fonctionne aléatoirement sur la première table importée, et jamais sur les tables suivantes, sauf si je ferme mon mdb et que j'exécute ma requête à la main après ré ouverture de la base, et ceci est a faire pour chaque table.

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 056
    Points : 24 655
    Points
    24 655
    Par défaut
    Bonjour,
    Il n'est pas conseillé de faire de l'insertion sur ce type de champs à moins de shunter le système d'autoincrément le temps de la requete.

    Regarde la commande Set Identity_insert dans l'aide Sql Server.
    http://msdn.microsoft.com/fr-fr/library/ms188059.aspx

    Cordialement,

Discussions similaires

  1. [AC-2003] Access 2003 ODBC Call Failed error
    Par Skullish dans le forum VBA Access
    Réponses: 11
    Dernier message: 06/06/2012, 13h16
  2. [AC-2003] Problème avec oDB.Execute"Insert into" erreur 3061
    Par SIGER_971 dans le forum Access
    Réponses: 5
    Dernier message: 08/07/2009, 11h54
  3. insert into erreur d'execution 3137
    Par soussou92 dans le forum VBA Access
    Réponses: 11
    Dernier message: 01/09/2008, 13h20
  4. Insert INTO : Erreur de Syntaxe
    Par mishkai dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/08/2008, 09h25
  5. [MySQL] insert into , erreur
    Par naazih dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 02/05/2008, 14h43

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