study/ADO 2012. 5. 2. 14:00

액세스 VBA 강좌_ADO_지원 체크

   

■ Contents

   

1. Supports 방법

   

1.Supports 방법

Supports 법은 Recordset 오브젝트가 지원하는 기능의 종류를 조사하기 위해 사용한다.CursorOptions 로 지정된 정수에 대응하는 기능이 Recordset 오브젝트로 지원되고 있는 경우 Supports 방법은 True을 돌려 준다.대응하는 기능이 지원되지 않는 경우에는 False을 돌려 준다.

【서식】boolean =recordset.Supports( CursorOptions)

recordset: Recordset 오브젝트를 표현하는 오브젝트 변수
CursorOptions:지원여부를 조사하는 기능

◆다음의 일람표는 Supports 방법이 테스트 하는 기능입니다.

정수

설명

adAddNew

신규 레코드를 추가하는 AddNew 방법

adApproxPosition

AbsolutePosition 속성과 AbsolutePage 속성

adBookmark

특정의 레코드에의 액세스를 확보하는 Bookmark 속성

adDelete

레코드를 삭제하는 Delete 방법

adFind

Recordset 안의 행의 위치를 확인하는 Find 방법

adIndex

인덱스에 이름을 붙이는 Index 속성

adMovePrevious

MoveFirst,MovePrevious 방법및 Move 방법

adResync

기초가 되는 데이터베이스의 커서에 있는 가시 데이터를 갱신하는 Resync 방법

adSeek

Recordset 안의 행에 할당하는 Seek 방법

adUpdate

기존의 데이터를 변경하는 Update 방법

【사용 예】

IF RS.Supports(adUpdate) Then
MsgBox "편집 가능합니다"
End If

   

  

   

study/ADO 2012. 5. 2. 13:59

액세스 VBA 강좌_ADO_레코드 추출

   

■ Contents

   

   

1.Filter속성

Recordset 오브젝트의Filter속성을 설정하면 지정한 조건을 채워주는 레코드만을 추출하는 것이 가능하다.해당되는 레코드가 발견되지 않았던 경우에는 Recordset 오브젝트의 RecordCount속성(레코드셋에 포함되는 레코드 수를 표현하는 속성)의 값이 0이 된다.

【서식】recordset.Filter = criteria

recordset:열려 있는 Recordset 오브젝트
criteria:추출 조건을 표현하는 문자 열식

추출 조건을 표현하는 문자 열식은 추출에 사용하는 필드와 비교 연산자 추출하는 값으로 구성되는 문자열 식이다.추출에 사용하는 필드의 데이터 형태에 의해 추출하는 값의 서식이 다르다.

추출 조건의 서식

   

●텍스트 형태의 필드의 경우 추출하는 값을 Single Quation(')으로 묶어야 한다.

추출하는 값을 변수로 지정하는 경우에도 Single Quation이 필요하다.

   

(예)RS.Filter = "클래스 = 'TA'"

RS.Filter = "클래스 = ' " & Str& "'"

   

●수치형의 필드의 경우는 추출하는 값을 그대로 기술한다.

   

(예)RS.Filter = "점수> 80"

RS.Filter = "점수> " & Str

   

●날짜 시각형 필드의 경우 추출하는 값을 샾기호(#)으로 묶어야 한다.추출하는 값을    변수로 지정하는 경우도 샾기호가 필요하다.

   

(예)RS.Filter = "입학일 = #2004/04/01#"

RS.Filter = "입학일 =  # " & Str& "#"

   

●LIKE 를 사용한 문장은 ListName Like '*mit*' 이다 . 패턴의 시작과 끝에 와일드 카드를    지정할 수 있다.또는 ListName Like 'Smit*' 이다. 패턴의 끝에만 사용 할 수도 있다.

2.레코드를 추출한다.

【사용 예】

Public Sub 추출()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'필터
criteria = "성명 Like '홍길동%'"
RS.Filter = criteria

If RS.RecordCount = 0 Then
MsgBox ("해당되는 레코드는 발견되지 않습니다")
Else
Do Until RS.EOF
Debug.Print RS!학적 번호, RS!성명
RS.MoveNext
Loop
End If

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

3.복수의 조건으로 레코드를 추출한다.

복수의 조건으로 레코드를 추출할 때에는 And 연산자 또는 Or 연산자를 이용한다.And 연산자는 지정한 모든 조건을 채워주는 레코드를 추출할 때에 사용. Or 연산자 는 지정한 모든 조건의 어느 것이나 1개를 채워주는 레코드를 추출할 때에 사용한다.

【사용 예】

Public Sub FilterExecute2()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'필터
criteria = "(입학 일 >= #2004/04/01#) And (입학 일<= #2004/04/31#)"
RS.Filter = criteria

If RS.RecordCount = 0 Then
MsgBox ("메세지")
Else
Do Until RS.EOF
Debug.Print RS!학생명부, RS!점수, RS!성명
RS.MoveNext
Loop
End If

RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

4.필터를 해제한다

Recordset 오브젝트의 Filter속성을 설정하면 지정한 추출 조건을 채워주는 레코드만이 추출되고 추출되지 않았던 레코드에 액세스하는 것은 불가능하다.필터를 해제하고 모든 레코드에 액세스할 수 있게 할 때는 Filter속성에 adFilterNone 또는 길이 0의 문자 열("")을 대입한다.

   

【사용 예】

Public Sub FilterCancel()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'필터
criteria = "(입학 일 >= #2004/04/01#) And (입학 일<= #2004/04/31#)"
RS.Filter = criteria

If RS.RecordCount = 0 Then
MsgBox ("메세지")
Else
Do Until RS.EOF
Debug.Print RS!학생명부, RS!점수, RS!성명
RS.MoveNext
Loop
End If

Debug.Print

RS.Filter = adFilterNone
Do Until RS.EOF
Debug.Print RS!학생명부, RS!점수, RS!성명
RS.MoveNext
Loop

RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_11.htm>에서 삽입

study/ADO 2012. 5. 2. 13:43

액세스 VBA 강좌_ADO_검색

   

■ Contents

   

   

1.Find 방법

Recordset 오브젝트의 Find방법을 이용하면 지정한 조건에 일치하는 레코드를 검색하고 그 레코드를 최신 레코드라 한다.레코드가 발견되지 않았던 때는 Recordset 오브젝트의 BOF속성 또는 EOF속성이 True이 되고 최신 레코드는 미정의 된다.

【서식】recordset.Find Criteria, SkipRows, SearchDirection, Start

recordset : 열려 있는 Recordset 오브젝트
Criteria : 열의 이름, 비교 연산 자, 값을 지정하는 성명을 포함할 문자 열형의 값을 지정
SkipRows : 개시 위치에서 읽기 날리는 레코드 수(생략 가능)
SearchDirection : 검색 방향(생략 가능)
Start : 검색의 개시 위치(생략 가능)

정수

설명

adSearchBackward

-1

후방 검색을 하고 Recordset 의 앞으로 종료한다.일치하는 레코드가 발견되지 않는 경우,레코드 포인터는 BOF로 이동한다.

adSearchForward

1

전방 검색을 하고 Recordset 의 말미에 종료한다.일치하는 레코드가 발견되지 않는 경우,레코드 포인터는 EOF 로 이동한다.

◆SearchDirection

   

【포인트】

Criteria인수는 검색에 사용하는 필드,비교 연산 자 검색하는 값으로 구성되는 문장이다. 비교 연산자에 "like" 을(를) 사용하는 경우 문자 열치에 퍼센트 (%) 를 포함하면 1 나루터 또는 복수의 문자 또는 부분 문자열을 검색하는 것이 가능하다.단지 퍼센트는 검색 문자열의 말미에 사용하거나 또는 검색 문자열의 앞과 말미의 양방에서 사용하는 것이 가능하다.

   

SkipRows인수는 검색 실행 때로는 읽기 날리는 레코드 수이다.이 인수를 생략하거나  또는 0을 지정하면 ,Find 방법은 최신 레코드에서 검색을 한다.만약,최신 레코드가 검색 조건을 채워주고 있는 경우에는 언제나 이 레코드가 검색되고 다른 레코드를 검색하는 것은 불가능하다.SkipRows인수를 1으로 하면,최신 레코드를 읽고 날리고,다음의 레코드를 검색하는 것이 가능하다.

   

SearchDirection인수는 검색의 방향을 지정한다.Recordset 오브젝트의 CursorType속성이 adOpenForwardOnly의 경우는 최신 레코드에서 앞 레코드 방향에의 검색은 실행할 수 없다.

   

Start인수는 검색 개시 위치를 지정한다.생략한 경우는 최신 레코드에서 검색을 개시한다.

■ 검색 조건의 서식

   

검색에 사용하는 필드의 데이터 형태에 의해 검색하는 값의 서식이 다르다.

   

텍스트 형태의 필드의 경우 검색하는 값을 Single Quation(')으로 묶어야 한다.

검색하는 값을 변수로 지정하는 경우에도 Single Quation이 필요하다.

   

(예) RS.Find "클래스 = 'TA'"

RS.Find "클래스 = ' " & Str& "'"

   

  ●수치 형의 필드의 경우에는 검색하는 값을 그대로 기술한다.

   

(예)RS.Find "점수> 80"

RS.Find "점수> " & Str

   

날짜 시각 형필드의 경우,검색하는 값을 샾기호(#)으로 묶어야 한다.검색하는 값

       을 변수로 지정하는 장소

   

합도 샾기호가 필요합니다.

   

(예)RS.Find "입학 일 = #2004/04/01#"

RS.Find "입학 일 =  # " & Str& "#"

2.앞 레코드를 검색한다.

Find 방법의 SkipRows인수를 0,SearchDirection인수를 adSearchForward으로 하면 최신 레코드에서 레코드셋의 최종 방향에 향하여 개시하고 처음에 찾았던 레코드를 최신 레코드로 한다.해당되는 레코드가 발견되지 않았던 경우에는, Recordset 오브젝트의 EOF속성이 True이 되고 최신 레코드는 미정의 된다. 이 때 최신 레코드를 참조한다면 에러가 발생한다.Find 방법을 실행한 뒤에는 반드시 EOF속성의 값을 조사하고 레코드가 발견됐을지 어떨지를 확인한다.

   

【사용 예】

Public Sub 검색()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'검색
criteria = "성명 Like '홍길동%'"
RS.Find criteria, 0, adSearchForward

'확인
If RS.EOF Then
MsgBox ("발견되지 않습니다")
Else
MsgBox (RS!학적 번호 & " " & RS!성명)
End If

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

3.연속으로 검색한다.

동일 조건으로 레코드를 계속하고 검색하는 경우, 첫번째의 레코드를 검색하는 경우에는 SkipRows인수를 0으로 하여 실행하고,2번째 이후의 레코드를 검색하는 경우는 SkipRows인수를 1로 한다.

【사용 예】

Public Sub 연속 검색()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'1회째의 검색
criteria = "성명 Like '홍길동%'"
RS.Find criteria, 0, adSearchForward

If RS.EOF Then
MsgBox ("발견되지 않습니다")

'2회째 이후의 검색
Else
Do Until RS.EOF
MsgBox (RS!학적 번호 & " " & RS!성명)
RS.Find criteria, 1, adSearchForward
Loop
MsgBox ("검색 종료")
End If

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

4.Seek 방법

Seek방법은 테이블에 설정되어 있는 인덱스를 이용하고 검색을 하기 때문에 Find 방법보다도 고속으로 레코드를 검색할 수 있다.

【서식】recordset.Seek KeyValues,SeekOption

recordset:열려 있는 Recordset 오브젝트
KeyValues:검색하는 값
SeekOption:검색 방법

정수

설명

adSeekFirstEQ

1

KeyValues 와 일치하는 최초의 키를 검색한다.

adSeekLastEQ

2

KeyValues 와 일치하는 최후의 키를 검색한다.

adSeekAfterEQ

4

KeyValues 와 일치하는 키, 또는 그 직후의 키의 어느 쪽이나 검색한다.

adSeekAfter

8

KeyValues라고 일치하는 키의 직후의 키를 검색한다.

adSeekBeforeEQ

16

KeyValues 라고(와) 일치하는 키, 또는 그 직전의 키의 어느 쪽이나를 검색한다.

adSeekBefore

32

KeyValues 와 일치하는 키의 직전의 키를 검색한다.

◆SeekOption

【포인트】

  1. 검색에 사용하는 필드는 테이블에 설정되고 있는 인덱스이다.테이블에는 복수의 인덱스를 설정하는 것이 가능하다.어느 인덱스를 사용하고 검색을 실행할지 는 Recordset 오브젝트의 Index속성으로 지정한다Seek 방법은 Recordset 오브젝트의 Open 방법의 options인수에 adCmdTableDirect을 지정하고 열렸던 Recordset 오브젝트만으로 실행 가능하다.
  2. Seek 방법을 실행한 결과 조건을 채워주는 레코드가 발견되지 않았던 때는 Recordset 오브젝트의 BOF속성 또는 EOF속성이 True이 되고,최신 레코드는 미정의 된다.이 때 최신 레코드를 참조한다면 에러가 된다.Find 방법을 실행한 후에는 반드시 BOF속성 또는 EOF속성의 값을 조사하고 레코드가 발견됐을지 어떨지를 확인한다.어느 쪽의 속성을 이용할지는 검색의 방법에 의해 다르다.
  3. Seek 방법의 KeyValues인수는 검색하는 값의 데이터 형태에 의해 서식이 다르다.텍스트 형태의 경우는 그 문자열을 Double Quatation(")이고 ,날짜 시각형의 경우는 샾기호(#)으로 묶어야 한다.수치형의 경우에는 검색하는 값을 그대로 기술한다.

   

【서식】recordset.Index = indexname

recordset:열려 있는 Recordset 오브젝트
indexname:테이블에 설정되고 있는 인덱스 이름

예를 들면,[학적 번호]필드에[번호]이라고 말하는 인덱스가 설정되고 있는 때 이 인덱스를 사용하고 레코드를 검색하는 데는,다음과 같이 기술한다.

RS.Index = "번호"
RS.Seek "775501A", adSeekFirstEQ

【사용 예】

Public Sub Seek 검색()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim DAT As Long

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic, adCmdTableDirect

'검색
DAT = 2101
RS.Index = "번호"
RS.Seek DAT, adSeekFirstEQ

'확인
If RS.EOF Then
MsgBox ("발견되지 않습니다")
Else
MsgBox (RS!학적 번호 & " " & RS!성명)
End If

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_10.htm>에서 삽입

study/ADO 2012. 5. 2. 13:37

액세스 VBA 강좌_ADO_레코드 이동

   

■ Contents

   

   

1. BOF속성과 EOF속성

ADO의 Recorsset 오브젝트로 참조할 수 있는 레코드는 1개 뿐이다.이 레코드를 최신 레코드라고 부른다.Recorsset 오브젝트를 작성한 직후에는 앞 레코드가 최신 레코드이다.아래그림은 레코드셋속에서 최신 레코드가 이동할 수 있는 범위이다.앞 레코드보다도 전에 이동하면 BOF속성의 값은 True가 된다.또,최종 레코드보다도 뒤에 이동하면 EOF속성의 값은 True이 된다.

BOF

BOF=True

앞 레코드

BOF=False

EOF=False

최종 레코드

  

EOF

EOF=True

레코드셋에 레코드가 1개도 포함되어 있지 않는 경우는 다음의 그림과 같이 되고 있다.레코드셋의 BOF속성과 EOF속성은 어느 쪽도 True이 되어 있다.최신 레코드를 이동하는 것은 불가능하다.

BOF

BOF=True

EOF

EOF=True

   

2. 최신 레코드를 이동한다 .

【서식】recorsset.MoveFirst :앞 레코드에 이동
recorsset.MovePrevious ;1개 전(앞)의 레코드에 이동
recorsset.MoveNext     :다음의 레코드에 이동
recorsset.MoveLast     :최종 레코드에 이동

recorsset:열려 있는 Recorsset 오브젝트

Recorsset 오브젝트의 CursorType속성의 값이 adOpenForwardOnly,LockType속성의 값이 adLockReadOnly의 경우 이 레코드셋은 앞 레코드에서 최종 레코드 방향만큼 스크롤 가능하다.MoveLast 방법,MovePrevious 방법은 실행할 수 없다.

【사용 예】

Public Sub MoveCurrentRec()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'참조
Do Until RS.EOF
Debug.Print RS!학적 번호, RS!성명
RS.MoveNext
Loop

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

3. Bookmark속성

Recorsset 오브젝트를 작성하면 ,각 레코드에는 자동적으로 고유의 값(이 값을북마크라고 부른다)이 붙이진다.이것에 따라 각 레코드를 식별하는 것이 가능히다.Bookmark 속성은 설정·참조가 가능하고 이것을 사용하고 최신 레코드의 위치를 보존하고 그 레코드에 언제라도 돌아오는 것이 가능하다.북마크는 Recorsset 오브젝트의 Bookmark속성으로 관리되고 있다.

【서식】value = recordset.Bookmark (Bookmark속성의 참조)
recordset.Bookmark= value (Bookmark속성의 설정)

recordset:열려 있는 Recorsset 오브젝트
value:북마크(Variant 형태)

【사용 예】

Public Sub MoveBookmark()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim bmark As Variant

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'북마크
bmark = RS.Bookmark
Debug.Print RS!학적 번호, RS!성명

RS.MoveLast
Debug.Print RS!학적 번호, RS!성명

RS.Bookmark = bmark
Debug.Print RS!학적 번호, RS!성명

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_8.htm>에서 삽입

study/ADO 2012. 5. 2. 13:34

액세스 VBA 강좌_ADO_데이터 베이스에 접속

   

   

■ Contents

   

   

   

1.최신 데이터베이스에 접속

최신 데이터베이스를 참조할 때는 CurrentProject오브젝트의Connection속성을 이용한다.선언한 Connection 오브젝트 형태의 변수에 Set 성명을 사용하고 최신 데    이터베이스의 참조를 대입한다.

【서식】Set Connection = CurrentProject.Connection

Connection : Connection 오브젝트 형태의 오브젝트 변수

CurrentProject 오브젝트는 Access 애플리케이션으로 정의되고 있는 오브젝트이고  현재 사용중의 데이터베이스를 표현한다.Access2000으로 데이터베이스를 열면 자동적으로 ADO의 Connection 오브젝트가 작성된다.CurrentProjectObject의 Connection속성은 이 Connection 오브젝트를 참조한다.

【서식】Set Object = Nothing

Object : 오브젝트 변수

오브젝트 변수에Nothing을 대입하려면 그 변수와 오브젝트의 관계를 무효화 한다.이것에 따라 오브젝트가 사용하고 있었던 메모리 위의 영역은 삭제된다.

【서식】Object.Close

Object : 오브젝트 변수

Close 방법은 열려 있는 오브젝트를 닫는 처리를 한다.단지,오브젝트를 닫고 도 메모리에서는 삭제되지 않는다.속성을 설정하고 재차 오브젝트를 여는 것이 가능하다.

   

【사용 예】최신 데이터베이스에 접속하고 접속 정보 문자열을 Imeditewindow에 출력

Public Sub CnCurrentDb()
Dim cn As ADODB.Connection

'접속
Set cn = CurrentProject.Connection
Debug.Print cn.ConnectionString

'종료
cn.Close
Set cn = Nothing
End Sub

【실행 결과】(최신 데이터베이스에 접속하기 위한 접속 정보 문자 열)

단락 기호로 개행한다. 다만 ,실제로는 1 행에 연결됐던 문장이다.

Provider=Microsoft.Jet.OLEDB.4.0;
User ID=Admin;
Data Source=D:\OFFICE_2000\Access\Exsample1\Chap6.mdb;
Mode=Share Deny None;
Extended Properties="";
Jet OLEDB:System database=C:\PROGRA~1\COMMON~1\System\SYSTEM.MDW;
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password="";
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False

2.다른 데이터베이스에 접속한다

최신 데이터베이스 이외의 데이터베이스에 접속할 때는 다음의 순서로 한다.

   

1.Connection 오브젝트의 ConnectionString속성을 설정한다.

2.Connection 오브젝트의 Open 방법을 실행한다.

  • ConnectionString속성

    Connection속성은  데이터베이스에의 접속 정보를 보호한다. 키워드와 거기에 대입 하는 값으로 구성된다. 복수의 키워드를 지정하는 경우에는 세미콜론(;)으로 단락을 짓고 지정한다.

    【서식】Connection.ConnectionString = "키워드 1=값 1;키워드 2=값 2;

    Connection:Connection 오브젝트 형태의 오브젝트 변수
    키워드:접속에 필요한 키워드

    위의 실행 결과에 나타나는 키워드 중 생략할 수 없는 것은 Provider과 Data Source 이다 .

       

    ● Provider 키워드

      접속하는 데이터베이스의 종류를 표현한다.Access2000 형식의 데이터베이스에 접속

    하는 경우에는 Microsoft.Jet.OLEDB.4.0라고 말하는 값을 사용한다.

       

    ● Data Source 키워드

      접속하는 데이터베이스 파일 이름을 드라이브 이름에서 패스를 포함한 형태로 지정할

    수 있다.

  • Open 방법

    데이터 소스에의 접속을 연다

    【서식】connection.Open [ConnectionString]

    Connection:Connection 오브젝트 형태의 오브젝트 변수
    ConnectionString : 먼저 ConnectionString속성을 설정한 경우는 생략 가능

    Connection 오브젝트이고 Open 방법을 사용하면 데이터 소스에의 물리적인 접속을 확립할 수 있고 이 접속에 대하여 커맨드를 실행하고 그 결과를 처리하는 것이 가능하다.열려 있었던 Connection 오브젝트로의 조작이 완료하면 Close 방법을 사용하고 관련되는 모든 시스템 리소스를 해제한다.오브젝트를 닫고 도 메모리에서는 삭제되지 않기 때문에 그 오브젝트의 속성의 설정을 변경하고 Open 방법을 사용해도 한 번 열리는 것이 가능하다.오브젝트를 메모리에서 완전하게 삭제할 때에는 오브젝트 변수를 Nothing 으로 설정한다.

    【예】D:\Access2000\코드\대학 코드.mdb 에(로) 접속한다

    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
    & "Data Source=D:\Access2000\코드\대학 코드.mdb"
    cn.Open

  • 다른 Access 데이터베이스에 접속한다

    【사용 예】

    Public Sub CnAccess()
    Dim cn As ADODB.Connection

    '접속
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
    & "Data Source=D:\Access2000\코드\대학 코드.mdb"
    cn.Open

    MsgBox ("접속 성공")
    cn.Close
    Set cn = Nothing
    End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_7.htm>에서 삽입

study/ADO 2012. 5. 2. 13:33

액세스 VBA 강좌_ADO_레코드가 나란히 하고 교환

   

■ Contents

   

   

1. Sorting 하고 교환을 실행할 수 있는 레코드셋

Recordset 오브젝트의 CursorLocation속성의 값이 adUseClient의 경우 Sort속성을 사용하고 레코드를 Sorting 하고 바꾸는 것이 가능하다.그러나 adUseServer이 설정되고 있는 Recordset 오브젝트로는 Sort속성을 설정할 수 없다.Access 데이터베이스에 포함되는 테이블이나 쿼리를 이용하고 작성한 Recordset 오브젝트는 CursorLocation속성의 값이 adUseServer이 되고 레코드를 Sorting 하고 바꾸지 않는다.레코드를 Sorting 하고 바꾼 경우는 Recordset 오브젝트를 열기 전에 CursorLocation속성의 값을 설정하시오.다음과 같이 기술하면 테이블이나 쿼리 기초에 레코드를 Sorting 하고 바꾸는 Recordset 오브젝트를 작성하는 것이 가능하다.

   

【예】RS.CursorLocation = adUseClient

RS.Open "학생 명부",connection,adOpenKeyset,adLockOptimistic

2. Sort속성

【서식】recordset.Sort = sortorder

recordset:열려 있는 Recordset 오브젝트
sortorder:Sorting 하고 바꾸고 순서

Sort속성에 설정하는 값은 Sorting 하고 교환에 사용하는 필드 이름과 비견할 수 있고 바꾼 순서를 표현하는 키워드로 구성되는 문장이다.오름차순으로 Sorting 하고 바꾸는 경우는 ASC키워드,강순으로 Sorting 하고 바꾸는 경우는 DESC키워드를 이용한다.특별히 지정하지 않는 경우에는 오름차순으로 Sorting 하고 바꾼다(ASC이 기정 치).필드 이름과 키워드의 사이에는 공백이 필요하다.

   

【예】RS.Sort ="학적 번호 ASC"

【사용 예】

Public Sub Sorting 하고 교환()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.CursorLocation = adUseClient
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'Sorting 하고 바꾸고
RS.Sort = "입학 일 DESC"

'확인
Do Until RS.EOF
Debug.Print RS!성명, RS!입학 일
RS.MoveNext
Loop

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

3. 복수의 필드에서 Sorting 하고 바꾼다.

복수의 필드에서 Sorting 하고 바꿀 때는, Sorting 하고 바꾼 순서를 콤마(,)으로 단락을 짓고 지정한다.이 경우 먼저 지정한 Sorting을 하고 교환이 우선된다.

   

【예】RS.Sort ="클래스 ASC,학적 번호 ASC"

   

4. Sorting 하고 교환을 해제한다 .

Sort속성에 길이 0의 문자 열("")을 대입하려면 지정한 Sorting을 하고 바꾼 순서를 해제하고 기초의 레코드를 되돌리는 것이 가능하다.

【사용 예】

Public Sub SortCancel()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.CursorLocation = adUseClient
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'Sorting 하고 바꾸고
RS.Sort = "입학 일 DESC"
Do Until RS.EOF
Debug.Print RS!성명, RS!입학 일
RS.MoveNext
Loop

Debug.Print

'해제
RS.Sort = ""
Do Until RS.EOF
Debug.Print RS!성명, RS!입학 일
RS.MoveNext
Loop

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

  

   

study/ADO 2012. 5. 2. 13:32

액세스 VBA 강좌_ADO_레코드 세트의 작성

   

■ Contents

   

   

1.Append 방법

Recordset 오브젝트의 Fields 컬렉션에 Field 오브젝트를 추가하면 메모리 위에서 새롭게 레코드셋을 작성하는 것이 가능하다.작성한 레코드셋에는 Append 방법이나 Update 방법을 사용하고 레코드를 추가하는 것이 가능하다.

【서식】recordset.fields.Append Name,Type, DefinedSize, Attrib, FieldValue

recordset:Recordset 오브젝트
Name:레코드셋에 추가하는 필드의 이름
Type:필드의 데이터 형태(adVarChar을 지정한 때는 필드의 사이즈를 지정)
DefinedSize:필드의 사이즈(생략 가능)
Attrib:필드의 속성.기정치는 adFldDefault.
FieldValue:신규 필드의 값을 지정.지정하지 않는 경우는 Null 값이 설정된다.(생략 가능)

정수

설명

adBoolean

Boolean 값을 보여 준다.

adCurrency

흐름을 보여 준다.

adDate

날짜를 보여 준다.

adDouble

배 정밀도 부동 소수점치를 보여 준다.

adInteger

4 아르바이트의 부호 붙고 정수를 보여 준다.

adSingle

단 정밀도 부동 소수점치를 보여 준다.

adVarChar

문자열을 보여 준다.

◆Type

【포인트】

Append 방법을 실행하고 필드를 추가할 수 있는 것은 신규 Recordset 오브젝트에의 참조를 대입 한 직후의 Recordset 오브젝트이다.열려 있는 Recordset 오브젝트에는 필드를 추가할 수 없다.

2.연산 필드를 추가

연산 필드는 테이블에 등록되고 있는 데이터를 사용하고 연산을 실행하고 그 결과를 표시하는 필드이다.열려 있는 Recordset 오브젝트에는 필드를 추가할 수 없다.연산 필드의 작성은 다음의 순서로 한다.

  1. 새롭게 Recordset 오브젝트를 작성하고 필드를 정의한다.
  2. 연산에 필요한 데이터를 작성한 Recordset 오브젝트에 추가한다.
  3. 연산 결과를 필드에 대입 한다.

【사용 예】

Public Sub AppendField()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset '신규에 작성하는 레코드셋
Dim RRS As ADODB.Recordset  '연산용의 데이터

'접속
Set CN = CurrentProject.Connection

'신규에 레코드셋을 작성
Set RS = New ADODB.Recordset
RS.Fields.Append "상품 ID", adVarChar, 5
RS.Fields.Append "단가", adCurrency
RS.Fields.Append "세금 포함 가격", adCurrency
RS.Open

'[상품 일람]테이블의 내용을 취득
Set RRS = New ADODB.Recordset
RRS.Open "상품 일람", CN

'추가
Do Until RRS.EOF
RS.AddNew
RS!상품 ID = rsGoods!상품 ID
RS!단가 = rsGoods!단가
RS!세금 포함 가격 = rsGoods!단가 * 1.05
RS.Update
'
RS.MoveNext
RRS.MoveNext
Loop

'확인
RS.MoveFirst
Do Until RS.EOF
Debug.Print RS!상품 ID, RS!단가, RS!세금 포함 가격
RS.MoveNext
Loop

'종료
RRS.Close: Set RRS = Nothing
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing

End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_5.htm>에서 삽입

study/ADO 2012. 5. 2. 13:32

액세스 VBA 강좌_ADO_레코드 삭제

   

■ Contents

   

   

1.Delete 방법

【서식】recordset.Delete

recordset:열려 있는 Recordset 오브젝트

【포인트】

  1. Recordset 오브젝트의Delete방법을 이용하면 최신 레코드를 삭제할 수 있다.
  2. Move계의 방법이나 Find 방법을 실행하고 삭제하는 레코드에 최신 레코드를 이동한 뒤에 삭제 처리를 실행한다.
  3. 레코드 삭제한 뒤에는 최신 레코드가 미정의 상태가 되어 있다.이 때 'recordset!필드 이름'이라는 코드를 실행하면 최신 레코드의 내용을 참조할 수 없기 때문에 에러가 발생한다.

2.최신 레코드의 삭제

【사용 예】

Public Sub DeleteRecord()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim ret As Integer
Dim Str As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'삭제
Str = RS!학적 번호 & " " & RS!성명 & Chr(13)& "삭제합니까"
ret = MsgBox(Str, vbYesNo, "삭제")

IF ret=vbYes Then
RS.Delete
Else
Exit Sub
End If

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

3.모든 레코드를 삭제

Do ···Loop 성명으로 최신 레코드를 이동하면서 Delete 방법을 실행하면 레코드셋에 포함되고 있는 레코드를 전부 삭제하는 것이 가능하다.

【사용 예】

Public Sub DeleteAll()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim Ret As Integer

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'삭제
Ret = MsgBox("모든 레코드를 삭제해 모요 여과지 있습니까", vbYesNo, "삭제")

IF Ret = vbYes Then
Do Until RS.EOF
RS.Delete
RS.MoveNext
Loop
Else
Exit Sub
End Select

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_4.htm>에서 삽입

study/ADO 2012. 5. 2. 13:31

액세스 VBA 강좌_ADO_레코드의 편집

   

■ Contents

   

1 Update 방법

   

1.Update 방법

최신 레코드의 내용을 편집하는 데는 Update방법을 이용한다.편집 대상의 레코드는 최신 레코드이다.

【서식】recordset.Update Fields,Values

recordset:열려 있는 Recordset 오브젝트
Fields:편집하는 필드 이름
Values:필드에 대입 하는 값

Update 방법은 편집한 내용을 Recordset 오브젝트에 보존 처리한다.Values인수는 필드의 데이터 형태가 텍스트 형태의 경우는 대입 하는 값을 Double Quatation(")이고 ,날짜 시각형의 경우는 샾기호(#)으로 묶어야 한다.수치형의 필드에 대입 하는 경우에는 그대로 값을 기술한다.

【예】
RS.Update "성명", "홍길동 이치로"
RS.Update "점수", 100
RS.Update "입학 일", #04/05/21#

  • 모든 레코드를 편집

    【사용 예】

    Public Sub Exsample()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset

    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

    '편집
    Do Until RS.EOF
    RS.Update "보호자 성명", RS!보호자 성명 & " 모양"
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

  • 특정의 레코드만을 편집

    【사용 예】

    Public Sub Exsamplet()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset

    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

    '편집
    Do Until RS.EOF
    If RS!클래스 = "TS" Then
    RS.Update "보호자 성명", RS!보호자 성명 & " 모양"
    Else
    '
    End If
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

  • 복수의 필드를 편집한다

    복수의 필드를 편집하는 데는 다음의 두 방법이 있다.

    ■편집하는 필드의 수만 Update 방법을 실행

    【예】3의 필드를 편집한다
    RS.Update "성명", "홍길동 이치로"
    RS.Update "클래스", "TS"
    RS.Update "입학 일", #04/05/12#

    ■필드에 값을 대입 한 뒤에 Update 방법을 실행

    【예】3의 필드를 편집한다
    RS!성명 = "홍길동 이치로"
    RS!클래스 = "TS"
    RS!입학 일 = #04/05/12#
    RS.Update

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_3.htm>에서 삽입

study/ADO 2012. 5. 2. 13:31

액세스 VBA 강좌_ADO_테이블·쿼리를 참조

   

   

■ Contents

   

   

1.Recordset 오브젝트의 작성 방법

테이블에 등록되어 있는 데이터나 쿼리를 실행하고 취득한 데이터의 모임을 레코드셋이라고 부른다.Recordset 오브젝트는 이 레코드셋을 취급하는 오브젝트이다.VB으로 레코드셋을 작성하는 데는 다음의 3 종류의 방법이 있다.

●Recordset 오브젝트의 Open 방법을 이용한다

●Connection 오브젝트의 Execute 방법을 이용한다

●Command 오브젝트의 Execute 방법을 이용한다

   

2.Recordset 오브젝트의 Open 방법

Recordset 오브젝트의 Open방법을 실행하면 지정한 데이터베이스 안의 테이블이나 쿼리의 내용을 참조하는 것이 가능하다.

【서식】recordset.Open Source, ActiveConnection, CursorType, LockType, Options

recordset:열려 있는 Recordset 오브젝트
Source : 생략 가능.유효한 Command 오브젝트,SQL 성명,테이블 이름,쿼리 이름을 지정
ActiveConnection:생략 가능.Connection 오브젝트 또는 접속 정보 문자열을 지정
CursorType:생략 가능.커서 타입을 정하기 위한 CursorTypeEnum 값을 지정
LockType: 생략 가능.록(동시 실행)의 종류를 정하기 위한 LockTypeEnum 값을 지정
Options:생략 가능

Source인수에는 접속중의 데이터베이스에 포함되는 테이블 이름이나 선택 쿼리 이름,SQL 이름을 지정할 수 있다. 다만 쿼리가 패러미터를 포함하고 있는 경우에는 이 방법으로는 레코드셋을 취득할 수 없다.또 아쿠숀 쿼리 이름을 지정한 경우에는 지정한 액션이 실행된다. 다만 이 경우도 레코드셋을 취득할 수 없다ADO는 다음의 4 종류의 커서 타입을 정의하고 있다.

동적 커서 - 다른 유저에 의한 추가,변경,및 삭제의 확인을 하거나,북마크를 사용하지 마시오.  Recordset 종류를 이동을 하거나 제공자가 북마크 를 지원하는 경우에는 북마크를 이용하는 것이 가능하다.

   

키 세트 커서 - 동적 커서와 같은 작용을 한다. 다만 다른 유저에 의한 레코드의 추가의 확인 및 다른 유저가 삭제한 레코드에의 액세스는 불가능하다. 다른 유저가 변경한 데이터는 표시할 수 있다.언제나 북마크를 사용할 수 있기 때문에 Recordset 안에서의 모든 종류의 이동이 가능하다.

   

정적 커서 - 데이터의 검색 또는 리포트의 작성에 사용하기 위한 레코드셋이 정적 카피를 제공한다.언제나 북마크를 사용할 수 있기 때문에 Recordset 안에서의 모든 종류의 이동이 가능하다.다른 유저에 의한 추가,변경 또는 삭제는 확인할 수 없다.

   

전방 스크롤 커서 - Recordset 안에서 전방향 스크롤만 가능하다.다른 유저에 의한 추가,변경 또는 삭제는 확인할 수 없다.Recordset 의 스크롤이 1 만으로 끝나는 경우에 이 커서를 사용하면 퍼포먼스가 향상된다.

   

정수

설명

adOpenDynamic

2

동적 형식의 커서를 엽니다.

adOpenForwardOnly

0

(기본값) 앞으로 전용 형식 커서를 엽니다.

adOpenKeyset

1

키 집합 형식의 커서를 엽니다.

adOpenStatic

3

정적 형식의 커서를 엽니다.

adOpenUnspecified

-1

커서 타입을 지정하지 않습니다.

◆CursorTypeEnum 값

   

   

정수

설명

adLockBatchOptimistic

4

공유 일괄 업데이트—즉시 업데이트 모드와 대조되는 일괄 업데이트 모드에 필요합니다.

adLockOptimistic

3

공유 잠금, 레코드별—공급자는 Update 메서드를 호출할 경우에만 레코드를 잠그는 공유 잠금을 사용합니다.

adLockPessimistic

2

독점 잠금, 레코드별—공급자는 레코드가 성공적으로 편집되도록 하기 위해 대개 편집을 시작하면 그 즉시 데이터 원본의 레코드를 잠급니다.

adLockReadOnly

1

기본값. 읽기 전용—데이터를 변경할 수 없습니다..

adLockUnspecified

-1

록 타입을 지정하지 않습니다.복제품의 경우,복제원과 동일 록 타입이 적용됩니다.

◆LockTypeEnum 값

【예】접속중의 데이터베이스에 포함되는「학생 명부」테이블을 참조한다.
(CN은 열려 있는 Connection 오브젝트)

Dim RS As ADOBD.Recordset
Set RS = New ADODB.Recordset
RS.Open "학생 명부",CN,adOpenstatic,adLockReadonly

Open 방법의 각인수는 Recordset 오브젝트의 속성이기도 하고,먼저 Recordset 오브젝트의 인수를 설정한 경우에는 Open 방법의 인수를 생략할 수 있다.

【예】접속중의 데이터베이스에 포함되는「학생 명부」테이블을 참조한다.
(CN은 열려 있는 Connection 오브젝트)

Dim RS As ADOBD.Recordset
Set RS = New ADODB.Recordset
RS.Sousce ="학생 명부"
RS.Activeconnection = CN
RS.CursorType = "adOpenstatic"
RS.LockType = "adLockReadonly"
RS.Open

  • 다이너셋의 레코드셋을 작성

    다이너셋의 Recordset 오브젝트는 선택 쿼리를 실행하고 취득한 레코드의 모임을 표현한다.Recordset 오브젝트의 Open 방법을 이용할 때 LockType인수를 adLockOptimistic으로 하면 편집 가능한 레코드셋을 취득하는 것이 가능하다.이 레코드셋은 VB으로 등록되고 있는 값을 갱신하거나 레코드를 추가·.삭제가 가능하고편집 결과는 레코드셋 아래에 있던 테이블에 반영된다.

    레코드셋의 최종 레코드보다도 뒤에 최신 레코드를 이동하면 Recordset 오브젝트의 EOF 속성의 값이 True가 된다.이것을 이용하여

       

    Do Until recordset.EOF

    ·

    ·

    recordset.MoveNext

    Loop

       

    위의 루프 구조를 작성하면 레코드셋에 포함되는 모든 레코드를 참조하는 것이 가능하다.

    【사용 예】

    Public Sub Exsample()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset

    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

    Do Until RS.EOF
    Debug.Print RS!학적 번호, RS!성명,RS!클래스
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

  • 테이블 타입의 레코드셋을 작성

    테이블 타입의 Recordset 오브젝트는 테이블에 등록되어 있는 레코드의 모임을 표현한다.신규에 레코드를 추가하거나 등록되어 있는 데이터를 갱신 할 수 있다.Open 방법의 options인수에 adCmdTableDirect을 지정하면 테이블 타입의 레코드셋을 작성할 수 있다.

    【사용 예】

    Public Sub Exsample()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset

    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic,adCmdTableDirect


    Do Until RS.EOF
    Debug.Print RS!학적 번호, RS!성명,RS!클래스
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

  • 스냅숏 타입의 레코드셋을 작성

    스냅숏 타입의 Recordset 오브젝트는 선택 쿼리를 실행하고 취득한 레코드의 모임이고 레코드셋의 내용 갱신은 할 수 없다.Open 방법의 cursortype인수를 adOpenStatic,,LockType인수를 adLockReadOnly으로 하면 스냅숏 타입의 레코드셋을 작성하는 것이 가능하다.

    【사용 예】

    Public Sub Exsample()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset

    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    RS.Open "학생 명부", CN, adOpenStatic, adLockReadOnly

    Do Until RS.EOF
    Debug.Print RS!학적 번호, RS!성명,RS!클래스
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

  • 읽기전용의 레코드셋을 작성

    Recordset 오브젝트의 Open 방법을 이용할 때 LockType인수를 adLockReadOnly으로 하면 읽어서 이해하고 전용의 레코드셋을 취득하는 것이 가능하다.이 레코드셋은 VB으로 갱신하는 것은 불가능하다.검색이나 Sorting 하고 교환 등 레코드를 갱신할 필요가 없는 경우에 이용한다.

    【사용 예】

    Public Sub Exsample()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset

    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    RS.Open "학생 명부", CN, adOpenKeyset, adLockReadOnly

    Do Until RS.EOF
    Debug.Print RS!학적 번호, RS!성명,RS!클래스
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

  • 특정의 레코드를 추출하고 레코드셋을 작성

    Recordset 오브젝트의 Open 방법의 Sousce속성에는 SQL 성명을 지정하는 것이 가능하다.SQL 성명을 이용하고 기존의 테이블에서 특정의 레코드만을 선택하고 레코드셋을 작성하는 것이 가능하다.

    【사용 예】

    Public Sub Exsample()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim SQL As String


    '접속
    Set CN = CurrentProject.Connection

    '레코드셋을 취득
    Set RS = New ADODB.Recordset
    SQL = "SELECT * FROM 학생 명부 WHERE 클래스 = 'TS'"
    RS.Open SQL, CN, adOpenKeyset, adLockOptimistic

    '확인
    Do Until RS.EOF
    Debug.Print RS!성명, RS!클래스
    RS.MoveNext
    Loop

    '종료
    RS.Close: Set RS = Nothing
    CN.Close: Set CN = Nothing
    End Sub

3.Connection 오브젝트의 Execute 방법 

Connection 오브젝트이고 Execute 방법을 사용하면 지정한 데이터베이스 안의 테이블 또는 쿼리의 내용을 참조하는 것이 가능하다.단지,이 방법으로 작성한 레코드셋은 전방 스크롤및 읽어서 이해하고 전용 커서가  된다.

【서식】Set recordset =connection.Execute (CommandText)

recordset: 열려 있는 Recordset 오브젝트
connection:열려 있는 Connection 오브젝트
CommandText:실행하는 SQL 성명,테이블 이름,쿼리 이름

CommandText인수에는 접속중의 데이터베이스에 포함되는 테이블 이름이나 선택 쿼리 이름,SQL 성명을 지정할 수 있다. 다만 쿼리가 패러미터를 포함하고 있는 경우는 이 방법으로는 레코드셋을 취득할 수 없다.또 아쿠숀쿼리 이름을 지정한 경우에는 지정한 액션이 실행된다. 다만 이 경우도 레코드셋을 취득할 수 없다.

【서식】connection.Execute 아쿠숀쿼리 이름

【사용 예】

Public Sub RsConnection()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = CN.Execute("학생 명부")

'확인
Do Until RS.EOF
Debug.Print RS!학적 번호, RS!성명
RS.MoveNext
Loop

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

4.Command 오브젝트의 Execute 방법

Command 오브젝트는 데이터베이스에 대하여 실행하는 커맨드를 정의한 오브젝트이다.Execute 방법을 이용하면 테이블을 참조하거나 쿼리나 SQL 성명을 실행하고 레코드셋을 취득하는 것이 가능하다.이 방법으로 취득한 레코드셋은 전방 스크롤 및 읽어서 이해하고 전용 커서가 된다.

【서식】Set recordset = command.Execute

recordset:열려 있는 Recordset 오브젝트
command:열려 있는 Command 오브젝트

Execute 방법을 실행하는 전에 CommandText속성과 ActiveConnection속성을 설정할 필요가 있다.CommandText속성에는 참조하는 테이블 이름,쿼리 이름,SQL 성명을 대입한다.또 ActiveConnection속성에는 커맨드를 실행하는 데이터베이스에의 접속 정보를 설정한다.

【사용 예】

Public Sub RsCommand()
Dim CN As ADODB.Connection
Dim CMD As ADODB.Command
Dim RS As ADODB.Recordset

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set CMD = New ADODB.Command
CMD.ActiveConnection = CN
CMD.CommandText = "학생 명부"
Set RS = CMD.Execute

'확인
Do Until RS.EOF
Debug.Print RS!학적 번호, RS!성명
RS.MoveNext
Loop

'종료
Set CMD = Nothing
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

Command 오브젝트의 CommandText속성에 아쿠숀쿼리 이름을 설정하고 Execute 방법을 실행하면 아쿠숀쿼리를 실행하는 것이 가능하다.아쿠숀쿼리는 레코드셋을 바꾸어 스미게 하지 않는다.

【서식】Command.Execute

Command:열려 있는 CommandObject

5. 폼의 레코드 소스에 레코드셋을 작성 

ADO의 Recordset 오브젝트에 폼의 레코드 소스를 대입 하는 것은 불가능하다.폼의 레코드 소스를 사용하고 VB에서 데이터베이스 조작을 하는 경우는 DAO의 Recordset 오브젝트를 사용한다

   

6. 폼에 Recordset 오브젝트의 내용을 표시한다.

작성한 ADO의 Recordset 오브젝트의 내용을 폼에 표시하는 것이 가능하다.단지 VB으로 편집 가능하다. 그러나 폼 위에서 편집하는 것은 불가능하다.

【사용 예】

Public Sub Sample()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'폼을 열다
DoCmd.OpenForm "F_테스트", acFormDS
Set Forms!F_테스트.Recordset = RS

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub