符号已经定义不同的VB

时间:2016-08-29 16:50:31

标签: vb6 libreoffice-basic

我正在尝试编译以下代码,并且我一直收到错误。我多次得到这个错误所以我被迫使用变通办法功能。这次我真的厌倦了这个问题,我需要知道这里有什么问题。

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

3 个答案:

答案 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