2017-01-02 65 views
0

我在Access VBA中有代码,那是用SQL填充查询模板并执行它。我必须querydefs。首先工作正常,但第二次当我分配SQL字符串时,我得到了错误3305.第二个QueryDefs.SQL不起作用

这两个插入的表都在Oracle数据库上,我有链接到它的表。

代码

Sub prc() 
Dim pSQLStr  As String   
Dim pQuery  As QueryDef 
Dim pBaza  As Database 

Set pBaza = CurrentDb 
Set pQuery = pBaza.QueryDefs("qryInsertTemplate") 

pSQLStr = "" 
pSQLStr = pSQLStr & "INSERT INTO tbl1 (" 
pSQLStr = pSQLStr & "ID, POS)" 
pSQLStr = pSQLStr & "SELECT xlsx.ID, xlsx.pos"  
pSQLStr = pSQLStr & " FROM xlsx;" 

With pQuery 
    .SQL = pSQLStr 
    .ReturnsRecords = False 
    .Execute 
End With 

Set pQuery = pBaza.QueryDefs("qryInsertTemplate") 

pSQLStr = "" 
pSQLStr = pSQLStr & "INSERT INTO tbl2 (" 
pSQLStr = pSQLStr & "ID, POS)" 
pSQLStr = pSQLStr & "SELECT xlsx.ID, xlsx.pos"  
pSQLStr = pSQLStr & " FROM xlsx;" 

With pQuery 
    .SQL = pSQLStr 'here I got error 3305 
    .ReturnsRecords = False 
    .Execute 
End With 

End Sub 
+0

如果您可以反转查询的顺序,则可能是Excel文件未正确关闭。假设查询二在独立运行时工作。 – Gustav

+0

独立它正在运行 – Gadziu

回答

1

尝试 - 以关闭对象 - 运行第二次前:

pQuery.Close 
Set pQuery = Nothing 
Set pQuery = pBaza.QueryDefs("qryInsertTemplate") 

或创建qryInsertTemplate的副本,并运行第二次:

Set pQuery = pBaza.QueryDefs("qryInsertTemplateCopy") 
+0

谢谢,第二个解决方案帮助。 – Gadziu

相关问题