2017-01-02 24 views
0

私はAccess VBAにコードを持っています。これはSQLでクエリーテンプレートを満たして実行しています。私はquerydefsする必要があります。最初は正常に動作していますが、SQL文字列を割り当てると2番目にエラー3305が発生します。2番目のQueryDefs.SQLが機能しません

挿入されたテーブルはどちらもOracle DBにあり、テーブルをリンクしています。

コード

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ファイルが正しく閉じられていない可能性があります。スタンドアロンで実行すると、クエリ2が動作すると仮定します。 – Gustav

+0

スタンドアロンランニング – Gadziu

答えて

1

TRY - 二度目を実行する前に - オブジェクトをクローズする:

Set pQuery = pBaza.QueryDefs("qryInsertTemplateCopy") 

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

またはqryInsertTemplateのコピーを作成し、実行して二度目います

+0

ありがとう、2番目の解決策が助けになりました。 – Gadziu

関連する問題