将截断查询结果插入表中

时间:2011-05-26 03:46:33

标签: ms-access vba

我有一个查询驻留在访问文件(.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

2 个答案:

答案 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