2016-08-29 5 views
0

Я пытаюсь скомпилировать следующий код, и я продолжаю получать сообщение об ошибке. Я получил это erro несколько раз, поэтому мне пришлось использовать обходные функции. На этот раз я действительно устал от этой проблемы, и мне нужно знать, что здесь не так.Символ, который уже определен по-разному VB

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 

Компиляция этот код дает мне следующую ошибку "при г = 0 до aData.Length" линии:

Основная ошибка синтаксиса.

Символ aData уже определен по-разному.

Не знаю, почему. Извините, если это тривиальная проблема, но я совершенно не знаком с VB. C++ не подготовил меня к этому.

ответ

3

Массивы в классическом VB не имеют свойства «длина». Я не знаю, откуда вы это взяли.

Способ получить границы массива в классическом VB с функциями LBound и UBound.

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

Таким образом, вы даже можете работать с массивами, которые не имеют 0 в качестве начального индекса, как да, один из удивительных причуд VB является то, что она позволяет использовать любой диапазон чисел для индексов.

VB6 - это не язык, который я бы рекомендовал для новой разработки. Если вы пытаетесь узнать что-то новое, есть много других вариантов. Как вы, без сомнения, заметили, сложнее и труднее найти документацию о том, как классический VB делает что-то и как он отличается от VBScript и VB.NET. Если вам нужно поддерживать более старую базу кода VB6, я бы рекомендовал найти использованную книгу где-нибудь, что будет содержать синтаксис и использование VB6.

+1

Тег на вопросе предполагает, что он с помощью VB-вдохновил язык макросов в LibreOffice, поэтому он, вероятно, не имеет большого выбора в этом вопросе. :-) –

+0

@CodyGray Ну, я не так хорошо знаком с этим языком, поэтому я предположил, что тэг vb6 означает, что он использует VB6 и просто каким-то образом подключился к LibreOffice. Надеюсь, ответ все равно полезен. Удивительно, как там постоянно держится все больше и больше языков, называемых «Basic». –

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 
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 
Смежные вопросы