Erreur 80004005 lors de l'exécution de la requête dans ADODB (VBA, Excel et Acccess 2010)

J'ai un problème que je ne peux pas me résoudre. J'ai une database Access où j'essaie de créer un set de requêtes en utilisant VBA dans Excel à l'aide d'ADODB.

J'ai plusieurs requêtes qui ont été créées avec succès, c'est-à-dire. celui ci-dessous ici. La seconde ne fonctionnera cependant pas. Si je copy la requête manuellement dans la database d'access (De SELECT et forward) et que save est "DK_Teledata_1", ça marche parfaitement

CREATE PROCEDURE DK_Aktiviteter_Union_1 AS SELECT DK_Aktivitet.År FROM DK_Aktivitet; 

Et celui qui ne fonctionne pas

 CREATE PROCEDURE DK_Teledata_1 AS SELECT DK_Teledata.Dato FROM DK_Teledata INNER JOIN Time_Intervals ON DK_Teledata.Interval = Time_Intervals.Time_Interval; 

Les requêtes suivantes avec les mêmes données sont créées sans aucun problème:

 CREATE PROCEDURE DK_Teledata_1 AS SELECT * FROM DK_Teledata; CREATE PROCEDURE DK_Teledata_1 AS SELECT * FROM Time_Intervals; CREATE PROCEDURE DK_Teledata_1 AS SELECT * FROM Time_Intervals, DK_Teledata; 

Dès que je crée la jointure ou que j'utilise un "WHERE DK_Teledata.Interval = Time_Intervals.Time_Interval", il échoue.

Les champs Intervalons et Time_Intervals sont tous deux des champs Texte avec la même longueur et les mêmes propriétés.

Aidez-nous!

Merci beaucoup Martin

Utilisation d'Excel 2010, file de database accdb et string de fournisseur "Microsoft.ACE.OLEDB.12.0".

Comme une hypothèse sauvage, je vous suggère de replace CREATE VIEW pour CREATE PROCEDURE .

Si cela ne fonctionne pas non plus, vous pouvez utiliser DAO pour créer votre requête.

 Dim strSql As Ssortingng Dim db As DAO.Database Dim qdf As DAO.QueryDef strSql = "SELECT DK_Teledata.Dato" & vbCrLf & _ "FROM DK_Teledata INNER JOIN Time_Intervals" & vbCrLf & _ "ON DK_Teledata.Interval = Time_Intervals.Time_Interval;" Set db = OpenDatabase("C:\db_folder\your.accdb", True, False) Set qdf = db.CreateQueryDef("DK_Teledata_1", strSql) 

Ce code utilise une binding anticipée, donc il faut définir une reference. Mais vous pourriez faire la même chose avec une binding tardive qui ne nécessite pas de reference.

 Dim strSql As Ssortingng Dim dbe As Object Dim db As Object Dim qdf As Object strSql = "SELECT DK_Teledata.Dato" & vbCrLf & _ "FROM DK_Teledata INNER JOIN Time_Intervals" & vbCrLf & _ "ON DK_Teledata.Interval = Time_Intervals.Time_Interval;" Set dbe = CreateObject("DAO.DBEngine.120") Set db = dbe.OpenDatabase("C:\db_folder\your.accdb", True, False) Set qdf = db.CreateQueryDef("DK_Teledata_1", strSql)