在Excel VBA中使用字符串和日期编写查询语句

问题描述 投票:0回答:1

[使用ADODB连接,我有一个excel数据库,用于存储数据,并且我试图在一张图纸(db_Reports)中进行查询。姓氏和生日的值是在用户表单的文本框中输入的(分别为tb_Lastname和tb_bday)。

我的问题是前两个查询语句有效(在本例中为注释):一个查询姓氏,它获取一个字符串,另一个查询日期。它们每个都可以单独工作,但是如果我将它们组合在一起,因为我需要在同一次搜索中同时查询名称或日期,它就会给我带来Type Mismatch;运行时错误13.我一直在搜索任何地方,但无法弄清楚该如何工作。我什至尝试将date转换为字符串,但仍然失败。

Private Sub SearchRecords_Click()

    Dim conn As New ADODB.Connection 
    Dim rst As New ADODB.Recordset 
    Dim db_path As Variant

    db_path = "E:\DATABASE.xlsm"

    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & db_path & ";Extended Properties=""Excel 12.0 Macro;HDR=YES;"";"

    Dim qry As String

    'qry = "Select [LastName], Format([Birthday], 'mmmm dd, yyyy') from [db_Reports$] where [LastName] = '" & tb_Lastname & "'"  'Working
    'qry = "Select [LastName], Format([Birthday], 'mmmm dd, yyyy') from [db_Reports$] where [Birthday] = '" & CStr(CLng(CDate(tb_bday))) & "'"  'Working
    qry = "Select [LastName], Format([Birthday], 'mmmm dd, yyyy') from [db_Reports$] where [LastName] = '" & tb_Lastname & "' or [Birthday] = '" & CStr(CLng(CDate(tb_bday))) & "'"  'Not Working - Type Mismatch; Runtime error 13'

    rst.Open qry, conn, adOpenKeyset, adLockOptimistic

    rst.Close
    conn.Close
    Set rst = Nothing
    Set conn = Nothing
End Sub

基本上,如何在一行中同时查询字符串和日期?

由于我是一个自学成才的新手,我为冗长的代码行,使用的术语以及问题的表达深表歉意。

sql excel vba adodb
1个回答
2
投票

似乎'[Birthday] ='“&CStr(CLng(CDate(tb_bday)))&'在文本框中未输入任何值tb_bday时产生错误。我无法解释原因。作为一种解决方法,我只是创建了一条if-then语句,如果仍然可以将它编码为一行,我仍然想避免使用if-then。

Private Sub SearchRecords_Click()

    Dim conn As New ADODB.Connection 
    Dim rst As New ADODB.Recordset 
    Dim db_path As Variant

    db_path = "E:\DATABASE.xlsm"

    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & db_path & ";Extended Properties=""Excel 12.0 Macro;HDR=YES;"";"

    Dim qry As String

    if tb_bday.value = ""  then 
        qry = "Select [LastName], Format([Birthday], 'mmmm dd, yyyy') from [db_Reports$] where [LastName] = '" & tb_Lastname & "'"  
    else 
        qry = "Select [LastName], Format([Birthday], 'mmmm dd, yyyy') from [db_Reports$] where where [LastName] = '" & tb_Lastname & "' or [Birthday] = '" & CStr(CLng(CDate(tb_bday))) & "'"
    end if 

    rst.Open qry, conn, adOpenKeyset, adLockOptimistic

    rst.Close
    conn.Close
    Set rst = Nothing
    Set conn = Nothing
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.