【问题标题】:How do I edit the WHERE clause of my VBA SQL-statement so I returns the records from more than 1 field?如何编辑我的 VBA SQL 语句的 WHERE 子句,以便从多个字段返回记录?
【发布时间】:2022-01-17 18:37:24
【问题描述】:

我有这个基本的 VBA SQL 语句。我搜索一个外部数据库并返回外部数据库中字段[LabNumberPrimary] = [labnummer] 的所有记录。

我的 VBA 代码重复了一些小的调整。如何组合这 2 条语句,使我的 VBA 代码变得更小且更易于使用?

第一个语句:

cmdString = "SELECT DISTINCT t.rapportnaam, t.norm, t.analysenaam FROM taken t, monsters m, opdrachten o WHERE o.labnummer = " & [LabNumberPrimary] & " AND m.opdrachtteller = o.opdrachtteller AND t.monsterteller = m.monsterteller"

第二条语句:

cmdString = "SELECT DISTINCT t.rapportnaam, t.norm, t.analysenaam FROM taken t, monsters m, opdrachten o WHERE o.labnummer = " & [LabNumber_4_CT] & " AND m.opdrachtteller = o.opdrachtteller AND t.monsterteller = m.monsterteller"

如何组合这两个语句?我试过了:

cmdString = "SELECT DISTINCT t.rapportnaam, t.norm, t.analysenaam FROM taken t, monsters m, opdrachten o WHERE o.labnummer = " & [LabNumberPrimary] & " AND o.labnummer = " & [LabNumber_4_CT] & " AND m.opdrachtteller = o.opdrachtteller AND t.monsterteller = m.monsterteller"

但似乎不起作用。

LabNumberPrimaryLabNumber_4_CT 是我的查询 qry_Administration 中的列名

编辑: 经过一番研究,我想我知道为什么没有返回记录了。

这段代码:

AND m.opdrachtteller = o.opdrachtteller AND t.monsterteller = m.monsterteller"

两个号码的“出纳员”不同。所以我认为解决方案应该是这样的:我想你们知道我要去哪里:

cmdString = "SELECT DISTINCT t.rapportnaam, t.norm, t.analysenaam" & _
" FROM taken t, monsters m, opdrachten o" & _
" WHERE (o.labnummer = " & [LabNumberPrimary] & _
" AND m.opdrachtteller = o.opdrachtteller" & _
" AND t.monsterteller = m.monsterteller")

" AND WHERE (o.labnummer = " & [LabNumber_4_CT] & _
" AND m.opdrachtteller = o.opdrachtteller" & _
" AND t.monsterteller = m.monsterteller")

这样的说法是否可以结合起来?

【问题讨论】:

  • 它不起作用是什么意思?总是有2个
  • 经过一些测试,我想我可以回答你的问题。不,并不总是 2。所以在我的综合声明中:我可以确认,如果两个字段都不为空,那么我在 Access 中没有收到错误,没有返回记录。如果字段 LabNumber_4_CT 为空,则我收到错误消息:[Miscrosoft][ODBC SQL Server Driver][SQL Server] 关键字“AND”附近的语法不正确。

标签: vba ms-access


【解决方案1】:

试试这个:

cmdString = "SELECT DISTINCT t.rapportnaam, t.norm, t.analysenaam" & _
" FROM taken t, monsters m, opdrachten o" & _
" WHERE o.labnummer = " & [LabNumberPrimary] & _
" OR o.labnummer = " & [LabNumber_4_CT] & _
" AND m.opdrachtteller = o.opdrachtteller" & _
" AND t.monsterteller = m.monsterteller"

【讨论】:

  • 嗨,托尼,我尝试了您的解决方案。我收到错误:[Miscrosoft][ODBC SQL Server Driver][SQL Server] 查询超时已过期。我认为这与 OR 语句的数据量有关。这不应该是这样。我可以确认这两个语句分别有效,因此 SQL 服务器使用此 OR 子句返回许多记录。似乎我无法处理 WHERE 子句中的双重标准。
  • 如果我将您的解决方案从 OR 更改为 AND,那么我得到的结果与我自己的组合 sql 相同
【解决方案2】:

解决方案比预期的要困难得多。但我设法通过逆向工程让它工作。我在查询编辑器中复制了 sql 语句,添加了我的 3 个字段,然后添加为数字。然后我回到 SQL 视图并将该代码复制到我的 VBA 代码中。我用字段名称LabNumberPrimaryLabNumber_4_CT 替换了数字。 我还必须为空值添加 Nz( 函数

LabNumberPrimary = Nz([LabNumberPrimary])
LabNumber_3_ASB = Nz([LabNumber_3_ASB])
LabNumber_4_CT = Nz([LabNumber_4_CT])

cmdString = "SELECT DISTINCT t.rapportnaam, t.norm, t.analysenaam FROM taken AS t, monsters AS m, opdrachten AS o WHERE (((o.labnummer)='" & LabNumberPrimary & "' Or (o.labnummer)='" & LabNumber_3_ASB & "' Or (o.labnummer)='" & LabNumber_4_CT & "') AND ((m.opdrachtteller)=[o].[opdrachtteller]) AND ((t.monsterteller)=[m].[monsterteller]))"

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2014-09-03
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多