我正在尝试编译以下代码,并且我一直收到错误。我多次得到这个错误所以我被迫使用变通办法功能。这次我真的厌倦了这个问题,我需要知道这里有什么问题。
sub SQL_AddTestResults (byval sData as string, byval testID as integer)
dim i as integer
dim dataChain as string
dim aData (Split(sData, ";").length) as string
aData = Split(sData, ";")
for i = 0 to aData.Length
if(i = 4) then
goto skip
elseif (i = 68) then
goto skip
elseif (i = 72) then
goto skip
end if
if(i = aData.length) then
dataChain = dataChain & aData(i)
else
dataChain = dataChain & aData(i) & ", "
end if
skip:
next
MsgBox (dataChain)
SQL_statement = "INSERT INTO ""TestData"" VALUES (" & dataChain & ");"
Stmt = connection.createStatement()
Stmt.executeUpdate(SQL_statement)
end sub
编译此代码会在“for i = 0 to aData.Length”行中出现以下错误:
基本语法错误。
符号aData已经定义不同。
不知道为什么。抱歉,如果这是一个微不足道的问题,但我完全不熟悉VB。 C ++并没有为此做好准备。
答案 0 :(得分:3)
经典VB中的阵列没有"长度"属性。我不知道你从哪里得到的。
在经典VB中获取数组边界的方法是使用LBound和UBound函数。
[:slug]
这样你甚至可以处理不具有0作为起始索引的数组,因为是的,VB的一个奇妙的怪癖是它允许你使用索引的任何数字范围。 / p>
VB6并不是我推荐用于新开发的语言。如果您正在尝试学习新的东西,还有很多其他选择。毫无疑问,正如你所知道的那样,找到关于经典VB如何做事的文档,以及它与VBScript和VB.NET的区别是如何变得越来越难。如果您需要维护较旧的VB6代码库,我建议您在某处查找一本超过VB6语法和用法的旧书。
答案 1 :(得分:1)
尝试使用此代码更正的代码:
sub SQL_AddTestResults (byval sData as string, byval testID as integer)
dim i as integer
dim dataChain as string
dim aData as variant
aData = Split(sData, ";")
for i = 0 to ubound(aData)
if(i = 4) then
goto skip
elseif (i = 68) then
goto skip
elseif (i = 72) then
goto skip
end if
if(i = ubound(aData)) then
dataChain = dataChain & aData(i)
else
dataChain = dataChain & aData(i) & ", "
end if
skip:
next
MsgBox (dataChain)
SQL_statement = "INSERT INTO ""TestData"" VALUES (" & dataChain & ");"
Stmt = connection.createStatement()
Stmt.executeUpdate(SQL_statement)
end sub
答案 2 :(得分:0)
我可以收集的内容,你是以两种不同的方式定义aData -
dim aData (Split(sData, ";").length) as string
aData = Split(sData, ";")
aData长度将返回实际长度的整数,而您要求它返回一个字符串,并且您在整数循环中使用它作为i作为计数器。
之后,您立即告诉它只返回一些导致崩溃的数据。而是使用另一个提名者来保存您需要的两种不同类型的返回信息 -
dim aData (Split(sData, ";").length) as Long ''Rather use long as the length might exceed the integer type. Use the same for i, change integer to long
Dim bData = Split(sData, ";") as String
for i = 0 to aData.Length
if(i = 4) then
goto skip
elseif (i = 68) then
goto skip
elseif (i = 72) then
goto skip
end if
if(i = aData.length) then
dataChain = dataChain & bData(i)
else
dataChain = dataChain & bData(i) & ", "
end if
skip:
next