바보처럼 코딩하기/하나도 몰라도 되는 MS 엑세스 왕초보용 연재

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

바보처럼코딩하기 2023. 3. 20. 16:31
반응형

 

개발자와 사용자가 별개라는 생각을 가지고 코드를 작성해야합니다.

개발 의도와 다른 방식으로 사용하려는 사용자들이 많습니다.

프로그램 이해도 차이인데요, 교육이 필요하나 쉽지 않습니다.

그러므로 프로그램 상에서 문제가 될만한 점이 있다면 미리 차단해서 가이드를 마련해줘야 합니다.

 

 

위의 그림과 같이 3번 데이터를 수정해야하는 상황에서 ID를 4로 바꾸면?? 어떻게 될까요?

4번 데이터줄에 위의 내용이 덮어써질 것입니다.

그렇다면 대한상사의 데이터는 다 없어지겠지요?

 

여러가지 방법이 있겠지만,

1) ID라는 컨트롤을 숨기는 방법

2) ID라는 컨트롤에 쓰기를 못하게 하는 방법

이 두가지가 우선 떠오릅니다.

 

- 첫번째 방법속성시트 > 형식 > 표시 를 '아니오'로 만들어주면 됩니다.

 

 

위와 같이 설정하고 폼 보기로 보면 아래와 같이 ID가 나타나지 않습니다.

 

 

 

- 두번째 방법속성시트 > 데이터 > 잠금 을 ''로 만들어주면 됩니다.

 

 

위와 같이 설정을 하고, 컨트롤 박스 ID를 수정하려고 해도 아무런 반응이 일어나지 않습니다.

 

 

또 다른 오류 me.ID (컨트롤)이 비어 있는 상태에서 수정을 누르면 

아래와 같은 오류창이 나타납니다.

 

 

이런 오류창이 나오지 않게 조건을 달아줘야합니다.

 

여기서 사용되는 대표적인 함수가 if 함수 입니다. (조건문, if  함수 검색)

Private Sub 수정_Click()

If Nz(ID, "") = "" Then
Exit Sub
Else

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

End If

초기화_Click

End Sub

 

여기서 사용된 if문을 분석하면 아래와 같습니다.

 

If Nz(ID, "") = "" Then
Exit Sub
Else

**실행할 코드

End If

 

if 조건 = 조건 then

**조건이 조건과 같을 때 실행할 코드

else

**조건이 조건과 다를 때 실행할 코드

end if

 

if 이후 내가 준 조건은 nz(id,"") ="" 입니다.

me.id가 null이면 "" 로 인지하고 그게 ""인 경우를 찾으니,

폼의 컨트롤 ID가 비어 있다면 그 값은 ""로 인식하고 그게 참인 상황이 되지요.

exit sub  

 

이 코드는 코드 진행에서 나가라 = 더 이상의 코드 진행은 없다. 입니다.

 

else 만약에 아니라면

내가 적어놓은 코드를 진행하라 입니다.

 

무튼 수정에서는 이제는 에러가 안나네요.

 

삭제 버튼 에러 보기

 

삭제 버튼도 같은 에러가 존재합니다.

ID가 비어 있을때 작동을 시켜보면 아래의 그림과 같은 에러가 나타납니다.

 

 

위의 수정 버튼과 같은 증상이지요.

똑같은 방법으로 if문을 사용해서 해결해주겠습니다. 결국 ID가 없기때문이지요.

 

Private Sub 삭제_Click()
If Nz(ID, "") = "" Then
Exit Sub
Else

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

End If

초기화_Click

End Sub

 

저장 버튼 에러 보기

저장 버튼의 에러는 에러창이 표시되기 보다는, 아무 데이터가 없을때 저장을 누르면 빈 데이터 열이 생성되는게 문제 입니다.

 

위와 같이 ID 3,4 열이 두개 있는데 저장을 누르면 아래와 같이 빈 데이터 열이 발생합니다. 반복해서 두번 눌렀습니다.

 

이 행동이 반복되면 나중에는 무수히 많은 빈 데이터 열이 존재 하겠지요?

이것도 방지를 해줍시다. 여기서는 최소 한개 이상의 조건이 필요합니다.

어떤 필드를 조건으로 생각해보니, 상호는 무조건 있어야 한다고 생각됩니다.

 

Private Sub 저장_Click()

If Nz(상호, "") = "" Then
Exit Sub
Else


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

End If


초기화_Click

End Sub

 

이제 다시 저장을 클릭해도 상호가 없으므로 아무런 일도 일어나지 않습니다.

 

사용자는 에러를 인지하는가?

개발자의 또다른 고민은 지금과 같이 에러를 방지했는데, '사용자는 과연 이 상황을 에러로 인지하는가?' 입니다.

이럴때 많이 사용하는 방법중에 하나가 메시지 박스라는 것이 있습니다.

 

개발자가 사용자에게 전달하는 메시지 라고 보시면 됩니다.

"응~ 지금 여기에 뭐가 빠져서 작동안해~ 여기를 잘 봐봐" 이런식으로 알려주는 것이지요.

 

위의 에러방지를 위해 수정했던 코드에 메시지 박스 코드를 하나씩 추가해보겠습니다.

Private Sub 삭제_Click()
If Nz(ID, "") = "" Then
MsgBox "삭제할 업체를 선택하지 않았습니다. 삭제할 업체를 선택해주세요."
Exit Sub
Else

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

End If

초기화_Click

End Sub

Private Sub 수정_Click()

If Nz(ID, "") = "" Then
MsgBox "수정할 업체를 선택하지 않았습니다. 수정할 업체를 선택해주세요."
Exit Sub
Else

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

end if

초기화_Click

End Sub

Private Sub 저장_Click()

If Nz(상호, "") = "" Then
MsgBox "상호가 없습니다. 상호를 입력해주세요"
Exit Sub
Else


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

End If


초기화_Click

End Sub

 

exit sub바로위에 msgbox 문장을 삽입했습니다.

 

- 가장 간단한 메시지 박스 사용법

msgbox "할말"

입니다.

 

 

다음 포스트는 리스팅을 할때와 검색을 통해서 리스트를 조회할때 사용하는 가장 기본적이고 실용적인 방법을 작성해 보겠습니다.

 

 

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

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

 

 

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

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

babocoding.tistory.com

 

반응형