0

我正在尝试编译以下代码,但我不断收到错误消息。我之前多次遇到这个错误,所以我被迫使用变通功能。这次我真的厌倦了这个问题,我需要知道这里出了什么问题。

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++ 并没有让我为此做好准备。

4

3 回答 3

3

经典 VB 中的数组没有“长度”属性。我不确定你从哪里得到的。

在经典 VB 中获取数组边界的方法是使用 LBound 和 UBound 函数。

for i = LBound(aData) to UBound(aData)

这样,您甚至可以处理没有 0 作为起始索引的数组,因为是的,VB 的一个奇妙的怪癖是它允许您使用任何范围的数字作为索引。

VB6 不是我推荐用于新开发的语言。如果你想学习新东西,还有很多其他的选择。正如您毫无疑问地注意到的那样,找到有关经典 VB 如何做事以及它与 VBScript 和 VB.NET 有何不同的文档越来越难。如果您需要维护较旧的 VB6 代码库,我建议您在某处找到一本介绍 VB6 语法和用法的旧书。

于 2016-08-29T16:58:31.053 回答
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 
于 2016-08-30T07:12:13.337 回答
0

我可以收集到,您定义 aData 两次,但方式不同 -

dim aData (Split(sData, ";").length) as string

aData = Split(sData, ";")

aData length 将在您要求它返回一个字符串时返回一个实际长度的整数,并且您在整数循环中将它用于 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
于 2016-08-29T19:14:27.940 回答