PROGRAMMING WORKSHOP

Access와 Excel의 연동_10|
SQL - INSERT,UPDATE,DELETE

앞에서 SELECT문으로 정보를 조회해 보는 것을 했었다
조회하는 것은 단순한 정보를 불러서 보는 경우와 휠터링을 하고 그룹핑을 하는 등 다양한
보고서를 다양한 형식으로 할수 있는 것이니 뒤로 조금 미루고 우선 중요한
정보를 입력(INSERT)하고,수정(UPDATE)하고 ,삭제(DELETE)하는 것을
엑셀에서 ADO를 사용한 VBA로
DB에 처리해보자
DB를 다루는 SQL은 의외로 단순하다
조회하고 SELECT...실은 이부분에서 GROUP BY,ORDER BY,HAVING등 분석을 할때
필요한 키워드들이 있고 앞페이지에서 해보았지만 크게 나누어서 SELECT(조회)이다
그리고 새로운 정보를 입력하는 INSERT
이미 입력된 정보를 수정하는 UPDATE
그리고 입력된 정보를 삭제하는 DELETE
이부분에서 조건절 키워드 WHERE는 공통이다
중요한 것은 조건을 넣는 WHERE절에서 VBA에서 논리식과 논리값에 대한
내공이 쌓인 분들은 그냥 거저 먹는 것이다..

우선 그림과 같이 두개의 옵션버튼을 크릭할때마다
하나는 [수정저장모드]로 하고 다른 하나는 [신규저장모드]로 인터페이스가 바뀌도록 만들고



새로운 정보를 입력하는 SQL문은..

INSERT INTO 테이블이름 (휠드명_1, 휠드명_2, 휠드명_3,,,휠드명_N)
VALUES (휠드값_1, 휠드값_2, 휠드값_3,,,휠드값_N)

라는 간단한 두줄이고..
이미 있는 정보를 갱신하는 SQL문은...


UPDATE 테이블이름
SET 휠드명_1=휠드값_2, 휠드명_2=휠드값_2, 휠드명_N=휠드값_N
WHERE 조건...어떤 행을 갱신할 것인지..
그리고

이미 있는 정보를 삭제하는 SQL문은..

DELETE FROM 테이블이름
WHERE 조건...어떤 행을 삭제할 것인지..

항상 조심할 것은 휠드명이나 테이블명의 스펠링..
그래서 VBA에 코딩하기전에 억세스의 쿼리디자인창에서 위의 쿼리를 실행해보고
휠드명이나 테이블명이 틀림이 없이 실행이 되는지 확인하고 하시면 된다
그리고 휠드의 데이타타입에 따른 값을 주는 문자열정보의 작성요령도 헷갈리면
억세스의 쿼리디자인도구를 활용하는 습관이 좋다

***[LOG-IN]***

'' 위의 SQL문법을 아래와 같이 변수로 필요한 정보를 전달하여 작성..
'' 하나의 프로시져에 모두 처리하도록 한다
'' 2016-10-12 오후 3:30:00  이라는 진료시간정보를 받아서
'' SQL이 이해하는 날짜값과 시간값 문자열정보로 만든다
'' 날짜와 시간은 유효한 문자열 시간정보와 날짜정보의 앞뒤에 #를 붙인다
'' 날짜는 #2016/1/1# 시간은 #PM 12:12:12# 같이 SQL문에 전달한다
sTreatDate = Trim(Me.txtDateAndTime.Text)
sTreatTime = Replace(Replace(Split(sTreatDate, " ")(1), "오후", "PM "), "오전", "AM ") & " " & Split(sTreatDate, " ")(2)
sTreatDate = Split(sTreatDate, " ")(0)

Select Case sEditType
    Case 신규저장
        iCurrentTreatIndex = Me.lstTreatingProcess.ListCount
        sSQL = "INSERT INTO " & WORKS & "(PetID,TreatID,WorkDate,WorkTime)" & _
                " VALUES(" & iPetIndex & "," & iTreatIndex & ",#" & sTreatDate & "#,#" & sTreatTime & "#)"
                        
    Case 수정저장
        sSQL = "UPDATE " & WORKS & _
                    " SET PetID=" & iPetIndex & _
                    ",TreatID= " & iTreatIndex & _
                    ",WorkDate=#" & sTreatDate & _
                    "#,WorkTime=#" & sTreatTime & "#" & _
                    " WHERE WorkID=" & iTreatingProcess
                    
    Case 삭제
        sSQL = "DELETE FROM " & WORKS & _
                " WHERE WorkID=" & iTreatingProcess
    
End Select
'' 위와 같이 하여 SQL문만 작성하면 나머지는 간단하다
'' ADO의 Collection개체의 Execute 메소드에 SQL문만 전달하면
'' ADO가 친절하게 SQL문에 지시된 대로 작업을 해준다...
Dim oConn As New Connection
oConn.ConnectionString = "Provider=" & PROVIDER_ & ";Data Source=" & sFileAndPath
oConn.Open
oConn.Execute sSQL
oConn.Close
Set oConn = Nothing

''삭제,새정보입력,수정후에는 UserForm의 Interface를 보고싶은 상태로
''갱신하여야 할 것이다..

Me.fillWorksList Me.lstTreatingProcess
If sEditType = 수정저장 Then
    modMain.bStopEvents = True
    Me.lstTreatingProcess.ListIndex = -1
    Me.lstTreatingProcess.ListIndex = iCurrentTreatIndex
    modMain.bStopEvents = False
ElseIf sEditType = 신규저장 Then
    Me.OptionButtonUpdate.Value = True
    Me.lstTreatingProcess.ListIndex = iCurrentTreatIndex
Else
    Me.lstTreatingProcess.ListIndex = 0 
End If
 

***[LOG-IN]***