gpt4 book ai didi

vb6 - 为什么我的 VB6 变体会根据分配时间而变化?

转载 作者:行者123 更新时间:2023-12-04 21:33:32 24 4
gpt4 key购买 nike

我是 VB6(和任何形式的 Visual Basic)开发的新手,我遇到了一个问题。下面可能存在词汇错误,因为我将代码格式化为在此处的帖子中更具可读性,但问题的本质仍然存在。这是代码

我的问题是 MsgBox 调用显示的值(第二组,引用变量 scrWordresWord) 根据我分配给变量 scrWordresWord 的时间而有所不同。如果我在上面显示的代码中未注释的第一个位置分配给变量 scrWordresWord,那么代码底部的消息框将打印任一字符串我对(例如,第一个 messageBox 将产生类似 srcws:resColNum:# 的输出)或看似垃圾数据的内容不感兴趣。请注意,这意味着它将我在前一个消息框中使用的静态字符串分配给变量 scrWord。这绝不是预期的行为,我不知道它是如何发生的。

另一方面,如果赋值是在消息框之前立即完成的,变量赋值在上面的代码中被注释,那么变量会打印出一个不同的值,它有点像预期的,但不完全是(通常情况下,两个变量完全相同,或者当两个变量预期为不同的字母字符串时,其中一个是数字)。

我对这个问题感到困惑,我相信它与返回 Variant 数据类型的 GetData 调用有关。

谢谢,埃文

新代码贴在下面。还是不行。

Dim srcWord As Variant
Dim resWord As Variant

Do While (BinsCol.GetData(grouprownum, 1) = binfromnum And nogroupfound = True)
Dim groupmismatch As Boolean

groupmismatch = False

For j = 1 To FormHyst.GroupList.ListCount


srcWord = sourceWS.Columns(j).GetData(i, 1)
resWord = "hello, world"



MsgBox ("srcws:" & srcWord & vbNewLine &_
"resws:" & resWord & vbNewLine &_
"test:" & (resWord <> srcWord))
Next
Loop

在这段新代码中,srcWordresWord 都显示“hello, world”。

我仍然无法理解这种行为。

最佳答案

正如您所说,您是 VB6 的新手,这里有一些一般的想法和建议。

作为第一个建议:永远不要使用变体,只要您真的不需要它们。使用您期望的具体数据类型。在 MSDN有一个解释变体如何在内部工作。比较 Variants 时会发生隐式转换,因此如果您不真正了解您的数据,这就是一种赌博。

即使您的 GetData 函数返回 Variant,您也可以将返回值转换为该工作表列中的特定数据类型。因此,如果您的列仅包含字符串,请使用 CStr() 将其转换为字符串并将其放入字符串变量中。与数字相同,转换为 double 或长变量。

您可能还想使用 VarType 函数来确定存储在 Variants 中的值的真实类型。

以下更多是调试工作流程,但也许它可以帮助您追踪问题:

  1. 启用 Option Explicit 以避免未声明/拼写错误的变量问题。 (正如 DJ 已经提到的)

  2. 在每一行之后生成调试输出,以确保您拥有预期的值而不是其他值。如果逐步调试或“Debug.Print”无法实现,那么也许您可以登录到外部日志文件或使用 MsgBox。

  3. 将源代码与外部组件依赖项分离以进行测试。在您的情况下,尝试在不从外部网格读取数据的情况下重现问题(例如,将变量设置为一些具体字符串)。然后你就会知道问题是出在你的编程逻辑上,还是出在你必须处理的数据上。

  4. 始终仔细检查您的外部数据源是否确实是您所期望的数据源,而不是其他数据源。 (经常发生在我身上...)因此请检查您的网格在 (i,j) 处保存的数据以及它是否与您获得的数据相匹配。

还有一点:在 VB6 中,字符串比较区分大小写,只要您不将“Option Compare Text”放在模块/类/表单的顶部即可。所以“ Hello World ”<>“ Hello World ”。

关于vb6 - 为什么我的 VB6 变体会根据分配时间而变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com