Отображение запроса в Excel в VBA Access - PullRequest
0 голосов
/ 09 октября 2018

У меня есть эта таблица:

Table

И я сделал следующий запрос, который работает точно:

SELECT tbl_Type.Id_Type, 
tbl_Type.Info, 
tbl_Type.Id_Table_Three_Plus_Info, 
tbl_Type.DateX

FROM tbl_Type

WHERE (((tbl_Type.DateX)=[Write Date (dd/dd/yyy)]));

Каквы видите, что в запросе в части WHERE есть вход столбца DateX.

Теперь я хочу использовать ту же процедуру, но с использованием формы для ввода, код для этого:

Private Sub btn_Action_Click()
    On Error Resume Next

    'DoCmd.SetWarnings False

    Dim Fecha As String

    Fecha = _
    "SELECT tbl_Type.Id_Type, tbl_Type.Info, tbl_Type.Id_Table_Three_Plus_Info, tbl_Type.DateX FROM tbl_Type WHERE tbl_Type.DateX = txt_Date.value;"

    CurrentDb.CreateQueryDef ([Nom],Fecha) As QueryDef

    DoCmd.RunSQL Fecha
    'DoCmd.Save Fecha, "s"

    txt_Date = Null

End Sub

Во-первых, я хочу знать, правильно ли выполнен ввод данных в строке String Fecha.Как вы видите, я выполняю это действие, когда нажимается кнопка btn_Action, и записывает ввод для DateX с текстовым полем txt_Date Я бы сказал, что запрос работает, но я не знаю, как это увидеть, вэтот порядок я продолжаю притворяться, что сохраняю этот запрос, который тоже является чем-то желательным.Я видел в другом вопросе, что для этого используется CurrentDb.CreateQueryDef Я пытался DoCmd.Save, но я думаю, что это не так.С CurrentDb.CreateQueryDef у меня ошибка синтаксиса.Я что-то упустил?

Пожалуйста, если вам нужно больше подробностей, все еще глупый вопрос или подобные вещи, позвольте мне сейчас сделать правильную процедуру!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Попробуйте просто сохранить параметризованный запрос, а затем в VBA привязать значение формы к параметру, используя объект QueryDef .MS Access SQL поддерживает предложение PARAMETERS для установки именованных заполнителей.Ниже выводит параметризованные результаты запроса в книгу Excel.

SQL (сохраните ниже как запрос, Лента> Создать> Дизайн запроса> Представление SQL)

PARAMETERS DateParam Datetime;
SELECT t.Id_Type, 
       t.Info, 
       t.Id_Table_Three_Plus_Info, 
       t.DateX    
FROM tbl_Type t    
WHERE (((t.DateX)=[DateParam]));

VBA (вызов запросов, параметры привязки, экспорт в новую книгу Excel)

Private Sub btn_Action_Click()
On Error Goto ErrHandle
    Dim xl_app As Object, xl_wb As Objcect
    Dim qdef As QueryDef, rst As Recordset

    ' REFERENCE SAVED QUERY
    Set qdef = CurrentDb.QueryDef("mySavedQuery")

    ' BIND PARAMETER
    qdef!DateParam = txt_Date

    ' SET qdef TO RECORDSET
    Set rst = qdef.OpenRecordset()

    ' EXPORT TO EXCEL
    Set xl_app = CreateObject("Excel.Application")
    Set xl_wb = xl_app.Workbooks.Add()

    With xl_wb.Sheets(1)
       ' COLUMNS
       For i = 1 To rst.Fields.Count
          .Cells(1, i) = rst.Fields(i - 1).Name
       Next i 

       ' DATA
      .Range("A2").CopyFromRecordset rst
    End With

    xl_app.Visible = True

    txt_Date = Null

ExitHandle:
   rst.Close()
   Set rst = Nothing: Set qdef = Nothing
   Set xl_wb = Nothing: Set xl_app = Nothing
   Exit Sub

ErrHandle:
   Msgbox Err.Number & " - " & Err.Description, vbCritical, "RUNTIME ERROR"
   Resume ExitHandle
End Sub
0 голосов
/ 09 октября 2018

Вы должны объединить значение ввода в строку запроса следующим образом:

Fecha = _
"SELECT tbl_Type.Id_Type, tbl_Type.Info, tbl_Type.Id_Table_Three_Plus_Info, tbl_Type.DateX FROM tbl_Type WHERE tbl_Type.DateX = " & txt_Date.value & ";"

Чтобы проверить результат, вы должны выполнить его в режиме отладки (нажмите F8 вместо F5 в vba).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...