반응형

1차원 배열은 redim Preserve로 가능하지만
2차원 배열은 redim Preserve 순간 오류를 발생시킨다.
따라서 2차원 배열의 동적 할당을 원할 경우 최대 행 개수로 미리 Row를 할당시키는 수 밖에 없다.
사실상 절반의 동적 할당만 가능하다.

무슨 소리냐면
로직을 진행시키며 for문 등에서 조건에 맞을 때만 2차원 배열을 증가시키고 싶을 때가 있는데 이때 불가능하다란 이야기이다.
좀더 구체적으로 보자면
db에서 select를 해온다 치자
레코드의 수가 100건이다면 2차원 배열을 아래처럼 100개의 row를 보유한 2차원 배열 생성이 가능하다.
ReDim arrData(레코드의카운트-1, 1)
그런데 100건 중 특정 값을 갖고 있는 배열로만 생성하고 싶다하여 아래처럼 불가능하다.
nCount = 0
do until rs.eof
   if rs("isData") = "Y" then
      ReDim Preserve arrSlideImg(nCount , 1)
      nCount = nCount +1
   end if
   rs.movenext
loop

따라서 굳이 동적 할당이 필요하다면 일단 레코드의 수만큼만 배열을 생성하고
배열을 돌며 실제 출력할 때 빈 배열이면 exit for등으로 탈출하는 수 밖에 없다.

아래는 일반적인 2차원 배열의 동적 할당 코드 샘플이다.

<%
Dim arrData() ' 2차원 배열 선언
Dim numRows ' 행(row)의 개수를 저장할 변수

' 행(row)의 개수를 가변적으로 지정
Dim maxRows ' 최대 행(row) 개수
maxRows = 10 ' 예제에서는 최대 10으로 지정

' 변수의 값을 조건에 따라 증가시키며 배열 크기 동적 할당
numRows = 0 ' 초기 행(row) 개수는 0
ReDim arrData(maxRows - 1, 1) ' 배열 크기 동적 할당
Do While numRows < maxRows
    numRows = numRows + 1 ' 행(row) 개수 증가

    ' 배열에 데이터 채우기
    arrData(numRows - 1, 0) = numRows ' 첫 번째 열(column)에는 행(row) 번호 저장
    arrData(numRows - 1, 1) = "Data " & numRows ' 두 번째 열(column)에는 데이터 저장
Loop

' 배열 데이터 출력
Response.Write("<table border='1'>")
For i = 0 To numRows - 1
    Response.Write("<tr>")
    For j = 0 To 1
        Response.Write("<td>" & arrData(i, j) & "</td>")
    Next
    Response.Write("</tr>")
Next
Response.Write("</table>")
%>

반응형
Posted by Hippalus
,