[엑셀 VBA] 예약 DB - 6. 폼 콘트롤과 DB 필드명 일치시키기

작성자
dra****
작성일
2022-10-21 23:11
조회
93

DB의 필드가 3개가 있다고 가정해 봅니다.

Dim arrFields(), arrValues()
arrFields = Array('item', 'unit', 'price')
Redim arrValues(LBound(arrFields) to UBound(arrFields))

그럼 폼의 textbox 컨트롤의 이름도 똑같이 'item', 'unit', 'price'으로 정합니다.
이렇게 하는 이유는,
폼 컨트롤의 이름을 안다면 아래와 같이 해서 그 값들을 배열에 쉽게 담을 수 있습니다.

for i = LBound(arrFields) to UBound(arrFields)
   arrValuse(i) = form.Controls(arrFields(i)).value	
next i

이렇게 배열에 담았으면 이를 가지고 DB에 INSERT or UPDATE를 할 수 있습니다.

Access의 경우, SQL문보다 Recordset 객체를 이용해서 Fields와 Values를 배열로 전달하면 쉽게 할 수 있습니다.

MySQL의 경우, Recordset 객체를 이용해서 전달하면 오류가 많이 납니다. 그래서 SQL문으로 전달하는 것이 좋습니다.


아래는 골프장 예약 관련 폼입니다.

이 폼의 DB Fields 들은 다음과 같습니다.

arrFields = Array("Ser", "MEM_Ser", "GCODE", "GUIDE", "GUEST", "GC_Ser", "PAX", "TOFF_DATE", "WEEK_DAY", "HOLES", _
                      "SELL_RATE", "SELL_TOTAL", "R_TIME", "RECHECK_DATE", "A_TIME", "GUEST_CONFIRM", "BOOK_DATE", "CONFIRM_CODE", "VCHER_DATE", _
                      "MEMO", "PROGRESS_Ser", "SELL_PAY_DATE", "NET_RATE", "INCOME", "NET_TOTAL", "MODIFIED", "ADMIN_Ser", "RECHECK", "LOC_INVOICE")

이런식으로 Field 이름과 폼컨트를의 이름을 일치 시키면 그 값을 쉽게 가져와서

배열이나 SQL문을 쉽게 만들 수 있습니다.

이렇게 만든것을 Recordset의 배열로 전달하면 Access로 쉽게 INSERT, UPDATE가 됩니다.

Public Function mysql_INSERT_Array(ByVal tbName As String, arrFields, arrValues) As Long
 
    On Error GoTo Error_Section
        'rs.Open tbName, Conn, adOpenDynamic, adLockOptimistic, adCmdTable
        Dim rs As New ADODB.Recordset
        rs.ActiveConnection = conn
        rs.CursorType = adOpenDynamic
        rs.LockType = adLockOptimistic
        rs.Open tbName, , , , adCmdTable
 
        rs.AddNew arrFields, arrValues
        rs.UPDATE
 
        Dim Ser: Ser = conn.Execute("SELECT @@Identity")(0)
        mysql_INSERT_Array = IIf(Ser > 0, Ser, 0)
 
    Exit Function
 
Error_Section:
    mdMessage.err_MSG "clsMySQL: mysql_INSERT_Array", Err, False
    mysql_INSERT_Array = 0
End Function

아니면 SQL문으로 만들었다면 MySQL로 쉽게 INSERT, UPDATE를 할 수 있습니다.

' SQL문으로 실행 : INSERT, UPDATE, DELETE
Public Function mysql_ExecSQL_strSQL(strSQL As String) As Boolean
    Dim aff As Long
 
    On Error GoTo Error_Section
        Call conn.Execute(strSQL, aff)
 
    mysql_ExecSQL_strSQL = IIf(aff > 0, True, False)
 
    Exit Function
 
Error_Section:
    mdMessage.err_MSG "clsMySQL: mysql_ExecSQL_strSQL", Err, False
    mysql_ExecSQL_strSQL = False
End Function

다음에는 폼의 ListBox를 클릭하면 어떻게 각각의 컨트롤에 값을 뿌리는 지 포스팅 하겠습니다.

선을 다 그리기 힘들어서 몇 개만 ... ㅋ

 

 

 

 

 

스크랩
공유
회원등급 : 29레벨
포인트 : 4251 EP
전체 0

전체 69
번호 제목 작성자 작성일 추천 조회
알림
「🎉 올해의 책 투표」 '진짜쓰는 실무엑셀' 이 후보에 선정되었습니다! (👉깜짝 이벤트) (51)
오빠두엑셀 | 2022.11.07 | 추천 23 | 조회 7712
오빠두엑셀 2022.11.07 23 7712
공지사항
[VBA] 구하라 그러면 주어질 것이다. - VBA 마스터 E-Book (영문판) 첨부파일 (6)
dra**** | 2022.07.19 | 추천 4 | 조회 352
dra**** 2022.07.19 4 352
44293
[엑셀 VBA] 예약 DB - 9. 시트의 바우처&견적서 양식에 데이터 뿌리기 (3)
dra**** | 2022.11.11 | 추천 1 | 조회 133
dra**** 2022.11.11 1 133
44227
[엑셀 VBA] 예약 DB - 8. Listbox 와 폼 컨트롤 연동하고 DB로 보내기
dra**** | 2022.11.09 | 추천 2 | 조회 60
dra**** 2022.11.09 2 60
44219
[엑셀 VBA] 예약 DB - 7. MySQL 클래스와 사용법 (2)
dra**** | 2022.11.09 | 추천 2 | 조회 57
dra**** 2022.11.09 2 57
43438
[엑셀 VBA] 예약 DB - 6. 폼 콘트롤과 DB 필드명 일치시키기
dra**** | 2022.10.21 | 추천 2 | 조회 93
dra**** 2022.10.21 2 93
43292
[엑셀 VBA] 예약 DB - 5. makeSQL() 함수 - INSERT, UPDATE문 자동 생성 (4)
dra**** | 2022.10.18 | 추천 3 | 조회 108
dra**** 2022.10.18 3 108
43091
[엑셀 VBA] 예약 DB - 4. 표 가지고 놀기 (6)
dra**** | 2022.10.13 | 추천 1 | 조회 188
dra**** 2022.10.13 1 188
43017
[엑셀 VBA] 예약 DB -3. 표(테이블, ListObject)을 사용해야 하는 이유1 (11)
dra**** | 2022.10.11 | 추천 1 | 조회 143
dra**** 2022.10.11 1 143
42998
[잡설] 엑셀이 웹으로 가야하는 이유2 (9)
dra**** | 2022.10.10 | 추천 5 | 조회 257
dra**** 2022.10.10 5 257
42982
[엑셀 VBA] 예약 DB - 2. 다시 웹으로 - Access에서 MySQL로 데이터 이식
dra**** | 2022.10.10 | 추천 2 | 조회 120
dra**** 2022.10.10 2 120
40590
[엑셀 VBA] 예약 DB - 1. 엑세스, SQL, Recordset, ListObject 의 상관 관계 (4)
dra**** | 2022.07.29 | 추천 3 | 조회 339
dra**** 2022.07.29 3 339
40511
[잡설] 엑셀의 꽃 파워 쿼리를 버리다. (3)
dra**** | 2022.07.29 | 추천 4 | 조회 551
dra**** 2022.07.29 4 551
40321
[경험담..해결했습니다.] &H80004005(-2147467259)시스템오류 (3)
티엠프이 | 2022.07.25 | 추천 2 | 조회 277
티엠프이 2022.07.25 2 277
40074
M365 업데이트 이후 발생하는 H80004005 (-2147467259) 자동화 오류 해결방법
오빠두엑셀 | 2022.07.23 | 추천 0 | 조회 275
오빠두엑셀 2022.07.23 - 275
39608
엑셀 그래프에 관한 유튜브 채널정보 입니다. (7)
레몬네이드 | 2022.07.15 | 추천 -1 | 조회 210
레몬네이드 2022.07.15 -1 210
36473
[엑셀VBA] 시트 이름을 변수로 설정하고 싶을때 간단한 방법 (2)
알파고 | 2022.06.27 | 추천 2 | 조회 432
알파고 2022.06.27 2 432
35196
Print_Area 동적 인쇄 영역설정 첨부파일 (1)
sean | 2022.06.21 | 추천 4 | 조회 448
sean 2022.06.21 4 448
34607
셀레니움으로 개별공시지가 조회 첨부파일 (3)
나야 | 2022.06.02 | 추천 1 | 조회 289
나야 2022.06.02 1 289
26273
엑셀 2021, M365 가로스크롤 기능 (28)
더블유에이 | 2022.01.23 | 추천 17 | 조회 840
더블유에이 2022.01.23 17 840
Re:엑셀 2021, M365 가로스크롤 기능
김학동 | 2022.01.23 | 추천 1 | 조회 275
김학동 2022.01.23 1 275
Re:엑셀 2021, M365 가로스크롤 기능
김동희 | 2022.05.30 | 추천 0 | 조회 128
김동희 2022.05.30 0 128
24189
[엑셀 VBA] Snippet - OCR: 이미지 파일을 텍스트 파일로 변환하기 (25)
dra**** | 2021.12.01 | 추천 8 | 조회 2077
dra**** 2021.12.01 8 2077
23999
[엑셀 VBA] Snippet - Public IP, Local IP, Mac Address 구하기 (6)
dra**** | 2021.11.25 | 추천 2 | 조회 758
dra**** 2021.11.25 2 758