【问题标题】:vba sql query in MS AccessMS Access中的vba sql查询
【发布时间】:2020-11-18 08:36:51
【问题描述】:

我创建了一个按关键字搜索数据的表单,并将这个 vba 代码分配给按钮的点击事件:

Dim sql As String
sql = "SELECT MD.[id], MD.[status], MD.[milnum], MD.[sname], MD.[mother], MD.[grade], MD.[gradetype], MD.[spcode], MD.[spes], MD.[unit] FROM MD WHERE (MD.[status] LIKE '*" & Me.tstate & "*') AND (MD.[milnum] LIKE '*" & Me.tnumber & "*') AND (MD.[sname] LIKE '*" & Me.tname & "*') AND (MD.[mother] LIKE '*" & Me.tmother & "*') AND (MD.[grade] LIKE '*" & Me.tgrade & "*') AND (MD.[gradetype] LIKE '*" & Me.ttype & "*') AND (MD.[spcode] LIKE '*" & Me.tcode & "*') AND (MD.[spes] LIKE '*" & Me.tspes & "*') AND (MD.[unit] LIKE '*" & Me.tunit & "*')order by MD.[id]"

Me.MD_Sheet.Form.RecordSource = sql
Me.MD_Sheet.Form.Requery

但是当我进行搜索时,查询不会带来所有结果,例如,当我在 textboxex 中什么都不写时,它应该带来表 MD 中的所有记录,但它没有,它只是带来一些记录。

我创建另一个按钮并使用新的 sql 语句将相同的代码分配给“点击事件”:

Dim sql As String
    sql = "SELECT MD.[id], MD.[status], MD.[milnum], MD.[sname], MD.[mother], MD.[grade], MD.[gradetype], MD.[spcode], MD.[spes], MD.[unit] FROM MD"
    Me.MD_Sheet.Form.RecordSource = sql
    Me.MD_Sheet.Form.Requery

然后它会带来所有记录。

MD表中的记录大约有25000条记录。

【问题讨论】:

  • 是sql查询语句长度影响结果。我使用multi like子句。
  • 只保留一个条件为空不会带来所有记录。其他条件仍然适用并且记录被过滤。我更喜欢仅使用具有输入的控件来构建 VBA 过滤条件。评论allenbrowne.com/ser-62.html
  • @June7 抱歉,但我编辑了问题并忘记了其余部分进行编辑。我将所有条件都留空。
  • 它应该带来表 MD 中的所有记录 - 它会,但前提是该字段包含一个值; Null 被排除在外。
  • @Gustav 如果字段为 Null,如何解决?

标签: database forms ms-access search


【解决方案1】:

尝试应用Nz,不快但简单:

AND (Nz(MD.[spcode]) LIKE '*" & Me.tcode & "*')

【讨论】:

  • (Nz) 是做什么的?什么意思?
  • Nz.
  • 确实如此。如果不是,则有其他事情发生。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多