2012-08-08 45 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