이지젠 쿼리편집기에 보면 Serial Number 추가라는 기능이 있습니다.
말 그대로 Serial Number를 붙여 주는 기능인데요..
이걸 사용하면 @SerialNumber라는 필드가 생성되서 일련번호가 죽~ 붙여 집니다.
그런데 문제가 있는게, 이 @SerialNumer는 그냥 그대로 일련번호로만 사용을 할 수 있습니다.
계산 필드에서 @SerialNumer값을 활용할 수 없다는 얘기지요..
해서 쿼리 결과에 일련번호를 붙여서 이걸 다시 활용해야 하는 경우에는 계산 필드를 이용해서 일련번호를 만들어 주어야 합니다.
DB가 오라클일 경우에 RowNum을 이용할 수도 있지만, 쿼리문내에 Order by가 끼어 있던가 할 경우에는 이것도 여의치가 않게 됩니다.
해서 전역 변수를 이용해서 계산 필드로 일련번호를 만드는 방법에 대해 알아 보도록 하겠습니다.
아래 그림처럼 쿼리가 작성되어 있을 경우를 예로 보겠습니다.
예로 사용한 쿼리는 SQL 구문 쿼리지만 검색 쿼리, 외부 쿼리, 파일 도입 쿼리에서도 동일하게 적용 할 수 있습니다.
먼저 일련번호 값을 계산하기 위해 사용할 전역 변수([:SNo])를 생성 합니다.
SQL 구문 쿼리에서는 바로 전역 변수 지정을 할 수 있습니다.
수정 - 전역 변수 지정을 선택 합니다.
Name을 SNo로 주고, Type은 Number로 선택 합니다.
그러면 [:SNo]라는 전역 변수가 생성되어 있는 것을 확인 할 수 있습니다.
상단의 폼 아이콘 바에서 계산 필드 도입()을 클릭해서 필드명을 SerialNo로 입력 합니다.
계산식 창이 뜨면 계산식으로
{:SNo}
SetValue({:SNo},{:SNo}+1)
을 입력 합니다.
①은 현재 {:SNo}에 있는 값을 계산 필드의 값으로 표시하고,
②는 {:SNo}에 1을 더해서 값을 증가 시키는 것입니다.
첫번째 Row에 현재 {:SNo}에 있는 값이 찍히고,(값 지정이 없었으므로 기본값인 0 이 찍힙니다.)
두번째 Row에는 ②에서 1이 증가 했으므로 1이 찍히고, 세번째 Row에는 또 1이 증가 해서 2가 찍히고... 하는 식 이지요..
이제 실행 버튼()을 눌러 쿼리를 다시 실행해 봅니다.
@SerialNo라는 계산필드가 생성되서 일련 번호가 죽~ 붙여진 것을 볼 수 있습니다.
여기서 문제가 하나 있습니다.
다시 실행 버튼()을 눌러 쿼리를 실행하면,
위의 그림처럼 @SerialNo가 잘못 계산되어져 나오는 것을 확인 할 수 있습니다.
이것은 @SerialNo의 계산식 때문 입니다.
계산식에서 전역변수 :SNo값을 1씩 더해 나갔기 때문에 처음에 쿼리를 실행할 때에는 정상적으로 계산된 일련 번호가 계산 되어졌지만 두번째 실행시에는 앞에서 DataRow의 수()만큼 :SNo에 더해져 있는 상태에서 @SerialNo가 계산되어 지기 때문에 DataRow의 수(
)에 있는 값이 더해진 값이 일련번호로 계산이 되어 집니다.
다시 쿼리를 실행하면 현재 값에 DataRow의 수() 만큼이 또 증가된 값이 나오겠지요..
때문에 정상적인 일련번호가 @SerialNo에 나오게 하기 위해서는 이벤트가 일어나 RunQuery가 실행되기 전에 전역변수(:SNo)에 초기값을 설정해 줘야 합니다.
폼 도안 모드에서 해당 이벤트 창에서 RunQuery가 실행 되기 전에 먼저 SetValue 매크로를 이용해서 전역변수 [:SNo]에 값을 0으로 지정 합니다.
값을 0 으로 지정하면 일련번호가 0 부터 시작이 되고, 1 로 지정 하면 1 부터 시작이 되겠지요.
0 부터 시작 되는 일련번호는 데이타의 RowIndex와 동일한 값이 되고,
1 부터 시작 되는 일련번호는 데이타의 RowCount와 동일한 값이 됩니다.
SetValue 매크로로 [:SNo]에 초기값을 설정 했으면 RunQuery 매크로를 다음에 지정 하면 됩니다.
이상으로 전역변수를 이용해서 일련 번호를 계산필드로 생성하는 방법에 대해 알아 봤습니다.
단, 위의 방법은 쿼리에 통계가 적용되어 있을 경우에는 소계,총계 부분에는 값이 정상적으로 나오지 않습니다.
계산필드가 통계에서 계산으로 적용이 되어 있더라고 하더라도, 통계는 데이타 부분의 계산이 끝난 뒤에 일어나기 때문에 데이타 부분의 일련번호 계산이 끝난 다음에 적용됩니다.
예를 들면 쿼리의 결과가 아래와 같을 경우
A B C @SerialNo
가 10 20 0
가 10 30 1
나 10 10 2
나 10 30 3
통계를 적용하면
A B C @SerialNo
가 10 20 0
가 10 30 1
소계 20 50 2
나 10 10 3
나 10 30 4
소계 20 40 5
가 되는 것이 아니라
A B C @SerialNo
가 10 20 0
가 10 30 1
소계 20 50 4
나 10 10 2
나 10 30 3
소계 20 40 5
가 된다는 것 입니다.