2016-08-29 7 views
0

다음 코드를 컴파일하려고하는데 오류가 계속 발생합니다. 여러 번 사용하기 전에이 오류가 발생하여 회피 기능을 사용해야했습니다. 이번에는이 문제에 정말로 지쳤고 여기서 무엇이 잘못되었는지 알아야합니다.기호가 다르게 정의되었습니다. 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) 

당신도 VB의 멋진 단점 중 하나, 예로서 시작 인덱스 0이없는 배열을 처리 할 수있는이 방법은 당신이 당신의 인덱스에 대해 숫자의 범위를 사용할 수 있다는 것입니다.

VB6은 새로운 개발을 위해 권장되는 언어가 아닙니다. 새로운 것을 배우려고한다면 다른 많은 옵션이 있습니다. 의심의 여지가 없으므로 고전 VB에서 수행하는 작업과 VBScript 및 VB.NET과 어떻게 다른지에 대한 문서를 찾는 것이 더 어렵고 어렵습니다. 구형 VB6 코드 기반을 유지해야 할 필요가 있다면, VB6 구문과 사용법을 뒤집어 놓은 중고 책을 찾아 보시기 바랍니다. 내가 두 번-DATA를 정의하고 수집 할 수있는 무엇

+1

질문에 태그는 그가 VB 영감 매크로 언어를 사용하고 제안 LibreOffice, 그래서 그는 아마도이 문제에 대해 많은 선택권이 없을 것입니다. :-) –

+0

@CodyGray 글쎄, 나는 그 언어에 친숙하지 못해서, VB6 태그가 VB6을 사용하고 있다고 가정하고, 어떻게해서든지 LibreOffice에 연결했다. 바라건대 대답은 어쨌든 유용합니다. "Basic (기본)"이라는 언어가 점점 더 많아지고 있다는 것을 놀라 울 정도. –

0

하지만 다른 방법 -

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