본문으로 바로가기
바코2://#12. 기초 코딩, 버튼에 코딩삽입(4) - 수정 - 바보처럼코딩하기

바코2://#12. 기초 코딩, 버튼에 코딩삽입(4) - 수정

반응형

이번 포스트에서 진행할 내용

  1. 리스트 선택시 데이터 뿌리기
  2. 레코드 셋을 이용하는 방법
  3. 수정하기

검색리스트에 After Update 코드삽입을 진행합니다.

Private Sub 검색리스트_AfterUpdate()
ID = 검색리스트
End Sub

 

버검색을 누르면 검색리스트에 리스트가 나타나고(검색어가 없는 경우 전체 리스트가 나옴), 검색리스트에서 업체명을 클릭해주면, ID가 바뀝니다.

 

리스트 클릭을 해서 데이터를 텍스트 필드에 뿌려주는 방법은 두가지 정도를 많이 사용하는데, 둘다 알려드리고 속도면에서 조금 더 빠른 방법을 설명을 해드리겠습니다.

 

 1. 레코드셋으로 불러오기

 

Private Sub 검색리스트_AfterUpdate()

'레코드 셋을 이용한 방법
ID = 검색리스트

Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("select * from 고객 where id = " & ID & "", dbOpenDynaset, dbSeeChanges)

사업자등록번호 = RS!사업자등록번호
With RS
업체명 = !업체명
대표이름 = !대표이름
전화번호 = !전화번호
팩스번호 = !팩스번호
주소 = !주소
업종 = !업종
업태 = !업태
부가세이메일 = !부가세이메일
End With


End Sub

사용 코드 설명

  • ID = 검색리스트

오브젝트 = 데이터

데이터를 오브젝트에 대입해라. 정도로 이해해주세요.

ID라는 오브젝트에 데이터를 대입해라.

리스트의 경우 가장 첫번째 값을 데이터로 가져옵니다.

위의 코드는 생략된 부분들이 있는데, 본래 코드는 Me.ID = 검색리스트.column(0) 입니다.

리스트의 두번째 값을 선택할때는 ID = 검색리스트.column(1) 이렇게 표현합니다. 세번째는 column(2) 이런식으로 증가시켜 사용하면 됩니다.

 

  • Dim RS As DAO.Recordset

Dim 선언합니다.

RS : 내가 지정한 단어(암거나 써도 됨) 내가 이놈을 기억하기 위해서 만든 콜네임 같은 겁니다.

DAO.Recordset : 레코드셋의 종류중 하나 (레코드 셋은 말 그대로 레코드를 담는 컨테이너 or 그릇 같은 걸로 생각하시면 됩니다.

DB를 이용할때 눈에 안보이는 처리들이 있어 결과만 보게되는 경우가 있습니다. 이럴때 초보자들은 멘붕이 옵니다. 앞으로 이런 케이스가 많으니 상상하시려고 노력하셔야 합니다.

 

위의 코드를 한국말로 의역 하자면,

"DAO 형식으로 사용할 컨테이너(레코드셋)을 만들고 그걸 RS라는 이름으로 부르겠다."

이 정도로 생각하시면 무리 없으실것 같습니다.

  •  Set RS = CurrentDb.OpenRecordset("select * from 고객 where id = " & ID & "", dbOpenDynaset, dbSeeChanges)

긴 문장이니, 이해를 위해서 분리를 좀 해야겠지요?

Set RS = X : 영어문장을 읽는 것처럼 순서는 뒤부터 생각해주시지요. X를 RS로 셋팅하겠다. (여기서 X는 '='이후 current부터 끝까지 입니다.) 

  • currentdb.openrecordset("",dbopendynaset,dbseechanges)

dbopenrecordset과 dbopendynaset, dbseechanges는 아래 링크에서 공부하시고, 여기서는 공식같이 사용하시라고 말씀 드리겠습니다. 

 

  • currentdb.openrecordset("")  : 이런 형식으로 사용하나, SQL server를 이용할때는 
  • currentdb.openrecordset("",dbopendynaset,dbseechanges) 이렇게 괄호 닫기 전에 ,dbopendynaset,dbseechanges 를 삽입해서 사용합니다.

 

https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao

 

Database.OpenRecordset method (DAO)

Office developer client VBA reference

docs.microsoft.com

Set RS = CurrentDb.OpenRecordset("select * from 고객 where id = " & ID & "", dbOpenDynaset, dbSeeChanges)

  • select * from 고객 where id = " & ID & "

이제 select 부분만 띄어오면, 저번 포스트에서 보셨던 형식이지요?

조건이 있는 select 문입니다. 위의 문장은 크게 3가지로 구분해서 보시면 되겠네요.

  1. Set RS =
  2. select * from 고객 where id = " & ID & "
  3. CurrentDb.OpenRecordset("", dbOpenDynaset, dbSeeChanges)
  • 사업자등록번호 = RS!사업자등록번호

위의 코드는 me.사업자등록번호 = RS!사업자등록번호 이고, me.은 생략가능합니다.

오브젝트인 사업자등록번호에 레코드셋의 레코드 사업자 등록번호를 대입해라 라고 이해하시면 됩니다.

 

레코드 셋을 사용할 때 with rs를 사용해서 rs라는 단어를 줄이는 방법입니다.

시작은 with rs로 시작하고 맺음은 end with로 합니다. 매번 rs를 안써도 되니 경제적으로 코딩을 하는 방법입니다.

  • With RS
    업체명 = !업체명
    End With

수정한 코드로 폼을 작동 시켜 보겠습니다. (비디오 툴이 서툴러서...조금 버벅입니다 ㅎㅎ^^;;)

2. 리스트에서 모든 데이터 불러오기

검증된 바는 없지만, 개인적으로는 리스트에 모든 데이터를 다 가져오고, 그 리스트에서 바로 오브젝트에 넣는게 속도면에서 좋다고 생각합니다. 지금 제가 사용하는 프로그램은 리스트를 사용하던 하위폼을 사용하던 모든 레코드를 넣고, 불러옵니다. 아무래도 이벤트가 발생하고 레코드셋을 생성한뒤 불러오는 연산처리를 하면 딜레이가 생긴다는 판단입니다.

 

두가지를 설정해줘야 합니다. 

1. 리스트 부분

2. 코드 부분

 

열개수는 10 으로 바꿔주시고

열 너비는 0;2;0;0;0;0;0;0;0;0;   이렇게 쳐주시면 위의 자동으로  cm가 붙습니다.

 

실행해서 검색을 한번 눌러주면 이전과 똑같이 나옵니다.

이제 검색리스트_AfterUpdate() 코드를 변경하겠습니다.

Private Sub 검색리스트_AfterUpdate()

ID = 검색리스트
업체명 = 검색리스트.Column(1)
대표이름 = 검색리스트.Column(2)
사업자등록번호 = 검색리스트.Column(3)
전화번호 = 검색리스트.Column(4)
팩스번호 = 검색리스트.Column(5)
주소 = 검색리스트.Column(6)
업종 = 검색리스트.Column(7)
업태 = 검색리스트.Column(8)
부가세이메일 = 검색리스트.Column(9)

End Sub

그리고 소스를 제공하는 버검색 코드도 아래와 같이 바꿔줍니다. (코드 앞에 '(싱글 쿼트)가 붙으면 그 코드는 생략됩니다.

Private Sub 버검색_Click()
'검색리스트.RowSource = "SELECT ID, 업체명 FROM 고객 WHERE 업체명 Like '*" & 검색창 & "*'"

검색리스트.RowSource = "SELECT * FROM 고객 WHERE 업체명 Like '*" & 검색창 & "*'"

End Sub

 

실행을 하면 위와 같이 정상작동합니다.

 

 

 

 

[이전 글] : 바코2://#11. 기초 코딩, 버튼에 코딩삽입(3) - 검색2

[다음 글] : 바코2://#13. 기초 코딩, 버튼에 코딩삽입(5) - 수정2

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