我有一个查询驻留在访问文件(.mdb)中,我想在VBA中调用此查询,并将结果存储到现有表中。在插入结果之前,应删除表的先前内容。
有什么想法吗?在我现有的代码中,查询名称“genInboundCdr”是通过DoCmd.TransferSpreadsheet执行的,结果存储在excel文件中。
Private Sub BtnExecuteQuery_Click()
If IsNull(txtOutputPath.value) Then
MsgBox "Please enter a valid output file location."
Else
If ObjectExists("Query", "genInboundCdr") Then
strPathToSave = txtOutputPath.value
MsgBox "About to extract inbound cdr..." & vbCrLf & _
"Please notice that the query may take longer time " & _
"( > 20 minutes ) if the linked tables contains a lot " & _
"of records."
txtStatus.value = txtStatus.value & _
"About to extract inbound cdr..." & vbCrLf & _
"Please notice that the query may take longer time " & _
"( > 20 minutes ) if the linked tables contains a lot " & _
"of records." & vbCrLf
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, _
"genInboundCdr", _
strPathToSave, _
True
MsgBox ("Inbound Cdr generated.")
txtStatus.value = txtStatus.value & "Inbound Cdr generated." & vbCrLf
Else
MsgBox ("Query does not exist! Please review your steps.")
End If
End If
End Sub
答案 0 :(得分:2)
最简单的方法是在目标表上执行删除查询,然后使用追加查询。
删除查询的SQL如下所示:
DELETE *
FROM foo2;
追加查询的SQL喜欢这样:
INSERT INTO foo_dest ( f0, f1, f2, f3 )
SELECT foo_src.f0, foo_src.f1, foo_src.f2, foo_src.f3
FROM foo_src;
SELECT部分将是您的源查询(genInboundCdr)。
您可以在VBA中执行以下任一查询:
DoCmd.RunSQL = "insert into ..."
或
Currentdb.execute = "insert into ..."
或者如果您更喜欢使用存储的查询
DoCmd.OpenQuery "genInboundCdr"
(可能有另一种方式来运行genInboundCdr,但我现在不记得了)
答案 1 :(得分:-2)
我最终这样做: 1)查询并将结果存储到excel文件中。 2)使用transferspreadsheet导入excel文件。
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, _
"genInboundCdr", _
strPathToSave, _
True
DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel9, _
"temp_result", _
strPathToSave, _
True