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>")
%>
'모바일 & 앱' 카테고리의 다른 글
swift로 dictionary생성하고 오름차순 내림차순 정렬하기 (0) | 2023.07.19 |
---|---|
vscode에서 메뉴 한글로 바꾸기 (0) | 2023.07.14 |
MSSQL 컬럼을 보유한 테이블 조회, 전체 컬럼 확인하기 (0) | 2023.04.10 |
ms-sql 2012 게시판 쿼리 OFFSET ROWS FETCH NEXT ROWS ONLY (0) | 2023.04.03 |
애플 소셜 로그인(Sign in with apple) 구현시 이메일 가린 회원에게 이메일 발송 설정 방법 (0) | 2023.03.22 |