将截断查询结果插入表中

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)

使用另一个选择查询的结果将数据插入表中

Mysql之将查询结果插入到其它表中

如何把查询一个数据库表中的查询结果插入到另一个数据库表中(高分!)

oracle中,查询结果去除重复列,插入到新表中