Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 10/05/2011, 17h21   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 2
Points : 0
Points : 0
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 :
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 :
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 :
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 :
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
jayjazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 09h03   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Bonjour,

Les champs ID sont de type numero auto ?

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 22h07   #3
Membre chevronné
 
Inscription : mai 2006
Messages : 928
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 928
Points : 762
Points : 762
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
cbleas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 10h54   #4
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 2
Points : 0
Points : 0
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.
jayjazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 13h17   #5
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
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,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web