【问题标题】:Return Empty String as NULL将空字符串返回为 NULL
【发布时间】:2010-06-10 19:55:25
【问题描述】:

我有一个列表框选择,当用户为它生成的空字符串选择 null 时,我希望从 SQL 表中提取空值。

这就是我现在所拥有的。空字符串不返回任何内容,因为表中没有空字段。

SELECT * FROM dbo.Table WHERE ID = " & TextBox2.Text & " and And Field1 IN (" & Msg1 & ")

如何编码?

【问题讨论】:

  • 所以你是说当Msg1 是空字符串"" 时,你希望它提取数据库中Field1 IS NULL 的所有记录?
  • 没错。这是更大字符串的一部分,但这是重要的部分。
  • 另外,你应该了解一下Sql Injection

标签: sql vba excel null


【解决方案1】:

使用If 语句。当您的文本框为空时,让 SQL 字符串包含“ID 为空”而不是附加文本框的值。

If (TextBox1.Text = "") Then
   ' use Is Null in your sql statement 
Else
   ' use the textbox text value in your sql statement
End If

(假设您说的是文本框,而不是 Msg1。)

【讨论】:

  • 它属于您构建 SQL 语句的位置。
  • 是的,VBA 支持这样的代码。你从来没有写过If语句吗?如果某些条件评估为真,它只会执行一些代码。或者,如果条件评估为 false(Else 子句),您可以包含一段备用代码。
【解决方案2】:
 dim sql
 If (TextBox2.Text = null) Then
      sql = "SELECT * FROM dbo.Table WHERE ID is null and And Field1 IN (" & Msg1 & ")"
 Else
     sql = "SELECT * FROM dbo.Table WHERE ID = " & TextBox2.Text & " and And Field1 IN (" & Msg1 & ")"
 End If

请参阅@John Saunders 评论,您有 sql 注入的风险。将参数传递给 sql 查询时,请务必使用parameters,而不是连接字符串。

【讨论】:

  • 没问题。这是一个内部应用程序。
  • @Am,为了记录,这不是真正有效的 VBA 代码。 TextBox2.Text 不会为空,这不是有效的 VBA if 语句。 If .... Then ... Else ... End If。此外,== 在 VB 中不用于相等,它只是 =
  • 我也是!虽然我之前的背景是 VB6/VBA。
  • @Anthony:知道这是“当然”,知道这是“当然”,但并非所有后续读者都知道这个答案会知道的。
【解决方案3】:
SELECT * FROM dbo.Table WHERE ID = " & TextBox2.Text & 
" And Field1 " & IIF(Trim(Msg1) = "", "IS NULL", "IN (" & Msg1 & ")")

是的,它很粗糙。
不应该以这种风格编写查询。

编辑:已更正。请检查。

【讨论】:

  • IIF 和 Trim 是 VB/VBA 中的函数。
  • 它不工作。就炸了。它说它是 (),但那不可能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2013-02-24
  • 2012-09-18
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多