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:
Requête 2 :
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;
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 INSERT INTO dbo_AgenceDodNiv2 ( IDAgenceNiv2, IDAgenceNiv1, NomAgence ) SELECT SousAgence.N°SsAgence, SousAgence.N°Agence, SousAgence.Nom FROM SousAgence
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.
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
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
J'ai essayé de faire mes INSERT en ADODB : 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
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
Partager