2012-08-08 47 views
2

對於您即將收到的代碼集合,我表示歉意。問題是:爲什麼我的查詢在設計窗口中工作(請注意Debug.Print .CommandText輸出準確的文本放入訪問查詢中),但是對象'_Command'的方法'執行'失敗並且不運行INSERT查詢。代碼如下:VBA查詢未作爲訪問查詢執行

cnn.BeginTrans 'Begin deletion 
    cmdText = "DELETE * FROM tblB1B2" 
    Set cmd = New ADODB.Command 
    With cmd 
     .CommandType = adCmdText 
     .ActiveConnection = cnn 
     .CommandText = cmdText 
     .Execute 
    End With 
    cnn.CommitTrans 'Commit Deletion 

    cnn.BeginTrans 'Begin update 
    cmdText = "INSERT INTO tblB1B2 IN '" & toDB & "' " & _ 
       "SELECT interne AS interne, groupe AS groupe, MAX(itemref) AS [item], largeur AS largeur, hauteur AS hauteur, local AS [local], etage AS etage, partie AS partie, dessin AS dessin, datezonage AS datezonage, externe AS externe, erreur AS erreur, tag_hndl AS tag_hndl, tag_dessin AS tag_dessin, pobj_hndl AS pobj_hndl, pobj_type AS pobj_type, pobj_bname AS pobj_bname, zpl_hndl AS zpl_hndl, id AS id, Sidewalk AS Sidewalk, BarrierFreePathOfTravel AS BarrierFreePathOfTravel, Signage AS Signage, Hardware AS Hardware, PowerDoorOperator AS PowerDoorOperator, PDOMountHeight AS PDOMountHeight, ClearWidth AS ClearWidth, ClearSpace AS ClearSpace, ManoeuveringSpace AS ManoeuveringSpace, TwoDoorsInASeries AS TwoDoorsInASeries, Comments AS [Comments] " & _ 
       "FROM " & _ 
        "(SELECT interne, groupe, [item] AS itemref, largeur, hauteur, local, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, [Comments] " & _ 
        "FROM tblB1B2 IN '" & dbArray(0) & "' " & _ 
       "UNION ALL " & _ 
        "SELECT interne, groupe, [item] AS itemref, largeur, hauteur, local, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, [Comments] " & _ 
        "FROM tblB1B2 IN '" & dbArray(1) & "' " & _ 
       "UNION ALL " & _ 
        "SELECT interne, groupe, [item] AS itemref, largeur, hauteur, local, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, [Comments] " & _ 
        "FROM tblB1B2 IN '" & dbArray(2) & "' " & _ 
       ") AS FullTable " & _ 
       "GROUP BY interne, groupe, largeur, hauteur, local, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, [Comments]" 

    Set cmd = New ADODB.Command 
    With cmd 
     .CommandType = adCmdText 
     .ActiveConnection = cnn 
     .CommandText = cmdText 
     Debug.Print .CommandText 
     .Execute 
    End With 
    cnn.CommitTrans 'Commit update 

將複製粘貼到訪問查詢時的打印文本運行正常;但在VBA中產生這個錯誤。爲什麼?我怎樣才能解決它?我是否在使用我不知道的關鍵字?

另外,有沒有一種方法可以執行此查詢,而無需指定每個字段? (注意MAX(itemref)

回答

1

嗯..張貼在這裏後(像往常一樣,大約3小時的審判和失敗後)..我明白了。結果「本地」是JET中的保留關鍵字。我不得不做一些有創意的操作來讓它認識到它是一個領域。對於任何人有這種類型的問題,這裏的固定.CommandText:各地local領域

cmdText = "INSERT INTO tblB1B2 IN '" & toDB & "' " & _ 
        "SELECT interne AS interne, groupe AS groupe, MAX(itemref) AS item, largeur AS largeur, hauteur AS hauteur, localref AS [local], etage AS etage, partie AS partie, dessin AS dessin, datezonage AS datezonage, externe AS externe, erreur AS erreur, tag_hndl AS tag_hndl, tag_dessin AS tag_dessin, pobj_hndl AS pobj_hndl, pobj_type AS pobj_type, pobj_bname AS pobj_bname, zpl_hndl AS zpl_hndl, id AS id, Sidewalk AS Sidewalk, BarrierFreePathOfTravel AS BarrierFreePathOfTravel, Signage AS Signage, Hardware AS Hardware, PowerDoorOperator AS PowerDoorOperator, PDOMountHeight AS PDOMountHeight, ClearWidth AS ClearWidth, ClearSpace AS ClearSpace, ManoeuveringSpace AS ManoeuveringSpace, TwoDoorsInASeries AS TwoDoorsInASeries, Comments AS Comments " & _ 
        "FROM " & _ 
         "(SELECT interne, groupe, item AS itemref, largeur, hauteur, [local] AS localref, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, id, Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, Comments " & _ 
         "FROM tblB1B2 IN '" & dbArray(0) & "' " & _ 
        "UNION ALL " & _ 
         "SELECT interne, groupe, item AS itemref, largeur, hauteur, [local] AS localref, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, Comments " & _ 
         "FROM tblB1B2 IN '" & dbArray(1) & "' " & _ 
        "UNION ALL " & _ 
         "SELECT interne, groupe, item AS itemref, largeur, hauteur, [local] AS localref, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, Comments " & _ 
         "FROM tblB1B2 IN '" & dbArray(2) & "' " & _ 
        ") AS FullTable " & _ 
        "GROUP BY interne, groupe, largeur, hauteur, localref, etage, partie, dessin, datezonage, externe, erreur, tag_hndl, tag_dessin, pobj_hndl, pobj_type, pobj_bname, zpl_hndl, [id], Sidewalk, BarrierFreePathOfTravel, Signage, Hardware, PowerDoorOperator, PDOMountHeight, ClearWidth, ClearSpace, ManoeuveringSpace, TwoDoorsInASeries, Comments" 

注意,我不得不在子查詢[local] AS localreflocalref AS [local]在主查詢,以避免關鍵字和循環引用。

+0

幹得好,你不需要別名保留字,方括號應該可以解決問題。 – Fionnuala 2012-08-08 15:57:08

+0

是的,但由於某些原因,它導致與[本地] AS [本地]的循環引用,但沒有任何其他領域的AS字段引用..不知道爲什麼。 – StuckAtWork 2012-08-08 16:29:58