반응형
1. Recordset 객체의 속성과 메서드

(1)Recordset 객체의 속성
AbsolutePage - 현재 레코드가 위치한/할 절대 페이지
AbsolutePosition - 현재 레코드의 순서 위치
ActiveConnection - 현재 레코드 객체가 속해 있는 Connection 객체
BOF - 레코드 셋에서 첫 레코드 이전을 가리키면 TRUE
CursorType - 레코드 셋에 적용되는 커서 타입
EOF - 레코드 셋에서 끝 레코드 다음을 가리키면 TRUE
LockType - 레코드 셋에 적용되는 락 타입
PageCount - 레코드 셋의 총 페이지수
PageSize - 한 페이지를 구성하는 레코드 수
RecordCount - 레코드 셋의 총 레코드 수

(2)Recordset 객체의 메서드
AddNew - 추가를 위해 새 레코드를 하나 만듦
Close - Open 되었던 Recordset 객체 변수를 닫음
Move - 레코드 셋에서 레코드 포인터를 옮김
MoveFirst - 레코드 셋에서 레코드 포인터를 처음으로 옮김
MoveLast - 레코드 셋에서 레코드 포인터를 마지막으로 옮김
MoveNext - 레코드 셋에서 레코드 포인터를 다음 레코드로 옮김
MovePrevious - 레코드 셋에서 레코드 포인터를 이전 레코드로 옮김
Open - 쿼리를 실행하고 레코드 셋을 가져옴
Supports - 레코드 셋에서 어떤 함수가 지원되는지 체크함
Update - 현재 레코드에서 변견된 내용을 저장함


2. Recordset 객체의 생성 및 열기
Recordset 객체의 생성

Set rs = Server.CreateObject("ADODB.Recordset")

rs는 임의로 지정할 수 있는 객체변수, 객체변수에 값을 할당할 때 객체변수명 앞에 Set이란 접두어가 온다.

Recordset 객체를 생성하지 않고 사용되는 예

Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" & Server.MapPath(".") & "\Db\memberdb.mdb;"
Set rs = cn.execute("select * from member")

여기서는 객체가 생성되지 않고 리턴되는 레코드 집합이 할당되고 있다. 이 때는 내부적으로 Recordset객체가 디폴트 형식으로 생성되고 있는 것이다.


3. 레코드 사이의 이동
다음의 메서드들이 레코드사이의 이동을 가능하게 하는 Recordset 객체의 메서드들이다.
Move - 레코드 포인터를 상대적으로 옮김
예) rs.Move 2 - 레코드를 현재 포인터에서 2 증가
Movenext - 레코드 포인터를 다음 레코드로 옮김
MovePrevious - 레코드 포인터를 이전 레코드로 옮김
MoveFirst - 레코드 포인터를 처음 레코드로 옮김
MoveLast - 레코드 포인터를 마지막 레코드로 옮김

4. BOF(Biginning Of File)와 EOF(End Of File) 속성
BOF는 처음 레코드를 가리키고 있을 때 TURE가 되는 것이 아니라 레코드 포인터가 처음 레코드의 이전을 가리킬 때 TRUE가 되는 속성이다. 마찬가지로 EOF는 마지막 레코드를 가리키고 있을 때 TRUE가 되는 것이 아니라 레코드 포인터가 마지막 레코드의 다음을 가리킬 때 TRUE가 되는 속성이다.
즉, 존재하지 않는 레코드를 가리키게 될 때 TRUE가 되는 속성이다.

5. Recordset 객체의 Fields 컬렉션
사용법
rs.fields.item("필드명") 또는 rs.fields("필드명") 또는 rs("필드명") 처럼 사용한다.

다른방법으로는 필드명을 모를 때 인덱스를 사용하여 필드를 가리키는 것으로 첫 번째 필드는 인덱스 '0'이다.

rs.fields.item(0) 또는 rs.fields(0) 또는 rs(0) 처럼 사용할 수 있다.

필드의 개수는 fields 컬렉션의 count 속성으로 알 수 있다.
rs.fields.count

6. 페이지 단위로 레코드 집합을 보기
 Recordset 객체는 페이징 기법을 제공하는데 이와 관련된 몇가지 속성들을 살펴보면 다음과 같다.
pagesize - 한 페이지를 구성하는 레코드의 개수
absolutepage - 현재의 레코드가 위치한 페이지 포인터(첫 페이지는 1페이지) 또는 디스클레이할 페이지 포인터
pagecount - 레코드 집합의 전체 페이지 수

pagesize를 결정한다. 그리고 absolutepage로써 디스플레이 할 페이지를 결정한다. absolutepage 값은 각 페이지의 디스플레이 말미에 있는 form에서 넘어오는 값으로 계산한다.
form에서는 2가지 값이 넘어 오는데, hidden 타입으로 넘어 오는 바로 전에 보였던 페이지 번호와 submit 타입으로 넘어 오는 사용자 요구에 의해 선택되는 '다음페이지' 혹은 '이전페이지' 중 어느 것을 클릭하였는가에 따라 넘어 오는 방향을 나타내는 값, 이렇게 2 가지 값에 의해 absolutepage 값이 결정된다.


7. Recordset의 커서 타입(Cursor Type)
커서타입 상수값  커서 이동  다른 사용자의 레코드 수정  다른 사용자의 레코드 추가   다른 사용자의 레코드 삭제  특징
 ForwardOnly  0 전진만 가능  보이지 않음  보이지 않음  보이지 않음   속도가 가장 빠름(디폴트 타입)
 keyset  1  양방향가능  보임  보이지 않음  보이지 않음  
 Dynamic 양방향가능   보임  보임  보임  속도가 가장 느림
 static  3  양방향가능  보이지 않음  보이지 않음  보이지 않음  

예) Static으로 커서 타입을 지정하는 경우라면
Set rs = Server.Createobject("ADODB.Recordset")
Rs.Open "select * from member", cn, 3

또는

Set rs = Server.CreateObject("ADODB.Recordset")
Rs.source = "select * from member"
Rs.ActiveConnection = cn
Rs.CursorType = 3
Rs.open

또 한가지 방법은 미리 상수를 define 한 뒤 그 상수 이름을 사용하는 방법이다.

const adOpenStatic = 3
Set rs = Server.Createobject("ADODB.Recordset")
Rs.Open "select * from member", cn, addOpenStatic


8. Recordset 객체를 이용한 레코드 수정, 추가, 삭제
Connection 객체를 생성한 뒤, Connection 객체의 execute 메서드에 sql쿼리를 보낼 수 있기에, update, insert, delete 쿼리를 실행 함으로써 레코드에 대해 작업을 해 왔다. 반면 Recordset 객체의 메서드를 이용하여 레코드에 대해 수정, 추가, 삭제가 가능하다. Recordset 객체에서 제공하는 이와 같은 관련 메서드에는 다음과 같은 것들이 있다.

supports - 어떤 메서드가 지원되는지 여부를 검사, 지원되면 TURE
update - 현재 레코드에 대해 변경한 내용을 모두 저장
addnew - 새로운 레코드 추가 생성
delete - 현재 레코드 포인터가 가리키는 레코드 삭제

Supports는 어떤 메서드가 현재 open된 객체에서 지원되는지 여부를 검사하는 메서드로서, 지원되면 TRUE를 리턴한다.
사용예)
if rs.supports(update) then
   rs("ID") = "aaa"
   rs("passwd") = "1234"
   rs.update
end if

Update 메서드는 현재 레코드에 대해 변경한 내용을 모두 저장하는 메서드
사용예)
   rs("name") = "홍길동"
   rs("age") = 150
   rs.update


Addnew 메서드는 새로운 레코드를 추가 생성할 때 사용하는 메서드로서 Addnew 메서드가 호출되면 update 가능한 빈 레코드 하나 생성되는 셈이다. 레코드의 각 필드를 채운 후 update 메서드를 호출해야 데이터베이스에 저장이 완료된다.
사용예)
rs.addnew
rs("ID") = "fatfox"
rs("name") = "이주형"
rs("age") = 7
rs.update

Delete 메서드는 현재 레코드 포인터가 가리키는 레코드를 삭제하는 메서드로서 레코드 집합 전체가 지워지는 것은 아니고 현재 커서가 가리키는 레코드만 삭제 된다는 점을 유의!!

rs.delete

반응형

'공부 > ASP' 카테고리의 다른 글

Request, Response 객체  (0) 2011.06.10
Command 객체  (0) 2011.06.10
Connection 객체  (0) 2011.06.07
ADO 컴포넌트와 ODBC/OLE DB  (0) 2011.06.03
SQL 기초  (0) 2011.06.01

+ Recent posts