将截断查询结果插入表中
Posted
技术标签:
【中文标题】将截断查询结果插入表中【英文标题】:Insert truncate query result into a table 【发布时间】:2011-05-26 03:46:33 【问题描述】:我有一个查询驻留在访问文件 (.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
【问题讨论】:
没有。它以访问形式执行。你误会了。它只会将结果生成到 excel 文件中。那没关系。现在我不想将结果存储在excel文件中,而是在访问文件中存储一个表。 你为什么要删除你的评论?这让我看起来像是在自言自语。 因为它不再相关。这里的人很聪明,可以理解! 【参考方案1】:最简单的做法是对目标表执行删除查询,然后使用追加查询。
删除查询的 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,但我现在想不起来)
【讨论】:
【参考方案2】:我最终会这样做: 1)查询结果并将结果存储到excel文件中。 2) 使用 transferspreadsheet 导入 excel 文件。
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, _
"genInboundCdr", _
strPathToSave, _
True
DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel9, _
"temp_result", _
strPathToSave, _
True
【讨论】:
我在这里所做的只是插入行继续字符 (_) 以便格式更好。 这确实是一个不合标准的问题解决方案。以上是关于将截断查询结果插入表中的主要内容,如果未能解决你的问题,请参考以下文章
将一个表的查询结果插入到另一个表中(oracle、mysql、sql 、GP)