ADO 객체
객체 설명 Connection 데이터 연결 설정 Command SQL 명령 구현 Parameter SQL 명령에 필요한 파라미터 설정 Recordset 데이터 탐색 및 조작 Field Recordset 객체의 필드를 구현하고 조작 Error Connection 객체의 에러 처리 Property ADO 객체 각각의 특징 구현
ADO 컬렉션
컬렉션 설명 Errors Connection 객체에 발생한 모든 에러 객체 관리 Parameters Command 객체와 관련된 모든 Parameter 객체 관리 Fields Recordset 객체와 관련된 모든 Field 객체 관리 Properties Connection, Command, Recordset, Field 객체의 Property 객체 관리
ADO를 이용한 작업 순서
1. Connection 객체와 Recordset 객체 생성
Dim CON As ADODB.Connection
Dim RS As ADODB.RecordsetSet CON = New ADODB.Connection
Set RS = New ADODB.Recordset2. Connection 객체의 ConnectionString 속성에 연결 정보 설정
Dim str As String
str = "PROVIDER=Microsoft.Jet.OLEDB.4.0;data source=Biblio.mdb;"
3. Connection 객체의 Open 메서드를 사용하여 데이터 소스에 대한 연결 오픈
CON.ConnectionString = str
4. 오픈 된 Connection 객체를 인수로 Recordset 객체의 Open 메서드 사용
CON.Open
5. Recordset 객체를 가지고 작업
RS.Open "SELECT * FROM Titles", CON
6. 바운드 컨트롤에 Recordset 할당
For I = 0 To 4
Set txtData(I).DataSource = RS
txtData(I).DataField = RS.Fields(I).Name
Next I7. 작업 완료 시 연결 정보 해제
RS.Close
CON.Close
Connection 객체
속성 설명 Attribute Rollback, Commit 후 새로운 트랜젝션이 시작되게 할 것인지 명시 CommandTimeout 명령이 처리되기까지의 대기시간 ConnectionString 데이터 소스 연결 정보 ConnectionTimeout 데이터 소스 연결 대기시간 DefaultDatabase 여러개의 데이터 소스 연결 정보 중 사용할 기본값 IsolationLevel 하나의 데이터 소스에 대한 다중 트랜젝션 허용 여부 CusorLocation 커서의 위치 (adUseClient, adUseServer) Mode adModeUnknown, adModeRead, adModeWrite, adModeReadWrite Provider 데이터 소스 제공자 설정 Version 연결에 사용된 ADO 버전
메서드 설명 BeginTrans 트랜젝션 시작 CommitTrans 처리된 트랜젝션 반영 RollbackTrans 처리된 트랜젝션 취소 Close 연결 종료 Execute 데이터 소스에 설정된 명령 수행 후 레코드 셋 반환 Open 연결 오픈
이벤트 설명 BeginTransComplete 트랜젝션 완료 시 CommitTransComplete commit 완료 시 RollbackTransComplete rollback 완료 시 WillConnect 연결이 이루어지기 직전 ConnectComplete 연결이 성공했을 때 Disconnect 연결이 종료되었을 때 WillExecute 명령 실행 직전 ExecuteComplete 명령 실행 완료 시 InfoMessage 현재 작업에 대한 추가 정보가 있을 때
Command 객체
독자적인 생성
Dim comm As ADODB.Command
Dim rs As ADODB.Recordset
Dim str As Stringstr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;data source=Biblio.mdb;"
comm.ActiveConnection = str
comm.CommandText = "Select * From Titles"rs.Open comm
Connection 객체를 통한 생성
Dim con As ADODB.Connection
Dim comm As ADODB.Command
Dim rs As ADODB.Recordset
Dim str As StringSet con = New ADODB.Connection
Set comm = New ADODB.Command
Set rs = ADODB.Recordsetstr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;data source=Biblio.mdb;"
con.ConnectionString = str
con.Opencomm.ActiveConnection = con
comm.CommandText = "Select * From Titles"rs.Open comm
속성 설명 ActiveConnection 연결 문자열 또는 Connection 객체 지정 CommandText 질의, 프로시저, 테이블 지정 CommandTimeout 명령 실행 대기시간 CommandType CommandText에 지정한 명령 유형 정보를 Provider에 전달 Prepared 명령의 컴파일된 버전 Name 명령의 이름 State 상태 Parameters Parameter 객체의 컬렉션
CommandType 속성 설명 adCmdFile 파일 adCmdStoredProc 저장 프로시저 adCmdTable 테이블 adCmdTableDirect 테이블 adCmdText SQL 질의문 adCmdUnknown 알 수 없는 경우 comm.CommandText = "Select * From Titles"
comm.CommandType = adCmdTextcomm.CommandText = "Titles"
comm.CommandType = adCmdTable
메서드 설명 CreateParameter 새로운 Parameter 생성 Execute CommandText에 설정된 명령 실행 command.Execute [Record Affected], [Parameters], [Options]
comm.CommandText = "Delete From Titles"
comm.Execute cnt, , dbCmdText // Select 문은 레코드셋을 반환, 실행질의의 경우 적용된 레코드 수 반환
Parameter 객체 및 컬렉션
속성 설명 Attribute parameter가 받아들이는 값의 종류
adParamSigned, adParamNullable, adParamLongDirection parameter의 사용 방향
adParamInput, adParamOutput, adParamInputOutput, adParamReturnValueName parameter 이름 NumericScale 이용할 소숫점 이하 자리 수 Precision 취급할 전체 자리수 Size parameter 크기 Type 데이터 타입
adBigInt, adBinary, adBoolean, adInterger, ...Value 값
메서드 설명 AppendChunk Memo, Long Binary 등 큰 바이트를 parameter에 추가 질의에 Parameter 객체를 사용한 예
Dim comm As ADODB.Command
Dim rs As ADODB.Recordset
Dim param As ADODB.Parameter
Dim str As StringPrivate Sub Form_Load()
Set comm = New ADODB.Command
Set rs = New ADODB.Recordsetstr = [commection string information]
comm.ActiveConnection = strSet param = comm.CreateParameter("", adBSTR, adParamInput, , "Using SQL") ' (Name, Type, Direction, Size, Value)
comm.Parameters.Append paramcomm.CommandText = "Select * From Titles Where Title = param"
comm.Executers.open comm, , , , adCmdText
Call Display
End Sub저장 프로시저에 Parameter 객체를 사용한 예
CREATE PROCEDURE Change_Value @vParam int AS
UPDATE SampleTable SET Value = Value + @vParm. . .
Set param = comm.CreateParameter("", adInteger, adParamInput, val(Text1.Text))
comm.Parameters.Append paramcomm.CommandType = adComStoredProc
comm.CommandText = "Change_Value"comm.Execute
rs.Open comm
Recordset 객체
recordset.Open [Source], [ActiveConnection], [CursorType], [LockType], [Options]
Source : 테이블, 쿼리 또는 활성화 되어 있는 Command 객체의 참조변수
ActiveConnection : 유효한 연결문자열 또는 활성화 되어 있는 Connection 객체의 참조변수
CursorType : 커서(레코드셋) 유형
LockType : 잠금 형식 (디폴트 = adLockReadOnly)
Options : 레코드셋 구성 옵션 (adCmdText, adCmdTable, 등)
Recordset 생성
연결문자열 사용
Dim rs As ADODB.Recordset
Dim str As StringSet rs = ADODB.Recordset
str = "PROVIDER=Microsoft.Jet.OLEDB.4.0;data source=Biblio.mdb;"
rs.Open "Select * From Titles", str
Connection 참조변수 사용
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim str As StringSet con = New ADODB.Connection
Set rs = ADODB.Recordsetstr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;data source=Biblio.mdb;"
con.ConnectionString = str
con.Openrs.Open "Select * From Titles", con
Command 참조변수 사용
Dim con As ADODB.Connection
Dim comm As ADODB.Command
Dim rs As ADODB.Recordset
Dim str As StringSet con = New ADODB.Connection
Set comm = New ADODB.Command
Set rs = ADODB.Recordsetstr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;data source=Biblio.mdb;"
con.ConnectionString = str
con.Opencomm.ActiveConnection = con
comm.CommandText = "Select * From Titles"rs.Open comm
속성 설명 AbsolutePage 커런트 레코드가 위치한 페이지 설정 또는 반환 AbsolutePosition 커런트 레코드의 위치 설정 또는 반환 ActiveConnection 연결 상태 설정 또는 반환 ActiveCommand 읽기 전용 속성, 현재 Recordset 객체와 관계되는 Command 반환 BOF 레코드셋 시작 EOF 레코드셋 끝 BookMark 커런트 레코드 위치 설정 또는 반환 CacheSize client에 임시로 저장할 레코드 수 CusorLocation 커서 위치 (adUseClient, adUseServer) CusorType 커서 유형 EditMode 커런트 레코드의 상태 (adEditadd, adEditDelete, adEditInProgress, adEditNone) Fields (컬렉션) 레코드 내의 필드에 접근할 수 있는 컬렉션 Filter 레코드셋 구성을 위한 필터 설정 LockType 잠금 유형 (adLockBatchOptimistic, adLockOptimixtic, adLockPessimistic, adLockReadOnly) MaxRecords 레코드셋이 반환할 레코드의 최대수 PageCount 레코드셋 내의 페이지 수 PageSize 한 페이지에 구성될 레코드 수 RecordCount 레코드셋 내의 레코드 수 (접근된 레코드 중 가장 큰 레코드 번호) Sort 특정 필드를 기준으로 순서화된 레코드셋 구성 Source 레코드셋 소스 Status 레코드셋 상태 State 레코드셋 객체의 상태 (adStateClose, adStateConnection, adStateExecuting, adStateFetch, adStateOpen)
메서드 설명 AddNew 새로운 레코드 추가 CancelBatch 처지중인 batch 작업 취소 CancelUpdate 갱신 작업 취소 Clone Recordset 객체 복제 Close 레코드셋 닫기 CompareBookMarks BookMark 비교 Delete 레코드 삭제 Find 조건을 만족하는 레코드 검색 GetRows 지정한 범위의 레코드를 이차원 배열에 복사 GetString 지정 레코드를 문자 변수에 복사 Move 지정 레코드로 이동 MoveFirst, MoveLast
MovePrevious, MoveNext레코드 이동 NextRecordset 현재 열려있는 레코드셋을 닫고, 다음 레코드셋을 연다 Open 레코드셋 열기 Requery 현재 설정되어있는 질의를 새로 실행하여 레코드셋 수정 Resync 데이터베이스와 동조 Save 레코드셋을 특정 형식으로 파일에 저장 Supports 데이터 소스에 특정 함수가 보내어질 것인지를 지정 Update 변경 상태 저장 UpdateBatch 변경 상태를 일괄적으로 갱신 Result = Recordset.CompareBookMark( BookMark1, BookMark2 ) As CompareEnum
result = adCompareLessThan, adCompareEqual, adCompareGreaterThan, adCompareNotEqual, adCompareNotComparable
Recordset2 = Recordset1.Clone([LockType])
Recordset.Find( criteria, [SkipRow], [searchDirection], [start] )
array = Recordset.GetRows( [Rows], [Start], [Fields] )
start = adBookmarkCurrent, adBookmarkFirst, adBookmarklast
string = Recordset.GetString( [StringFormat], [Rows], [ColumnDelimiter], [RowDelimiter], [NullExpr] )
recordset2 = recordset1.NextRecordset( [RecordsAffected] )
Recordset.ReQuery([Option])
Recordert.UpdateBatch
이벤트 발생 시점 원인 FetchProgress 비동기 데이터 처리가 진행되는 동안 Recordset.Open(..., adAsyncExecute) 비동기 Execute
FetchComplete 비동기 데이터 처리가 완료된 시점 WillMove 커런트 레코드의 위치가 변경되기 전 Open, Move, MoveFirst, MoveLast
MovePrevious, MoveNext, BookMark
AddNew, Delete, ReQuery, ReSyncMoveComplete 커런트 레코드의 위치가 변경된 후 EndOfRecordset EOF에 도달했을 때 WillChangeField 커런트 필드의 값이 변경되기 전 Update FieldChangeComplete 커런트 필드의 값이 변경된 후 WillChangeRecord 커런트 레코드가 변경되기 전 Update, Delete, CancelUpdate, AddNew
UpdateBatch, CancelBatchRecordChangeComplete 커런트 레코드 변경 완료 후 WillChangeRecordset 현재 레코드셋이 변경되기 전 ReSync, ReQuery, Close, Open 등 RecordsetChangeComplete 현재 레코드셋이 변경된 후
레코드셋 운영하기
Move 동작
Private Sub cmdNext_Click()
On Error GoTo ErrRoutine
If Not rs.EOF Then rs.MoveNext
If rs.EOF And rs.RecordCount > 0 Then
MsgBox "데이터의 끝!"
rs.MoveLast
End If
Exit Sub
ErrRoutine:
MsgBox err.Description
End SubPrivate Sub cmdPrevious_Click()
On Error GoTo ErrRoutine
If Not rs.BOF Then rs.MovePrevious
If rs.BOF And rs.RecordCount > 0 Then
MsgBox "데이터의 처음!"
rs.MoveFirst
End If
Exit Sub
ErrRoutine:
MsgBox err.Description
End SubPrivate Sub cmdLast_Click()
On Error GoTo ErrRoutine
rs.MoveLast
Exit Sub
ErrRoutine:
MsgBox Err.Description
End SubPrivate Sub cmdFirst_Click()
On Error GoTo ErrRoutine
rs.MoveFirst
Exit Sub
ErrRoutine:
MsgBox Err.Description
End Sub레코드 추가, 수정 및 갱신
Dim EditFlag As Boolean
Dim AddFlag As BooleanPrivate Sub txtField_KeyPress(Index As Ineteger, KeyAscii As Integer)
If EditFlag Or AddFlag Then
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys = "{Tab}"
End If
Else
If EdifFlag = False And AddFlag = False Then KeyAscii = 0
End If
End SubPrivate Sub cmdEdit_Click()
On Error GoTo ErrRoutine
EdifFlag = True
Call SetButtons(False)
Exit Sub
ErrRoutine:
MsgBox Err.Description
End SubPrivate Sub SetButtons(BFlag As Boolean)
cmdAdd.Visible = BFlag
cmdEdit.Visible = BFlag
cmdUpdate.Visible = Not BFlag
cmdCancel.Visible = Not BFlag
cmdNext.Visible = BFlag
cmdPrevious.Visible = BFlag
cmdLast.Visible = BFlag
cmdFirst.Visible = BFlag
End SubPrivate Sub cmdUpdate_Click()
On Error GoTo ErrRoutine
rs.UpdateBatch adAffectAll
If AddFlag Then rs.MoveLast
EditFlag = False
AddFlag = False
Call SetButtons(True)
Exit Sub
ErrRoutine:
MsgBox Err.Description
End SubPrivate Sub cmdDelete_Click()
On Error GoTo ErrRoutine
rs.Delete
rs.MoveNext
If rs.EOF Then rs.MoveLast
Exit Sub
ErrRoutine:
MsgBox Err.Description
End Sub
필드 객체
속성 설명 ActualSize 데이터의 실제 길이 Attribute 필드에 대해서 지원되는 기능 결정 DefineSize 필드의 최대 길이 Name 필드의 이름 NumericScale 소수점 이하의 자리수 Value 필드의 값 Precision 숫자 필드의 자리수 Type 데이터 타입 UnderLyingValue UpdateBatch 작업시, 필드가 현재 가지고 있는 값 OriginalValue UpdateBatch 작업시, 변경되기 이전의 필드값
메서드 설명 AppendChunk 긴-Binary 데이터나 문자 데이터를 필드에 추가 GetChunk 긴-Binary 데이터나 문자 데이터를 필드에서 읽어 옴
컬렉션 속성 설명 Count 컬렉션 내의 필드 수 Item 컬렉션 내의 특정 필드 tit = rs.Fields(0).Value
tit = rs.Fields("Title").Value
tit = rs.Fields("Title") // Value 속성은 기본 속성이므로 생략할 수 있다.
For i = 0 To rs.Fields.Count
List1.AddItem rs.Fields(i).Name
Next i