VB6、MS Access、DAO - 显示列名不为空的所有记录

Posted

技术标签:

【中文标题】VB6、MS Access、DAO - 显示列名不为空的所有记录【英文标题】:VB6, MS Access, DAO - Display all records WHERE column-name IS NOT NULL 【发布时间】:2018-01-09 13:31:46 【问题描述】:

我需要一些帮助,所以我要做的是显示列名不为空的所有记录。我有的是:

Dim rs As Recordset 将 sqlStr 调暗为字符串

Set WS = DBEngine.Workspaces(0)
DbFile = (App.Path & "\mydb.mdb")

strSql = "SELECT * FROM MyDatabaseName"

Set rs = db.OpenRecordset(strSql)
rs.MoveFirst

Do While Not rs.EOF
lblResult.Caption = ("cust Name: " & rs!SurName & " cust Surname: " & rs!FirstName)
  rs.MoveNext
Loop

MsgBox ("End ")

我试过的是

strSql = "SELECT * FROM MyDatabaseName WHERE column-name IS NOT NULL"

但我收到错误 3131。感谢任何帮助。另外,如何在标签的 ListBox 中显示结果。

【问题讨论】:

请不要问双管齐下的问题,例如“我怎样才能在 ListBox insted of Label 中显示结果。”。如果您想回答第二个问题,请正确提问,并提供必要的信息以便我们能够回答。 您尚未指定要检查的列。 SurName 和 FirstName 是两列,而不是一列。 抱歉,这将是数据库中名为 personPresent 的另一列 请不要给我们这样的航空代码,而是您的实际代码。保留字可能存在问题,或者您的摘录中没有包含其他问题。 【参考方案1】:

简单修复:使用特殊字符时将列名括在方括号中,例如 - 减法运算符:

strSql = "SELECT * FROM MyDatabaseName WHERE [column-name] IS NOT NULL"

您的 SQL 的其余部分似乎有效。

如果你想要一个将这个查询的结果作为列表的列表框,只需将其行源设置为该查询,并将其行源类型设置为表/查询即可。不需要任何 VBA。

如果要将所有内容都放在标签中,请使用:

Do While Not rs.EOF
  lblResult.Caption = lblResult.Caption & "cust Name: " & rs!SurName & " cust Surname: " & rs!FirstName & VbCrLf
  rs.MoveNext
Loop

【讨论】:

这将只显示一个条目而不是全部。 是的,当然。这段代码:Do While Not rs.EOF lblResult.Caption = ("cust Name: " & rs!SurName & " cust Surname: " & rs!FirstName) rs.MoveNext Loop 很奇怪,只将最新条目分配给lblResult.Caption [column-name] 它只有一列,而 OP 检查两列:SurName 和 FirstName,因此我们可以让 SurName = NULL 或 FirstName =NULL 或两者都 = NULL。 我只是更正 SQL OP 提供的。不知道你到底想说什么。由于我没有这两列的名称,我不能在我的答案中使用它们 有没有办法同时显示所有记录中哪一个字段不为NULL?

以上是关于VB6、MS Access、DAO - 显示列名不为空的所有记录的主要内容,如果未能解决你的问题,请参考以下文章

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?

VB6 数据库上的 DAO 3.6 问题

VB6 / SQL“长文本”比较不正确(MS Access 2013)

如何通过 VB6 使用 DAO.Relation?

UPDATE 查询中的错误 - VB6 DAO 访问

在表单中显示 DAO 表