Download presentation
Presentation is loading. Please wait.
Published bySurya Hermawan Modified 5년 전
1
ADO컨트롤을 이용하여 데이터를 관리하는 방법과 데이터베이스내의 레코드들을 리포트 형식으로 출력하는 디자인 기능을 알아본다.
10. 데이터베이스 실무 ADO컨트롤을 이용하여 데이터를 관리하는 방법과 데이터베이스내의 레코드들을 리포트 형식으로 출력하는 디자인 기능을 알아본다.
2
ADO 객체(p.336) 9장까지 배운 데이터 객체는? 10장에서 배울 데이터 객체는?
DAO 객체 컨트롤인 Data Control (기본 컨트롤) 데이터 컨트롤은 세밀한 작업이나 데이터베이스 자체를 조작하는 등의 작업은 할 수 없음 10장에서 배울 데이터 객체는? ADO 객체 컨트롤인 ADODC (ADO DataControl) 데이터베이스를 파일 수준에서 다루지 않고 좀더 편하게 프로그래밍하기 위해 제공된 개체 데이터베이스와 응용 프로그램을 효과적으로 연결해주는 역할 담당 수원과학대학 컴퓨터정보과 1학년
3
ADO 객체(p.336) ADO 라이브러리 참조 방식에서 사용되는 하위 객체들 하위 객체 기능 Connection
데이터 파일의 경로나 데이터의 유형 등 데이터에 대한 연결 정보를 가진다. Command SQL과 같은 실행 명령문을 정의 Error 에러정보를 제공 Field 레코드의 열을 지정 Parameter Command 객체의 실행에 필요한 인수를 가진다. RecordSet 기본 테이블이나 Command의 결과로 선택된 레코드 집합을 가진다. 수원과학대학 컴퓨터정보과 1학년
4
ADO 객체(p.336) ADO객체의 주요속성 ConnectionString과 RecordSource를 반드시 지정해야 데이터베이스를 연결하여 사용가능 속성 기능 ConnectionString 데이터베이스 연결을 위한 연결 문자열 설정 RecordSource 테이블 이름이나 SQL문을 지정 CommandType Command나 RecordSource에 사용할 명령어 형식 지정 SQL사용시 adCmdText 테이블 이름 지정시 adCmdTable 모르면 adCmdUnknown Mode 레코드를 읽기 전용, 쓰기 전용, 읽기/쓰기 모드로 지정 수원과학대학 컴퓨터정보과 1학년
5
DataEnvironment 객체(p.337)
현재 프로젝트에서 사용되고 있는 각종 데이터 객체를 잘 사용할 수 있는 환경 제공 DataView : 데이터 객체들을 계층 구조로 정리 여러 개의 테이블과 많은 필드를 사용할 경우 유용 DataReport 객체(p.337) 일정한 양식을 갖춘 보고서를 데이터베이스와 연결하여 작성하는 작업을 하기 위한 도구 데이터베이스가 DataEnvironment 객체에 등록되어 있어야 함. 수원과학대학 컴퓨터정보과 1학년
6
데이터프로젝트로 시작(p.337~) ‘표준 EXE’가 아닌, ‘데이터 프로젝트’로 시작 자동으로 ADODC 추가
그리드, 리스트 등 기타 DB에 필요한 기능들이 한꺼번에 설정됨. 수원과학대학 컴퓨터정보과 1학년
7
DataEnvironment1은 ‘DataEnvironment1.Dsr’로 저장 직원목록 디자이너를 ‘직원목록.Dsr’로 저장
frmDataEnv => 인사관리 DataReport1 => 직원목록 파일 > 프로젝트 저장 인사관리 폼을 ‘인사관리.frm’으로 저장 DataEnvironment1은 ‘DataEnvironment1.Dsr’로 저장 직원목록 디자이너를 ‘직원목록.Dsr’로 저장 DataProject를 ‘인사관리.vbp’로 저장 수원과학대학 컴퓨터정보과 1학년
8
저장 이후 화면 (p.340) 수원과학대학 컴퓨터정보과 1학년
9
DB와 테이블 만들기(p.341~343) 추가기능 > 비주얼데이터 관리자> 파일 > 새파일
Microsoft Access > version 7.0 MDB 파일 이름 : 인사관리.mdb 데이터베이스창 > Properties > 오른쪽버튼 > 새테이블 작성 테이블 이름 : 인사테이블 필드 추가(p.343) 수원과학대학 컴퓨터정보과 1학년
10
DB와 테이블 만들기(p.341~343) 테이블 작성 > 인덱스(index) 설정 2018-12-08
수원과학대학 컴퓨터정보과 1학년
11
추가 > 자료를 넣고 > 새로 고침 기본 3개 정도 자료를 입력해 둔다. 2018-12-08
수원과학대학 컴퓨터정보과 1학년
12
필수로 check된 필드에 자료를 입력하지 않고 새로고침하여 자료 저장을 시도하면 다음과 같은 오류가 발생하게 된다.
수원과학대학 컴퓨터정보과 1학년
13
메뉴 만들기(p.349~350) 폼에 계층 메뉴를 구성한다. 단축키 설정 도구 > 메뉴편집기 이용
메뉴편집기 Caption에서 “&알파벳”을 하는 경우 Alt+첫알파벳으로 해당 메뉴를 실행시킬 수 있는 단축키가 설정됨 예) 편집(&File) ⇒ 편집(File) ⇒ Alt+F로 편집 메뉴 실행 하위 메뉴인 경우 메뉴편집기의 Shortcut기능을 이용 수원과학대학 컴퓨터정보과 1학년
14
탭만 들기(p.352~356) 프로젝트>구성요소 또는 Ctrl+T 기타 등등
Microsoft Tabbed Dialog Control 6.0 선택 SSTab을 폼에 배치 > 탭의 개수 조정 오른쪽 마우스 버튼>속성>Tab Count를 4로 설정 Tab의 Caption에 ‘&숫자’를 써서 숫자로 단축키(Alt+숫자)를 할당한다. 기타 등등 개인정보/업무정보/평가정보/급여정보 탭의 모든 입력 사항들에 맞추어 컨트롤을 배치한다. 수원과학대학 컴퓨터정보과 1학년
15
ADODC에 DB연결하기(p.357) ADODC = ActiveX Data Objects Data Control Adodc1
수원과학대학 컴퓨터정보과 1학년
16
ADODC에 DB연결하기(p.357) ① 하드디스크의 데이터베이스와 ADODC를 연결하는 작업
인사관리.mdb ② ADODC와 실제 화면에 보일 데이터구조를 연결하는 작업 수원과학대학 컴퓨터정보과 1학년
17
ADODC에 DB연결하기(p.357~361) HD의 DB와 ADODC 연결작업
Adodc1 속성 > ConnectionString > […]버튼 연결문자열 사용 선택 공급자 : Microsoft Jet 3.51 OLE DB Provider선택 연결 : […]버튼을 눌러 데이터베이스 선택 연결테스트 실행 > 성공 확인 Adodc1 속성 > RecordSource> […]버튼 명령형식 : 8-adCmdUnknown 명령텍스트(SQL) : “select * from 인사테이블 order by 사원번호” 입력 order by 필드 : 해당 필드를 오름차순으로 정렬 수원과학대학 컴퓨터정보과 1학년
18
ADODC에 DB연결하기(p.361~363) ADODC와 화면 데이터 연결작업
각 텍스트 박스 속성 > DataSource > Adodc1로 ex) 사원번호 속성 > DataSource > Adodc1 각 텍스트 박스 속성 > DataField > 각각에 맞는 필드 선택 ex) 사원번호 속성 > DataField > 사원번호 4개의 탭에 있는 모든 텍스트 박스 속성을 연결시켜야 함. 자기평가/1차평가/2차평가/총평점의 경우 DataFormat속성 > […]버튼 > ‘숫자’ 로 지정 > 소수 자릿수 2로 설정 수원과학대학 컴퓨터정보과 1학년
19
ADODC에 DB연결하기(p.364~366) 명령어버튼 생성 평가정보탭 > 총평점 연산 버튼 추가
급여정보 탭 > 기본급/수당/공제/상여금/실수령액 텍스트박스 > DataFormat > ‘통화’ 로 설정 급여정보 탭 > 실수령액 계산 버튼 추가 인사관리 폼 > Image 컨트롤 추가 Stretch : True (이미지가 크건 작건 사이즈에 맞추어 출력) 이미지는 DB로 관리하지 않고 별도 관리(datasource 나 datafield 속성 설정 안함) 아래에 텍스트상자 배치해서 파일 이름을 출력하도록 함. Enabled : False로 하여 읽기만 되게.. 수원과학대학 컴퓨터정보과 1학년
20
검색엔진 설정하기(p.367~369) 탭 컨트롤 아래에 프레임 컨트롤 삽입 Caption을 ‘검색엔진’으로 설정
ComboBox 컨트롤 삽입 > 이름:검색필드 > Text:성명 TextBox 컨트롤 삽입 > 이름 : 검색어 > Text : null CommandButton 삽입 > 이름 :검색 > Caption : 검색 DataGrid 컨트롤 삽입 > TabAction:2-dbgGridNavigation ⇒ 셀사이 이동 자유롭게 0-dbgControlNavigation : 탭으로 컨트롤 이동 1-dbgColumnNavigation : 컬럼 이동후 타 컨트롤로 이동 2-dbgGridNavigation : 탭의 이동을 그리드로 한정시킴 TabAcrossSplits : True ⇒ 셀 자료 복사 및 붙이기 가능 수원과학대학 컴퓨터정보과 1학년
21
코딩하기(p.370~371) 코딩 하기 이전 실행 Form_Load 코딩
ADODC와 탭의 자료들이 연결된 상태이므로 입력해 놓은 3개의 자료를 미리 볼 수 있다. Form_Load 코딩 Private Sub Form_Load() 검색필드.AddItem "사원번호“ ‘ 검색엔진 콤보박스에 항목추가 검색필드.AddItem "성명" 검색필드.AddItem "성별" 검색필드.AddItem "나이" 검색필드.AddItem "현주소" 검색필드.AddItem "소속" 검색필드.AddItem "직급" 보기모드_Click ‘처음 실행시 보기 모드로 설정 End Sub 수원과학대학 컴퓨터정보과 1학년
22
코딩하기(p. 371~373) 보기모드_Click 입력비활성 입력활성 입력비활성 : 입력버튼들을 비활성화 시키는 함수
모든 입력 가능 텍스트박스의 Enabled 속성을 False로 DataGrid1의 AllowAddNew/AllowDelete/AllowUpdate도 False로 입력활성 입력비활성에서 비활성화 했던 것을 모두 원복시킴 수원과학대학 컴퓨터정보과 1학년
23
코딩하기(p. 374) Adodc1_MoveComplete End Sub
If Adodc1.Recordset.EOF = True Or Adodc1.Recordset.BOF = True Then Beep : EOF이거나 BOF이면 삑 소리를 내고 끝냄 Exit Sub End If Adodc1.Caption = Str(Adodc1.Recordset.Bookmark) + "/" + Str(Adodc1.Recordset.RecordCount) : Adodc1에 레코드위치 텍스트로표시 On Error Resume Next Image1.Picture = LoadPicture(App.Path & "\sajin\" & Adodc1.Recordset("성명") & ".jpg") : sajin폴더의 해당 이름.jpg으로 저장된 사진을 가져옴 Text1.Text = Adodc1.Recordset("성명") : 사진밑에 이름을 보여줌 End Sub 수원과학대학 컴퓨터정보과 1학년
24
코딩하기(p. 375-추가) DataGrid1 설정 변경 오른쪽 버튼 > 필드검색 오른쪽 버튼 > 편집
기존의 모눈 레이아웃을 새 필드 정의로 바꾸시겠습니까? > 예 선택 오른쪽 버튼 > 편집 필드들의 넓이를 자유롭게 설정 수원과학대학 컴퓨터정보과 1학년
25
코딩하기(추가 ) 자료 입력시 엔터를 치면 바로 다음 필드를 입력할 수 있게 포커스 이동 기능
‘ _KeyDown 이벤트는 키보드가 눌려졌을 때 발생함 Private Sub 사원번호_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then ‘ 눌려진 키가 엔터키인 경우 주민번호.SetFocus ‘ 주민번호로 마우스 포인터 이동 End If End Sub 수원과학대학 컴퓨터정보과 1학년
26
코딩하기(추가 ) 자료 입력과 동시에 DB에 업데이트 되도록 설정
Private Sub 사원번호_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Adodc1.Recordset("사원번호") = 사원번호.Text 주민번호.SetFocus End If End Sub 수원과학대학 컴퓨터정보과 1학년
27
코딩하기( 추가) 주민등록번호를 이용하여 현재의 실제 나이를 계산하는 루틴 추가 Private Function 나이계산()
Dim age As Integer Dim birthyear As Integer If (Mid(주민번호.Text, 7, 1) = "1" Or Mid(주민번호.Text, 7, 1) = "2") Then birthyear = Val(Left(주민번호.Text, 2)) Else birthyear = Val(Left(주민번호.Text, 2)) End If age = Year(Date) - birthyear ‘ Year(Date) : 오늘 날짜의 연도 나이.Text = age ‘ 텍스트박스에 출력 Adodc1.Recordset("나이") = age ‘실제 테이블에 데이터 넣기 End Function 만 나이를 계산할 수 있도록 수정해보기!!! (현재 날짜와 생일을 비교계산해야 함) 수원과학대학 컴퓨터정보과 1학년
28
코딩하기(추가) 주민번호 오류 검사 Private Function 주민번호오류() As Boolean
‘ 남녀성별/월/일에 대한 오류 검사 If (Val(Mid(주민번호, 7, 1)) < 1 Or Val(Mid(주민번호, 7, 1)) > 4 Or _ Val(Mid(주민번호, 3, 2)) < 1 Or Val(Mid(주민번호, 3, 2)) > 12 Or _ Val(Mid(주민번호, 5, 2)) < 1 Or Val(Mid(주민번호, 5, 2)) > 31) Then MsgBox "주민번호형식이 맞지 않습니다." + vbCrLf + "다시 입력해주세요.", _ vbCritical + vbOKOnly, "오류검사" 주민번호.Text = "" 주민번호.SetFocus 주민번호오류 = True Else 주민번호오류 = False End If End Function 주민번호 7번째 자리를 이용하여 성별이 자동으로 나오게 수정해보기!!! (남/여) 수원과학대학 컴퓨터정보과 1학년
29
코딩하기(추가) 주민번호 키다운 이벤트 수정
Private Sub 주민번호_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then If (주민번호오류 = False) Then ‘ 주민번호 오류가 없는 경우 Adodc1.Recordset("주민번호") = 주민번호 나이계산 성명.SetFocus End If End Sub 수원과학대학 컴퓨터정보과 1학년
30
코딩하기(추가) 평가 점수 각 항목마다 점수가 수정될때 총평점연산을 바로하도록 수정(자기평가, 평가1, 평가2)
Private Sub 자기평가_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Adodc1.Recordset("자기평가") = 자기평가 평가1.SetFocus If (Val(평가1) And Val(평가2) And Val(자기평가) <> 0) Then 총평점연산_Click End If End Sub 여기서의 And는 비트연산자 수원과학대학 컴퓨터정보과 1학년
31
코딩하기(추가) 기본급 등이 변경될 경우 바로 실수령액을 재계산하도록 수정(기본급,수당,공제,상여금)
Private Sub 기본급_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Adodc1.Recordset("기본급") = 기본급 수당.SetFocus If (기본급 <> "" And 수당 <> "" And 공제 <> "" And 상여금 <> "") Then 실수령액계산_Click End If End Sub 여기서의 And는 논리연산자 수원과학대학 컴퓨터정보과 1학년
32
출력 형식의 변환 탭에서 보여지듯이 DataGrid1의 서식도 바꾸자. DataGrid1 오른쪽 버튼> 속성
레이아웃 탭 : 숫자 표현식들은 모두 오른쪽 정렬로 변경 서식탭 : 평가 정보 항목들(자기평가, 1차평가, 2차평가,총평점)은 소수점 2자리까지 있는 숫자로 변경 급여정보 항목들(기본급, 수당, 공제, 상여금, 실수령액)은 통화로 변경 글꼴 > HeadFont > 효과 : 굵게를 체크 DataGrid1 오른쪽 버튼 > 편집 전체 필드들을 편집할 수 있게 된다. 각 필드들을 기호에 맞게 크기 조절을 해보자. 분할 : 화면을 분할하여 이름/사원번호를 왼쪽에 항상 보이게 할 수 있다. 수원과학대학 컴퓨터정보과 1학년
33
코딩하기(p. 376~379) Private Sub 레코드추가_Click() End Sub
입력활성 ‘ 초기에 비활성된 입력상자들 활성화 Adodc1.Recordset.AddNew ‘ 새로운 레코드를 추가 사원번호.SetFocus ‘ 사원 번호로 포커스 이동 End Sub Private Sub 수정모드_Click() 입력활성 Private Sub 레코드삭제_Click() Adodc1.Recordset.Delete ‘현재레코드삭제 Private Sub 검색모드_Click() 검색필드.SetFocus ‘검색필드로 포커스 이동 수원과학대학 컴퓨터정보과 1학년
34
코딩하기(p.380) Private Sub 검색_Click() End Sub
Adodc1.RecordSource = "select * from 인사테이블 where " + 검색필드.Text + " like '%" + 검색어.Text + "%' order by 사원번호;“ select * from 인사테이블 ‘ 인사테이블로 부터 모든 필드 추출 where 검색필드 like %검색어% ‘ 검색필드(사원번호/성명등등)가 검색어를 포함하는 경우 order by 사원번호; ‘ 사원번호 순으로 정렬 예) select * from 인사테이블 where 현주소 like ‘%수원%’; Adodc1.Refresh ‘ 질의 수행 End Sub 수원과학대학 컴퓨터정보과 1학년
35
코딩하기(추가) Private Sub 검색어_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then ' 엔터키를 눌렀다면 검색_Click End If End Sub 수원과학대학 컴퓨터정보과 1학년
36
코딩하기(p.383) Private Sub 재계산_Click() End Sub
If 실수령액.Enabled = False Or 총평점.Enabled = False Then MsgBox "보기모드에서는 연산할 수 없습니다." Exit Sub End If 실수령액 = Adodc1.Recordset("기본급") + Adodc1.Recordset("수당") + Adodc1.Recordset("상여금") - Adodc1.Recordset("공제") 총평점 = (Adodc1.Recordset("자기평가") + Adodc1.Recordset("1차평가") + Adodc1.Recordset("2차평가")) / 3 End Sub 수원과학대학 컴퓨터정보과 1학년
37
코딩하기(p.383) Private Sub 총평점연산_Click() End Sub
If 총평점.Enabled = False Then MsgBox "보기모드에서는 연산할 수 없습니다." Exit Sub End If 총평점 = (Adodc1.Recordset("자기평가") + Adodc1.Recordset("1차평가") + Adodc1.Recordset("2차평가")) / 3 End Sub 수원과학대학 컴퓨터정보과 1학년
38
코딩하기(p.383) Private Sub 실수령액계산_Click() End Sub
If 실수령액.Enabled = False Then MsgBox "보기모드에서는 연산할 수 없습니다." Exit Sub End If 실수령액 = Adodc1.Recordset("기본급") + Adodc1.Recordset("수당") + Adodc1.Recordset("상여금") - Adodc1.Recordset("공제") End Sub 수원과학대학 컴퓨터정보과 1학년
39
코딩하기(p.384~7) 입력 오류 시 Private Sub 테이블보기_Click() End Sub
오류 창이 열리고 원래 자료로 원상복구됨. Private Sub 테이블보기_Click() 전체테이블.Show End Sub 수원과학대학 컴퓨터정보과 1학년
40
코딩하기(p.388~390, 추가) Private Sub 재직증명서발급_Click() End Sub
재직증명서.Show End Sub Private Sub 직원명단출력_Click() 직원목록.Show Private Sub 종료_Click() Dim answer As Integer answer = MsgBox("정말 종료하시겠습니까?", vbQuestion + vbYesNo, "종료확인") If answer = vbYes Then Unload Me End If 수원과학대학 컴퓨터정보과 1학년
41
코딩하기(p.391) Private Sub 사용법및단축키_Click() End Sub
frmTip.Show End Sub Private Sub 인사관리정보_Click() 정보.Show 수원과학대학 컴퓨터정보과 1학년
42
필요한 화면만들기 (p.391~402) 로고 화면 폼 추가 > 새파일 >시작화면 2018-12-08
수원과학대학 컴퓨터정보과 1학년
43
필요한 화면만들기 (오류수정-필수) 도움말창 출력 변경 Private Sub imgLogo_Click()
Dim ShowAtStartup As Long ' 시작 시 표시할 것인지를 확인합니다. ShowAtStartup = GetSetting(App.EXEName, "Options", "시작 시 이 화면 표시", 1) If ShowAtStartup = 1 Then ‘ 시작시 도움말 보여주기를 check한 경우 Unload Me 인사관리.Show frmTip.Show ‘ frmTip을 인사관리 위에 보여준다. Else ‘ 시작시 도움말 보여주기를 uncheck한 경우 End If End Sub Form_KeyPress와 Frame1_Click에 대해서도 동일하게 수정해준다. 수원과학대학 컴퓨터정보과 1학년
44
필요한 화면만들기(p.403~405) 도움말 팁 화면 만들기 (frmTip) 2018-12-08
수원과학대학 컴퓨터정보과 1학년
45
필요한 화면만들기(오류수정-필수) Form_Load에서의 오류 수정 시작시 표시 검사를 레지스트리에서 읽어와
Private Sub Form_Load() Dim ShowAtStartup As Long ' 시작 시 표시에 대해 정보를 읽어와 화면에 적용. ShowAtStartup = GetSetting(App.EXEName, "Options", "시작 시 이 화면 표시", 1) If ShowAtStartup = 1 Then ‘ 레지스트리에 check되어 있는 경우 화면에 check표시 Me.chkLoadTipsAtStartup.Value = vbChecked End If ' Rnd를 시작합니다. Randomize ' 팁 파일을 읽어서 임의의 팁을 표시합니다. If LoadTips(App.Path & "\" & TIP_FILE) = False Then lblTipText.Caption = TIP_FILE & " 파일을 찾지 못했습니까? " & vbCrLf & vbCrLf & _ TIP_FILE & " 파일을 [메모장]을 사용하여 한 줄에 한 팁씩 작성한 후 " & _ "해당 응용 프로그램이 있는 디렉터리에 복사하십시오." End If End Sub 시작시 표시 검사를 레지스트리에서 읽어와 도움말화면 출력시 표시 수원과학대학 컴퓨터정보과 1학년
46
필요한 화면 만들기(p.407~ 415) 데이터 폼 마법사를 이용하여 인사테이블보기
폼추가 > VB데이터폼 마법사 > Access > DB선택 폼이름 : 전체테이블 폼 레이아웃 : 표 형태(데이터시트) 바인딩 형식 : ADO data 컨트롤 레코드원본 : 인사테이블 >> : 모든 필드를 추가 정렬기준열 : 사원번호 생성후 그리드의 속성을 편집 모드로 설정후 사원번호,성명,입사일, 직급, 소속, 특기사항, 자기평가, 1차평가, 2차평가, 총평점을 제외한 다른 필드를 삭제 한 화면에 나올 수 있도록 크기 조정 수원과학대학 컴퓨터정보과 1학년
47
보고서 출력하기(p.416~426) 직원 목록 생성 DataEnvironment의 직원목록 폼 Connection
DataSource = DataEnvironment1 DataMember = 인사테이블 DataEnvironment의 Connection 인사관리.mdb DataView 인사테이블 기본급, 수당, 공제, 실수령액, 상여금의 서식을 “통화”로 설정해보자 수원과학대학 컴퓨터정보과 1학년
48
보고서 출력하기(p.416~426) 재직증명서 만들기 프로젝트 > DataReport추가 이름 : 재직증명서
DataSource : DataEnvironment1 DataMember : 인사테이블 GridX/GridY : 5 회사 로고를 만들어 재직증명서 및 직원명단에 워터마크로 출력해보자 수원과학대학 컴퓨터정보과 1학년
Similar presentations