본문으로 바로가기
하나도 몰라도 되는 - #8 (폼) - 내가 원하는 내용 구현하기 6 - 바보처럼코딩하기

하나도 몰라도 되는 - #8 (폼) - 내가 원하는 내용 구현하기 6

반응형

이번 회차에서는 간단하게 리스트를 이용해보려고 합니다.

가장 기본적으로 리스트를 사용해보겠습니다.

 

양식 디자인 > 목록 상자 (리스트) 클릭

폼 본문에 클릭하면 아래와 같이 나오는데

취소 누르시고 list27 레이블 선택한 뒤 del로 삭제해 줍니다.

 

 

리스트를 선택해주고, 리스트 이름을

(위의 그림속 레이블에 있는 이름으로 되어 있을 겁니다.

여기서는 list27, 다르게 나오는게 당연하니 여기에 집중하실 필요 없습니다.)

'리스트'라고 변경해 주겠습니다.

 

 

컨트롤의 이름 변경은 속성시트에서 하던대로 하시면 됩니다.

아래와 같이 형식에서 열 개수를 9개

(위에서 생성한 필드의 갯수는 9개 라서 다 보이려고 합니다.)

그리고 열이름을 '예'로 변경해주세요.

 

 

대충 아래와 같이 모양을 잡고 (나중에 또 조절합니다. 대충하세요)

 

 

속성시트에서 행원본 드랍다운 화살표 누르고 t_사업자정보 (테이블 이름)을 선택해줍니다.

 

 

디자인 모드에 열린 테이블은 우선 닫아주고

폼을 폼 보기로 열어줍니다. 아래 그림과 같이 테이블의 내용이 보이게 됩니다.

 

 

수정과 삭제 이전에 우리는 고유 번호를 가 필요합니다.

 

마치 학교에서 선생님이 3번~ 이렇게 부르면 3번이 네~ 하고 대답하듯 각 데이터별로 고유 번호(중복안됨)가 있는데 그게 우리가 일련번호로 자동 생성한 ID입니다.

 

(폼을 이쁘게 만드는건 나중 일이니, 가장 기본 상태에서 계속 진행하겠습니다.)

 

수정과 삭제로 변화

작업의 개요는

1) 리스트를 클릭하면

2) 우리가 데이터의 번호를 받아와서

3) 그 번호로 나머지 수정이나 삭제 작업을 하는 과정입니다.

 

 

아래와 같이 클릭하면 3이 ID에 들어가고

그 밑에 줄을 클릭하면 4가 들어가는 작동을 구현하겠습니다.

 

 

디자인 보기에서

리스트 클릭 > 속성시트에서 > 이벤트 > after update > ... > 코드 작성기 선택 > 확인

 

 

결과

 

 

이런 코드 칸이 나오고 여기에 아래의 코드를 적습니다.

Private Sub 리스트_AfterUpdate()
Me.ID = 리스트

End Sub

저장을 하고 리스트를 클릭합니다.

아래와 같이 리스트에서 3이 있는 줄을 선택하면 3이 ID에 나타나고

4가 있는 줄을 선택하면 ID에 4가 나타납니다.

 

 

 

이제 조금 더 접근하기 쉬운 삭제부터 진행하겠습니다.

디자인 보기에서 삭제 버튼 클릭후 F7버튼으로 VBA창을 엽니다.

Private Sub 삭제_Click()

CurrentDb.Execute "delete * from t사업자정보 where id = " & Me.ID & " ", dbSeeChanges

End Sub

 

우선 이 코드를 넣고, 아직까지는 매번 테이블을 닫았다가 열어서 봤지만

이제 저장과 삭제 초기화 부분에 리스트가 입력 저장후에 다시 보이게끔 코드를 넣겠습니다.

 

Private Sub 초기화_Click()
ID = Null
상호 = Null
대표자 = Null
사업자등록번호 = Null
업태 = Null
업종 = Null
부가세이메일 = Null
전화 = Null
팩스 = Null

Me.리스트.Requery

End Sub

 

위의 코드와 같이 초기화 버튼 코드 하단에

me.리스트.requery 를 넣고

아래와 같이 삭제와 저장 하단에 초기화_click을 넣습니다.

 

Private Sub 삭제_Click()

CurrentDb.Execute "delete * from t사업자정보 where id = " & Me.ID & " ", dbSeeChanges

초기화_Click

End Sub
Private Sub 저장_Click()

CurrentDb.Execute "insert into t사업자정보 (상호,대표자,사업자등록번호,업태,업종,부가세이메일,전화,팩스)  values ( " & _
"'" & 상호 & "','" & 대표자 & "','" & 사업자등록번호 & "','" & 업태 & "','" & 업종 & "','" & 부가세이메일 & "','" & 전화 & "','" & 팩스 & "') ", dbSeeChanges

초기화_Click

End Sub

 

여기까지 됐으면 

상호에 아무거나 하나 넣고 저장을 진행해보겠습니다.

 

 

이제 7번 줄을 선택하고 삭제를 눌러봅니다.

 

 

아래와 같이 잘 작동합니다. 삭제가 잘 됐군요.

 

 

테이블을 매번 확인 안하려고 리스트를 만들었지만 이쯤에 테이블을 확인해보겠습니다.

 

 

자 이제~ 수정을 좀 해봐야겠는데요.

뭔가 이벤트나 코드를 만들때는 나름의 상황을 설정하는게 좋습니다. 

코딩은 원래 책상에서만 하는게 아니라, 업무를 관찰해서 그걸 코드로 녹이는 과정입니다.
업무 패턴과 경우의 수에 대해서 무수히 많은 관찰이 들어 있어야, 활용도가 높고 에러가 적은 프로그램이 만들어 지겠지요?

제가 설정한 상황은 
고객에서 정보를 받았는데, 전부 다 한번에 일일이 내가 원하는 만큼 주지 않는다는 상황이 전제로 깔려 있습니다.
이후에 추가 정보를 받았고, 게다가 실거래에서는 필요없더라도 세금계산서를 발행하려면~ 기본 정보들은 필요하니 나중에 추가되는 정보들이 있겠지요?  이때 수정이 필요하고

또 필요에 따라서는 삭제가 필요할 수 있습니다. 예를들어서 기존에 있는 업체인데 모르고 중복해서 등록을 했다던지 하는 경우는 분할된 업체의 거래 기록을 합치고, 사업자 정보만 삭제 할 수도 있으니까요~

 

삭제는 구현을 했고, 수정 코드에서는

조건에 따른 이벤트 코드가 중요합니다. 여기에도 다양한 방법이 있겠지만, 조금 더 안전한 방법을 찾아보겠습니다.

 

우리는 리스트 클릭을 하면 ID를 가져오게 만들었고, 이제 다른 정보들을 다 불러오게끔 만들어야 합니다.

불러온 정보를 컨트롤에 한번에 넣고, 필요한 부분 수정을 하고 다시 저장하는 형식으로 진행합니다.

 

Private Sub 리스트_AfterUpdate()
Me.ID = 리스트

End Sub

 

리스트의 코드를 아래와 같이 수정합니다.

 

Private Sub 리스트_AfterUpdate()
Me.ID = 리스트
Me.상호 = DLookup("상호", "t사업자정보", "id = " & ID & "")
Me.대표자 = DLookup("대표자", "t사업자정보", "id = " & ID & "")
Me.사업자등록번호 = DLookup("사업자등록번호", "t사업자정보", "id = " & ID & "")
Me.업태 = DLookup("업태", "t사업자정보", "id = " & ID & "")
Me.업종 = DLookup("업종", "t사업자정보", "id = " & ID & "")
Me.부가세이메일 = DLookup("부가세이메일", "t사업자정보", "id = " & ID & "")
Me.전화 = DLookup("전화", "t사업자정보", "id = " & ID & "")
Me.팩스 = DLookup("팩스", "t사업자정보", "id = " & ID & "")



End Sub

 

dlookup이라는 함수를 사용했는데, 

다른 방법으로는 리스트.column(1) 이런식으로 리

스트에 내장된 데이터를 바로 가져올 수 있습니다.

 

지금의 리스트는 모든 정보를 나열해서 보여주지만, 

리스트에 모든 정보를 나열하면 공간 소비가 크기 때문에

필요한 정보, 즉 이름만 넣고 불러오는 경우도 있습니다.

그 부분까지 감안했을때 dlookup함수를 사용해서 정보를 불러오거나

레코드셋을 이용하는 방법도 있지만 우선은 dlookup함수를 이용하겠습니다.

 

우선 위의 코드를 적용했을때 결과부터 보여드리겠습니다.

아래의 그림과 같이 리스트를 클릭하면 해당 데이터를 각각의 컨트롤에 출력합니다.

 

 

 

Me.팩스 = DLookup("팩스", "t사업자정보", "id = " & ID & "")

 

이 하나의 syntax만 놓고 해석을 해보겠습니다.

 

me.팩스 (= 현재 폼의 팩스 라는 컨트롤)은

dlookup() = ()안의 조건에서 뭔가 찾아오라는 함수입니다.

 

Me.팩스 = DLookup("팩스", "t사업자정보", "id = " & ID & "")

"찾아올 필드","테이블 이름","조건"

 

결국 테이블을 검색해서 찾아오라는 내용입니다.

팩스라는 필드의 값을 찾는데, 그 테이블은 t사업자정보 이고, 조건은 ID가 내 폼의 컨트롤중 ID안의 값과 같은 것을 찾아오라는 말입니다.

 

위와 같이 명령을 하면 ID= 3인 팩스필드의 값을 찾아옵니다. 값이 비어 있으면 빈 칸을 보여줍니다.

 

 

Me.ID = 리스트
Me.상호 = DLookup("상호", "t사업자정보", "id = " & ID & "")
Me.대표자 = DLookup("대표자", "t사업자정보", "id = " & ID & "")
Me.사업자등록번호 = DLookup("사업자등록번호", "t사업자정보", "id = " & ID & "")
Me.업태 = DLookup("업태", "t사업자정보", "id = " & ID & "")

 

Me.업종 = DLookup("업종", "t사업자정보", "id = " & ID & "")
Me.부가세이메일 = DLookup("부가세이메일", "t사업자정보", "id = " & ID & "")
Me.전화 = DLookup("전화", "t사업자정보", "id = " & ID & "")
Me.팩스 = DLookup("팩스", "t사업자정보", "id = " & ID & "")

 

이 코드를 보시면 아시겠지만 총 9번의 명령을 수행하게 만듭니다.

하지만 순식간에 찾아서 보여주므로 시간이 오래 걸릴일은 없습니다.

 

이제 데이터들을 불러왔으니, 수정을 진행해보겠습니다.

수정의 방법도 다양하지만, 여지껏 사용했던 방식으로 진행하겠습니다.

 

Private Sub 수정_Click()

CurrentDb.Execute "update t사업자정보 set 상호 = '" & 상호 & "',대표자 = '" & 대표자 & "',사업자등록번호 = '" & 사업자등록번호 & "' " & _
",업태 = '" & 업태 & "',업종 = '" & 업종 & "',부가세이메일 = '" & 부가세이메일 & "',전화 = '" & 전화 & "',팩스 = '" & 팩스 & "' where id = " & ID & " ", dbSeeChanges

초기화_Click

End Sub

 

우선 코드를 위와 같이 작성하고 저장한 후에

폼을 아래와 같이 열고 비어 있는 업태, 업종에 222,333을 넣고 수정 버튼을 누르면

 

 

아래와 같이 수정되어 저장됩니다.

 

 

확인차 모든 필드를 필드 내용으로 사용하는 느낌으로 다 채워 넣어 보겠습니다.

 

 

전부 채워졌습니다.

그런데...사업자등록증상에는 "주소"가 있는데 여기는 주소 정보가 없네요.

다음 포스트에서 무엇을 수정해야하는지 하나씩 수정해가보고, 지금의 이 코드는 아직 에러요소가 있습니다. 그 요소가 무엇이 있고 또 어떻게 코드를 첨가할지 알아보겠습니다.

 

 

현재 글 : #8 (폼) - 내가 원하는 내용 구현하기 6

하나도 몰라도 되는 MS 엑세스 - #0 인덱스 페이지

 

바코 ver.3 - #0 인덱스 페이지

* 꼭 기억하셔야 할 점. 이 연재 포스트는 접근하는 방법을 일반 책들에서 보여주는 내용과 다르게 진행합니다. 전반적인 내용을 비교, 평가한다면 이미 출판된 내용들이 더 잘 정리되어 있고 가

babocoding.tistory.com

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유