본문 바로가기

Languages/Visual Basic

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



관계형 두 테이블에 데이터 추가하기


▣RecordSet의 Find메소드(p438)

  • Find (criteria, [SkipRows], [searchDirection], [start])
  • 매개 변수
    • criteria : 열 이름, 비교 연산자, 검색에 사용할 값을 지정하는 문을 포함하는 문자열이며 데이터 형식은 String
    • SkipRows옵션. 현재 행으로부터의 거리를 지정하거나 검색을 시작할 행번호를 지정. 기본값은 0이고 데이터 형식은 Long
    • searchDirection옵션. 검색방향 지정 adSearchForward 또는 adSearchBackward를 사용. 검색은 searchDirection 값에 따라 레코드 집합의 맨 앞이나 맨 뒤에서 중지합니다.
    • start옵션. 검색을 시작할 위치로 사용되는 행번호.

▣고급 데이터베이스 작성하기 [4] 에서 이어지는 내용입니다.

PhonebookII.mdb 파일을 이용하여, 새로운 데이터를 입력하고, 입력된 데이터를 저장할 수 있도록 만들어 봅니다.

★디자인


▲ [1] 위의 화면과 같이 디자인 합니다.


▲ [2] 데이터리포트를 추가하고 위와같이 디자인 합니다.




▲ [3] 나중에 추가할 데이터리포트의 소스에서 참고할 부분은 위와 같습니다.

☆필드명이 잘 못되어 있네요. 대충 넘어가셈..........-_-;;;;;;;;;;




▲ [4] 최초 실행화면 입니다.




▲ [5] 데이터를 입력하면 각 텍스트필드가 열리게 되고 입력이 가능합니다.




▲ [6] 빈공간이 있을 경우 입력할 수 없습니다.




▲ [7] 입력확인




▲ [8] 인쇄는 모달폼으로 열리게 설정되어 있습니다.

★추가된 소스 (Form1)

Private str1 As String '새로운 변수 지정

Private Sub Command5_Click() '데이터 추가

MyText1.Text = ""

MyText1.Locked = False

MyText2.Text = ""

MyText2.Locked = False

DataCombo1.Locked = False

MyText1.SetFocus

End Sub

Private Sub Command6_Click() '데이터 저장

Dim condition As String

str1 = DataCombo1.Text

If Trim(MyText1.Text) = "" Then

MsgBox "이름이 없어 입력이 않됩니다."

Exit Sub

Else

rs.AddNew

rs!Name = MyText1.Text

rs!tel = MyText2.Text

If Option1.Value = True Then

rs!sex = "M"

Else

rs!sex = "F"

End If

condition = "type = '" & Trim(str1) & "'"

rsc.MoveFirst

rsc.Find condition, , adSearchForward

If Not rsc.EOF = True Then

rs!occupid = rsc!id

Else

rs!occupid = 1

End If

rs.MoveLast

End If

MsgBox "입력이 완료되었습니다"

MyText1.Locked = True

MyText2.Locked = True

DataCombo1.Locked = True

End Sub

Private Sub Command7_Click() '삭제클릭

If (MsgBox("삭제된 데이터는 복구할 수 없습니다\n 정말로 삭제하시겠습니까?", vbOKCancel, "삭제경고") = vbOK) Then

rs.Delete

Else

Exit Sub

End If

rs.MoveNext

If rs.EOF = True Then

rs.MoveLast

End If

MyText1.Text = rs.Fields("Name")

MyText2.Text = rs.Fields("Tel")

s1 = rs.Fields("sex")

If s1 = "M" Then

Option1.Value = True

Else

Option2.Value = True

End If

End Sub

Private Sub Command8_Click() '종료클릭

Unload Me

End

End Sub

Private Sub DataCombo1_Click(Area As Integer) '데이터콤보를 클릭

str1 = DataCombo1.Text

End Sub

Private Sub Picture1_Click() '인쇄

DataReport1.Show

End Sub

★추가된 소스 (DataReport1)

Private Sub DataReport_Initialize()

Dim rsSQL As String

On Error GoTo Err_Area

Set cn = New ADODB.Connection

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

cn.Open

Set rs = New ADODB.Recordset

rsSQL = "SELECT name, sex, tel, type FROM Person, PersonType " _

& "WHERE Person.occupid = PersonType.id"

rs.CursorLocation = adUseClient

rs.Open rsSQL, cn, adOpenStatic

Set DataReport1.DataSource = rs

Exit Sub

Err_Area:

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

End

End Sub

실습 페이지 438 까지.