将MS Access表单日期传递到Oracle SQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将MS Access表单日期传递到Oracle SQL相关的知识,希望对你有一定的参考价值。

我正在使用MS Access通过传递查询从Oracle服务器中提取一些数据。向用户呈现一个表单,在表单中他们可以输入一些变量(例如日期范围)。我希望Oracle SQL能够从表单中获取两个日期字段。

当前的SQL(不起作用)如下:

SELECT a.I_LOAN_NUM, a.I_LOAN_SUB_ALLOC, c.N_EXCLV, e.I_GSL_SPNSR, e.N_GSL_SPNSR,  b.D_CAL, b.C_LOAN_STAT, g.N_CNTRY

FROM SLD_LOAN_MSTR a
JOIN SLD_LOAN_CDL b on b.I_LOAN_ID = a.I_LOAN_ID
JOIN SLD_EXCLV c on c.I_EXCLV_ID = b.I_EXCLV_ID
JOIN SLD_AC d on d.I_AC_ID = b.I_AC_ID
JOIN SLD_CUST e on e.I_CUST_ID = d.I_CUST_ID
JOIN SLD_DPT_CNTRY f on f.I_DPT_ID = b.I_DPT_ID
JOIN SLD_CNTRY g on g.I_CNTRY_ID = f.I_CNTRY_ID

WHERE (b.C_LOAN_STAT = 'SETTLED' and b.D_CAL between [Forms]![Cost Allocation Form]![Start_Date] and [Forms]![Cost Allocation Form]![End_Date])
ORDER BY b.D_CAL

如果我用硬编码日期替换表单引用,上面的SQL工作,所以我知道SQL通常是好的。例:

WHERE (b.C_LOAN_STAT = 'SETTLED'  and b.D_CAL between '01JAN2019' and '01FEB2019')

SQL生成的错误消息指出“ODBC - 调用失败。[Oracle] [ODBC] [Ora] ORA-00936:缺少表达式(#936)”

表单中的两个日期字段都使用短日期格式。

我不确定这是否有任何区别,但表单有多个选项卡。从我从其他示例中看到的,表单引用不需要考虑选项卡标签。

谢谢

答案

传递查询在服务器上执行。在您的情况下,Oracle服务器无法识别[Forms]![Cost Allocation Form]![Start_Date][Forms]![Cost Allocation Form]![End_Date]属性。

您可以使用VBA动态更新查询的查询定义以包括表单控件值。然后执行查询。

Dim strSQL As String
Dim qdf As QueryDef

strSQL = "SELECT a.I_LOAN_NUM, a.I_LOAN_SUB_ALLOC, c.N_EXCLV, e.I_GSL_SPNSR, e.N_GSL_SPNSR,  b.D_CAL, b.C_LOAN_STAT, g.N_CNTRY " & _
        "FROM SLD_LOAN_MSTR a " & _
        "JOIN SLD_LOAN_CDL b on b.I_LOAN_ID = a.I_LOAN_ID " & _
        "JOIN SLD_EXCLV c on c.I_EXCLV_ID = b.I_EXCLV_ID " & _
        "JOIN SLD_AC d on d.I_AC_ID = b.I_AC_ID " & _
        "JOIN SLD_CUST e on e.I_CUST_ID = d.I_CUST_ID " & _
        "JOIN SLD_DPT_CNTRY f on f.I_DPT_ID = b.I_DPT_ID " & _
        "JOIN SLD_CNTRY g on g.I_CNTRY_ID = f.I_CNTRY_ID " & _
        "WHERE (b.C_LOAN_STAT = 'SETTLED' and b.D_CAL between '" & _
        [Forms]![Cost Allocation Form]![Start_Date] & "' and '" & [Forms]![Cost Allocation Form]![End_Date] & _
        "' ORDER BY b.D_CAL"

Set qdf = CurrentDb.QueryDefs("PassThroughQueryName")
qdf.SQL = strSQL

此外,由于您使用日期,我建议您将日期格式化为ISO格式yyyy-mm-dd

在这种情况下格式化控件,如

Format([Forms]![Cost Allocation Form]![Start_Date], "yyyy-mm-dd") & "' and '" & Format([Forms]![Cost Allocation Form]![End_Date], "yyyy-mm-dd")

另一种方法是使用VBA ADO访问Oracle Server并检索数据。你仍然需要建立你在这里提到的SQL字符串。

以上是关于将MS Access表单日期传递到Oracle SQL的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

将 MS-Access 表单结果导出到 Excel?

如何将日期从 C# 存储到 MS-Access 以及如何检索它?

访问:从表单传递参数到查询

将变量从 Access(前端)传递到 Oracle(后端)存储过程

根据表单字段中提供的日期查询 MS Access 中的最新记录