当前位置: 首页 > 知识库问答 >
问题:

在vb6中获取类型不匹配错误

晏树
2023-03-14

我正在使用此代码并获得类型不匹配的错误,运行时错误'13'错误在下面标记的行中,而具体错误是由于其中条件(prereq.paid="rs1!付费"")在查询...

rs1.Open "select name,nposts,postad.paid as paid from ad,post,postad where ad.adid = " +
         cmbAdno.Text +
         " and ad.adid=postad.adid and postad.pid=post.pid ", con, adOpenDynamic, 
         adLockOptimistic

While Not rs1.EOF
  cmbTitle.AddItem (rs1!Name)    
  rs1.MoveNext
Wend

rs1.MoveFirst

cmbTitle.Text = rs1!Name
txtNposts.Text = rs1!nposts

If IsNumeric(rs1!paid) Then
  MsgBox (rs1!paid + 1)
End If

**rs2.Open "select title from postad,prereq where postad.paid = prereq.paid and prereq.paid=" + 
        rs1!paid + " ", con, adOpenDynamic, adLockOptimistic**

While Not rs2.EOF
  lstPrereq.AddItem (rs2!Title)
  rs2.MoveNext
Wend

rs2.Close

rs1.Close

共有2个答案

晋奕
2023-03-14

rs1!在数据库中支付了布尔值吗?如果是这样,可能是用于制作查询字符串的conat存在问题。在过去,当我使用VB6时,我从未访问过这样的字段。我使用了类似rstRecordSet的东西。字段(0)或rstRecordSet。字段(“field d1”),但如果字段存在,这不应该是问题。在之前创建一个字符串并将查询的连接传递给它并验证它是否被填充。

另外,你有"...postad.paid...",为什么?你不需要在那里重命名字段...

邹禄
2023-03-14

呼,那个代码需要一些工作!

不过,加号操作员是罪魁祸首。您可以通过一个小测试用例轻松验证这一点。

Dim ADO_Field_Value As Variant
Dim S As String

ADO_Field_Value = True

On Error Resume Next
S = "text" + ADO_Field_Value + ""
If Err Then MsgBox "Plus failed, err " & CStr(Err)
Err.Clear
S = "text" & ADO_Field_Value & ""
If Err Then MsgBox "Amp failed, err " & CStr(Err)

如果运行此命令,则“”将产生错误13,而

使用&号进行连接。加号only sorta,有点适用于向后兼容古代。使用它需要编译器猜测您的意图,以解决运算符的软重载。

你的“空黑客”将一个空字符串关联到。价值并不是特别聪明。如果rs1有一个空值,那么最终会出现SQL语法错误,除非使用“”这会导致错误。

通过显式使用,可以更安全地访问ADO字段值。值,而不是让编译器猜测您想要字段的默认属性。While/Wend已经过时了,那些多余的括号是怎么回事?

你要求编译器做一些在这段代码中可能不应该做的事情。

 类似资料:
  • 问题内容: 我试图在Swift中使用JSONDecoder将JSON转换为Structs,所以我编写了所有Structs,将它们修改了几个小时,但它仍然给我这个错误。我不知道是否有办法查看给出此信息的行。我将在下面发布我的struct,并在其后发布Json File链接。 完整的错误描述是: typeMismatch(Swift.Dictionary ,Swift.DecodingError.Co

  • 我有以下具有以下方法的类。 GsonHelper为我提供了一些 在Java 7之前,我一直使用这种方法,例如: 这工作得很好。因为这个方法会返回一个布尔值,我可以在“if”中使用它。但是当我换到Java 8时,这就不可能了。编译器抱怨: 类型不匹配:无法从对象转换为布尔值 我知道java.lang.Boolean可以为空。我可以通过以下方式解决这个问题: 但我很好奇,为什么这在Java 7中有效,

  • 我在Sybase数据库中有一个表,其中有一列is_req。它的数据类型是char(1)。它在我的hbm文件中的属性定义如下: 属性名称="is必需"列="is_req"类型="boolean" 现在,当我尝试使用标准/限制进行比较时,比如:,我得到以下例外: 如果我尝试做,我得到以下异常: com.sybase.jdbc2.jdbc.SybSQLException:不允许从数据类型'VARCHAR

  • 错误:java.io.ioException:错误值类:类org.apache.hadoop.io.text不是类org.apache.hadoop.mapred.ifile$writer.append(ifile.java:194)在org.apache.hadoop.mapred.task$combineoutputCollector.collect(task.java:1350)在org.a

  • 所以我从文件中读取信息,得到一个类型不匹配错误。我通过调试器运行了它,但我不确定是什么导致了它——因为它正在读取正确的数字(在本例中为2000),但它似乎不认为它是整数? 我的代码如下: 从这些信息中可以看出: 2014年雇员史密斯,约翰2000 2015推销员琼斯,比尔3000 100000 2014执行布什,乔治5000 55 2014年员工曼,莎拉4000 2015年销售员Marco,约旦5

  • 我使用的是Android上架构组件的LiveData和ViewModel。 这是我的存储库类- 这是我的ViewModel,我想在存储库中的值更新后从存储库中获取imagePath的值- 问题是DataRepository中的ImagePath类型为String,而DataViewModel中的ImagePath类型为MutableLiveData。 如何将存储库中的ImagePath值分配给Vi