12강 – VBA로 Access DB에 연결하여 Data처리하기(ADO를 이용하여 Data삭제)

공개됨 글쓴이 Admin댓글 2개

12강에서는 VBA로 Access DB에 연결하여 Data를 삭제하는 작업을 해 보고자 한다.

6강에서는 Excel의 Sheet를 Database처럼 사용하여 Data를 삭제해 보았는데 이번 강에는 Excel Sheet대신에 Access를 Database로 사용하여 아래와 같이 구현해 본다. 따라서 DB연결 및 Data삭제 부분을 제외하고는 6강과 내용이 거의 동일하다.

1) 삭제버튼 클릭시 Event처리

Data를 삭제하기 위해서는 삭제하려는 Data가 폼에 조회되어 있어야 한다. 조회된 Data에 해당하는 Data를 Access DB에서 삭제하는 것이다. 위 폼의 “삭제”버튼을 누르면 Data가 삭제되도록 “삭제”버튼의 Click Event에 다음의 코드를 입력한다. 삭제 버튼을 누르면 deleteUser function을 call하여 Data를 삭제한다.

Private Sub cmdDelete_Click()

Dim argUser As User
Dim result As JobResult
    
    If Me.txtId.Value = "" Then
        MsgBox "조회 후 삭제하세요."
        Exit Sub
    End If
    
    argUser.id = CLng(Me.txtId.Value)
    
    '//삭제처리하고 결과값을 받는다.
    result = deleteUser(argUser:=argUser)

    
    '//처리 후 결과코드로 정상처리 여부를 판단한다.
    If result.code = 0 Then
        MsgBox result.message
    Else
        MsgBox "작업중 에러가 발생했습니다. 아래의 메시지를 확인바랍니다." & vbNewLine & vbNewLine & result.message
    End If
    
    '//처리후 변경된 내용을 조회하여 Form에 반영한다.
    loadUserToForm
    

End Sub

2) Access DB에 있는 Data삭제(Delete)하기

아래는 Data를 삭제하는 deleteUser Function이다. 삭제버튼을 누르면 이 Function이 실행되어 Data가 삭제(Delete)된다. modUser module에 붙여 넣는다.

Function deleteUser(argUser As User) As JobResult
    
Dim dbConn As New ADODB.Connection
Dim result As JobResult
Dim affectedCount As Long
Dim strSQL As String
Dim strConn As String

'//Access를 Database로 사용할때는 Delete문 사용이 가능하므로 기존로직은 삭제한다
'//기존 로직이 궁금하면 6강의 실습파일 참고바람.

On Error GoTo ErrHandler


    strSQL = "DELETE FROM [사원정보] " & _
             " WHERE [사번] = " & argUser.id
             
'//Access를 Database로 사용할때  Database연결문자열, Access DB명은 common module의 global변수 "gAccessDBName"에 지정한다.
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\" & gAccessDBName & ";"

    dbConn.Open strConn
    dbConn.Execute CommandText:=strSQL, recordsaffected:=affectedCount
    
  
    If affectedCount = 0 Then
        result.code = -1
        result.message = "입력한 사번 해당하는 Data가 없어서 삭제되지 않았습니다."
    Else
        result.code = 0
        result.message = "처리되었습니다."
    End If
    
CommonEnd:
    
    deleteUser = result

    
Exit Function

'//에러처리
ErrHandler:

    If (Err.Number <> 0) Then
        result.code = Err.Number
        result.message = Err.Description
    End If
    
    Resume CommonEnd
    
End Function

위의 내용만으로 완전한 기능을 구현할 수 없다. Form에 추가된 textbox등은 이름이 위의 코드와 일치해야하고, 또 위에 언급되지 않은 부분이 있을 수 있으므로 자세한 내용은 첨부를 다운로드 받아서 확인해 보길 바란다.

첨부(실습용 파일) : 9강부터12강_VBA를_이용하여DB에Data추가_삭제(Access이용).zip
(압축파일을 풀면 xlsm, mdb파일이 보인다. xlsm파일은 매크로실행파일이고 mdb파일은 Access DB파일이다. mdb파일은 매크로실행파일과 동일한 폴더내에 있어야 한다) 

 

[ 엑셀에서 Database사용하기 강좌 목록 ]

 

12강 – VBA로 Access DB에 연결하여 Data처리하기(ADO를 이용하여 Data삭제)에 1개의 응답

    • Form의 listbox 속성값에 오류가 있었네요. 아래 그림과 같이 ColumnWidths의 네번째(급여 부분에 해당)가 0 이어서 보이지 않았습니다. 0이면 값이 list에 존재해도 필드의 너비가 0이므로 보이지 않습니다. 수정해서 사이트에 다시 올려놓았습니다. 감사합니다.
      ColumnWidths오류

댓글 남기기

이메일은 공개되지 않습니다.