본문 바로가기

Languages/Visual Basic

VB - 고급 데이터 베이스 작성하기 [1]



ADO(ActiveX Data Object) 개체


▶ADO 개체는 엑세스, 오라클, 인포믹스 등의 데이터베이스에 접근할 수 있는 기반을 제공합니다. 
▶ADO 개체를 이용하려면 반드시 Microsoft ActiveX Data Objects 라이브러리를 참조하여야 합니다. 
▶Microsoft ActiveX Data Objects 2.x Library에서 2.x의 의미는 2.1~2.5 중 하나만을 선택함을 의미합니다.

▶만일 여러 개를 한 번에 선택하면 충돌 발생하게 되고, 앞에서 배운 ADO 데이터 컨트롤을 사용하는 경우에는 ADODB(Microsoft ActiveX Data Objects)가 자동으로 추가됩니다.



▣ADO 개체와 데이터베이스 연결하기

  • 1단계 : ADODB 참조하기 
    • 비주얼베이직의 ADO 개체를 사용하여 데이터베이스에 연결하기 위하여는 ADODB(Microsoft ActiveX Data Objects)을 사용하여야 하는데 그러기 위해서는 앞에서 설명한데로 「프로젝트」-> 「참조」를 선택하고 대화창이 나오면 「Microsoft ActiveX Data Objects 2.x」을 선택
  • 2단계 : ADODB의 연결 개체 만들기
    • ADO개체를 데이터베이스에 연결하려면 ADODB의 Connection 개체를 다음과 같이 정의하여 사용해야 합니다. 그 방법으로는 다음과 같은 3가지 방법이 있는데 모두 동일한 뜻입니다.

    • 방법 1 : Cn 이라는 변수를 ADODB.Connection 개체 형태로 선언하고 설정하는 의미이며, 방법 2를 기억하고 사용하면 됩니다.


ADO(ActiveX Data Object) 개체 - 실습 1


▣ADO 개체를 사용하여 Access 유형의 데이터베이스 연결하기

데이터베이스는 PhoneBookII.mbd 를 사용합니다.

1239235764_PhoneBookII.mdb

 1239235764_PhoneBookII.mdb

























▣ADO 개체와 여러 유형의 데이터베이스와 연결

  • 다양한 데이터베이스를 사용할 때는 데이터베이스를 연결하여 주는 표준 방식이 필요하며, 마이크로소프트사에서 제공하는 ODBC를 통하여 연결하면 됩니다.
  • 마이크로소프트사에서 제공하는 OLE DB 라는 새로운 데이터베이스를 연결 방식이며, ADO 개체로 연결하는 방법은 OLE DB 에 의한 방법과 ODBC를 이용하는 방법이 있습니다.




▣OLE DB(Object Link Embeded DataBase)에 의한 연결

  • 데이터베이스 제작사에서 마이크로소프트사에서 표준으로 한 OLE DB를 지원하면 바로 ADO를 연결할 수 있으나, 그렇지 않은 경우에는 한 단계를 더 거쳐 ODBC를 사용하여 ADO에 연결하여야 합니다.

▣OLE DB 공급자에 의한 연결

▣ODBC(Open DataBase Connectivity)에 의한 연결

  • OLE DB가 제공되지 않는 경우에는 마이크로소프트사에서 과거에 표준화하여 사용하였던 ODBC(Object Database Connectivity)를 사용하여 외부의 데이터베이스와 연결할 수 있습니다.

▣ODBC 드라이버로 연결하기 (방법2) - 방법 1은 패스 ㅡ.,ㅡ

  • Private cn As New ADODB.Connection 
    Private Sub Form_Load() 
    ≈≈≈≈≈ 
    cn.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);" _ 
    &"DBQ=C:\VBDB\PhoneBookI.mdb" 
    cn.Open 
    ≈≈≈≈≈≈≈ 
    End Sub 
  • = 주의 사항 =
  • "Driver=Microsoft Access Driver (*.mdb); DBQ=C:\VBDB\PhoneBookI.mdb"에서
    띄어쓰기와 붙여쓰기는 반드시 준수하여야 합니다.

▣ODBC 파일 데이터 원본으로 연결하기(방법3)

  • 이 방법은 우선 윈도우에서 udl확장자를 가진 파일을「탐색기」에서 다음과 같은 순서로 만들어 PhoneBookI.mdb와 연결하여야 합니다.
  • 메모장을 열어서 파일명을 ”PhoneBook_UDL.udl“로 저장하고 그 파일을 더블 클릭하여 디비연결 순서를 진행하면 됩니다.
  • 이렇게 작성된 .udl 파일은 다음과 같이 설정하여 사용하면 된다.

Private cn As New ADODB.Connection

Private Sub Form_Load() 
≈≈≈≈≈ 
cn.ConnectionString = "File Name=C:\VBDB\PhoneBook_UDL.udl" 
cn.Open 
≈≈≈≈≈≈≈
End Sub

▣ADO 개체와 테이블 연결하기

  • ADODB의 Recordset을 이용하여 테이블 연결

Private cn As ADODB.Connection
Private rs As ADODB.Recordset


Set cn = New ADODB.Connection 
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" _ 
&"Data Source=C:\VBDB\PhoneBookI.mdb" 
Set rs = New ADODB.Recordset 
rs.Open "Person", cn, adOpenStatic, adLockOptimistic

  • ADODC와 DataEnvironMent의 Command 에도 Cursor Type과 Lock type 속성이 있습니다.

▣Open 형식 (CursorType)

  • 이것을 사용하면 Recordset 개체를 열 때 사용할 커서 형식을 지정할 수 있는데, 나의 Recordset이 닫혀 있을 경우 다른 사용자의 CursorType 속성은 읽기/쓰기가 모두 가능하며 열려 있을 경우는 읽기 전용입니다.
  • 커서 타입은 아래의 4가지 있습니다.
    • adOpenStatic 정적 커서
      • 데이터를 찾거나 보고서를 작성하기 위해 사용할 수 있는 레코드 집합의 정적 사본에 해당된다. 다른 사용자가 추가한 내용이나 변경한 내용 또는 삭제한 내용을 그 즉시 볼 수는 없으나 빠른 데이터베이스 접근이 가능합니다.
    • adOpenForwardOnly 앞으로 전용 커서, 기본 값 
      • 레코드 사이를 이동할 때 앞으로만 스크롤할 수 있다는 점만 제외하면 정적 커서와 동일합니다. 이 커서를 사용하면 레코드 집합에서 한 칸씩만 지나가야 하는 경우 매우 빠르게 이동할 수 있습니다.
    • adOpenDynamic 동적 커서
      • 다른 사용자가 추가한 내용이나 변경한 내용 및 삭제한 내용을 즉시 볼 수 있습니다.
    • adOpenKeyset 키 집합 커서
      • 이 커서는 동적 커서와 비슷하게 동작하지만 다른 사용자가 추가한 레코드는 볼 수 없으며 다른 사용자가 삭제한 레코드를 액세스할 수 없다. 그러나 다른 사용자가 변경한 데이터는 볼 수 있습니다.

▣Lock Type

  • 이 속성은 사용자가 데이터베이스에 접근하여 데이터를 편집하는 동안 레코드에 설정된 잠금 형식을 나타냅니다. 잠금 형식으로 adLockReadOnly, adLockPessimistic, adLockOptimistic, 등이 있으며 각각의 속성은 아래와 같습니다.
    • adLockReadOnly
      • 표시를 하지 않을 경우에는 이 값이 기본값으로 설정되며, 읽기 전용으로 사용자는 데이터를 변경할 수 없습니다.
    • adLockOptimistic
      • 레코드별로 공유(일부) 잠금, 즉 현재 사용하는 레코드 만을 잠그므로, 제공자는 Update 메서드를 호출할 경우에만 레코드가 잠기므로, 다른 사용자는 다른 레코드를 사용할 경우 사용이 허락된다. 그러나 adLockPessimistic은 전혀 허용되지 않습니다.
    • adLockPessimistic
      • 레코드별로 독점(모두) 잠금으로 제공자는 레코드가 성공적으로 편집되도록 하기 위해 편집을 시작하면 그 즉시 데이터 원본의 레코드를 잠그므로 편집을 하는 동안에 다른 사용자가 그 테이블에 전혀 접근 할 수 없습니다.

ADO 개체와 테이블 연결하기 - 실습 2


▣다음 실습은 PhoneBookI.mdb 를 사용합니다.

1239235764_PhoneBookI.mdb

 1239235764_PhoneBookI.mdb







[소스]

Private cn As ADODB.Connection

Private rs As ADODB.Recordset

Private Sub Command1_Click() '버튼 클릭

Set rs = New ADODB.Recordset

rs.Open "Person", cn

For i = 0 To 2

Print rs.Fields(0), rs.Fields(1)

rs.MoveNext

Next i

End Sub

Private Sub Form_Load()

On Error GoTo ERR

Set cn = New ADODB.Connection

cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\★강의자료모음\3학년 1학기-DP-A\DB응용개발도구\VBDB\PhoneBookI.mdb;Persist Security Info=False"

cn.Open

MsgBox "PhoneBookI.mdb 데이터베이스에 연결되었습니다"

Exit Sub

ERR:

MsgBox (ERR.Number & Chr(13) & ERR.Description)

End

End Sub

Private Sub Form_Unload(Cancel As Integer)

rs.Close 'rs 개체를 닫습니다

cn.Close 'cn 개체를 닫습니다

Set rs = Nothing 'rs 개체를 메모리에서 제거합니다

Set cn = Nothing 'cn 개체를 메모리에서 제거합니다

End Sub