Вставить усеченный результат запроса в таблицу - PullRequest
0 голосов
/ 26 мая 2011

У меня есть запрос к файлу доступа (.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 ]

2 голосов
/ 26 мая 2011

Самое простое, что нужно сделать, это выполнить запрос на удаление таблицы назначения и затем использовать запрос на добавление.

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, но я сейчас не могу вспомнить)

0 голосов
/ 26 мая 2011

В итоге я делаю так: 1) запрашиваю и сохраняю результат в файле Excel.2) импортировать файл excel, используя электронную таблицу передач.

DoCmd.TransferSpreadsheet acExport, _
                            acSpreadsheetTypeExcel9, _
                            "genInboundCdr", _
                            strPathToSave, _
                            True
DoCmd.TransferSpreadsheet acImport, _
                            acSpreadsheetTypeExcel9, _
                            "temp_result", _
                            strPathToSave, _
                            True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...