VB6 SQL 数据库类型不匹配问题

VB6 SQL Type Mismatch issues with Databases

对于我的项目,我集成了一个将 CM 转换为 FT 的计算器。为了让它值更多的分数,我正在尝试让它获得值并将它们与数据库进行比较以查看哪种尺寸的车库门最适合这项工作

纯搜索值的SQL有效。通过和 ADO,然后仅在数据网格上显示找到的值。但是当我尝试使用 BETWEEN 版本时,出现类型不匹配错误,我试图通过将变量更改为整数和实数来修复该错误,但它不起作用。如果有人可以提供帮助,我将不胜感激!

Option Explicit
Dim sql As String
Dim sizeFindH As String
Dim sizeFindW As String  

Dim sizeFindHUp As Double
Dim sizeFindHDown As Double
Dim sizeFindWUp As Double
Dim sizeFindWDown As Double

feet = 30.48
heightCm = txtHeightCm.Text
widthCm = txtWidthCm.Text

txtHeight.Text = heightCm / feet
txtWidth.Text = widthCm / feet

heightFt = txtHeight.Text
widthFt = txtWidth.Text

sizeFindH = txtHeight.Text
sizeFindW = txtWidth.Text

sizeFindHUp = sizeFindH + 1
sizeFindHDown = sizeFindH - 1

sizeFindWUp = sizeFindW + 1
sizeFindWDown = sizeFindW - 1

sql = "SELECT * FROM  garageDoorSize WHERE ((garagedoorSize.height) BETWEEN '" + "%" + sizeFindHDown + "%" + "') AND '" + "%" + sizeFindHUp + "%" + "');"
sql = "SELECT * FROM  garageDoorSize WHERE ((garagedoorSize.width) BETWEEN '" + "%" + sizeFindHDown + "%" + "') AND '" + "%" + sizeFindHUp + "%" + "');"

Type Mismatch 错误突出显示了这行代码,因为我相信如果我能修复它,它会是下一个。

sql = "SELECT * FROM  garageDoorSize WHERE ((garagedoorSize.height) BETWEEN '" + "%" + sizeFindHDown + "%" + "') AND '" + "%" + sizeFindHUp + "%" + "');"
sql = "SELECT * FROM  garageDoorSize WHERE ((garagedoorSize.width) BETWEEN '" + "%" + sizeFindHDown + "%" + "') AND '" + "%" + sizeFindHUp + "%" + "');"

您正在尝试连接数字和字符串,因此出现类型不匹配异常。使用 CStr 将数字转换为字符串。

此外,我认为您不需要 % 符号,它与 LIKE 比较一起使用。

此外,正如@jac 正确指出的那样,使用 & 连接字符串,而不是 +。编辑我的示例以反映 post..

的未来读者

尝试

sql = "SELECT * FROM garageDoorSize WHERE ((garagedoorSize.height) BETWEEN '" & CStr(sizeFindHDown) & "') AND '" & CStr(sizeFindHUp) & "');" 

注意:您将值直接添加到 sql 字符串的代码风格容易受到 sql 注入的攻击(尽管在这种情况下不是因为它们是数字)。如果这些是字符串,并且来自用户输入,那么您的数据库和应用程序就不安全。最佳做法是将 sql 参数对象作为您的值...请参阅显示用法的 this post。请注意,首先 post 我发现,肯定有更好的指南:)

SQL 语句中代码的问题在于您在 AND 运算符之前使用了额外的括号。它不是组合 2 个条件的逻辑运算符。它是 BETWEEN 子句的一部分,之前不应该有括号。此外,% 不应像其他人所说的那样在此处使用。 此外,单引号仅用于字符串。因此,只要您的字段是数字,您就不应该使用它。

哦..在查询的末尾有一个没有左括号的额外括号。

所以你的 SQL 应该是这样的:

sql = "SELECT * FROM garageDoorSize WHERE (garagedoorSize.width) BETWEEN " & sizeFindHDown & " AND " &  sizeFindHUp & ";"