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

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

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레벨
포인트 : 4348 EP
전체 0

전체 74
번호 제목 작성자 작성일 추천 조회
알림
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (179)
오빠두엑셀 | 2022.02.03 | 추천 469 | 조회 184806
오빠두엑셀 2022.02.03 469 184806
공지사항
[VBA] 구하라 그러면 주어질 것이다. - VBA 마스터 E-Book (영문판) 첨부파일 (13)
dra**** | 2022.07.19 | 추천 10 | 조회 772
dra**** 2022.07.19 10 772
45662
선택된 범위 정렬 단축키 (20)
Denise | 2022.12.15 | 추천 5 | 조회 523
Denise 2022.12.15 5 523
44293
[엑셀 VBA] 예약 DB - 9. 시트의 바우처&견적서 양식에 데이터 뿌리기 (15)
dra**** | 2022.11.11 | 추천 4 | 조회 888
dra**** 2022.11.11 4 888
Re:[엑셀 VBA] 예약 DB - 9. 시트의 바우처&견적서 양식에 데이터 뿌리기
blue_0313 | 2023.03.21 | 추천 0 | 조회 69
blue_0313 2023.03.21 0 69
44227
[엑셀 VBA] 예약 DB - 8. Listbox 와 폼 컨트롤 연동하고 DB로 보내기 (1)
dra**** | 2022.11.09 | 추천 3 | 조회 566
dra**** 2022.11.09 3 566
44219
[엑셀 VBA] 예약 DB - 7. MySQL 클래스와 사용법 (3)
dra**** | 2022.11.09 | 추천 2 | 조회 514
dra**** 2022.11.09 2 514
43438
[엑셀 VBA] 예약 DB - 6. 폼 콘트롤과 DB 필드명 일치시키기
dra**** | 2022.10.21 | 추천 2 | 조회 311
dra**** 2022.10.21 2 311
43292
[엑셀 VBA] 예약 DB - 5. makeSQL() 함수 - INSERT, UPDATE문 자동 생성 (7)
dra**** | 2022.10.18 | 추천 3 | 조회 533
dra**** 2022.10.18 3 533
43091
[엑셀 VBA] 예약 DB - 4. 표 가지고 놀기 (17)
dra**** | 2022.10.13 | 추천 1 | 조회 695
dra**** 2022.10.13 1 695
43017
[엑셀 VBA] 예약 DB -3. 표(테이블, ListObject)을 사용해야 하는 이유1 (15)
dra**** | 2022.10.11 | 추천 2 | 조회 580
dra**** 2022.10.11 2 580
42998
[잡설] 엑셀이 웹으로 가야하는 이유2 (11)
dra**** | 2022.10.10 | 추천 5 | 조회 826
dra**** 2022.10.10 5 826
Re:[잡설] 엑셀이 웹으로 가야하는 이유2
tin | 2023.01.12 | 추천 0 | 조회 161
tin 2023.01.12 0 161
42982
[엑셀 VBA] 예약 DB - 2. 다시 웹으로 - Access에서 MySQL로 데이터 이식
dra**** | 2022.10.10 | 추천 2 | 조회 395
dra**** 2022.10.10 2 395
40590
[엑셀 VBA] 예약 DB - 1. 엑세스, SQL, Recordset, ListObject 의 상관 관계 (9)
dra**** | 2022.07.29 | 추천 3 | 조회 674
dra**** 2022.07.29 3 674
Re:[엑셀 VBA] 예약 DB - 1. 엑세스, SQL, Recordset, ListObject 의 상관 관계
tin | 2023.01.12 | 추천 0 | 조회 107
tin 2023.01.12 0 107
40511
[잡설] 엑셀의 꽃 파워 쿼리를 버리다. (5)
dra**** | 2022.07.29 | 추천 5 | 조회 1152
dra**** 2022.07.29 5 1152
40321
[경험담..해결했습니다.] &H80004005(-2147467259)시스템오류 (4)
티엠프이 | 2022.07.25 | 추천 2 | 조회 732
티엠프이 2022.07.25 2 732
40074
M365 업데이트 이후 발생하는 H80004005 (-2147467259) 자동화 오류 해결방법
오빠두엑셀 | 2022.07.23 | 추천 1 | 조회 511
오빠두엑셀 2022.07.23 1 511
39608
엑셀 그래프에 관한 유튜브 채널정보 입니다. (16)
레몬네이드 | 2022.07.15 | 추천 0 | 조회 395
레몬네이드 2022.07.15 - 395
36473
[엑셀VBA] 시트 이름을 변수로 설정하고 싶을때 간단한 방법 (3)
알파고 | 2022.06.27 | 추천 2 | 조회 1705
알파고 2022.06.27 2 1705
35196
Print_Area 동적 인쇄 영역설정 첨부파일 (7)
sean | 2022.06.21 | 추천 4 | 조회 1800
sean 2022.06.21 4 1800
34607
셀레니움으로 개별공시지가 조회 첨부파일 (5)
나야 | 2022.06.02 | 추천 2 | 조회 452
나야 2022.06.02 2 452
26273
엑셀 2021, M365 가로스크롤 기능 (39)
더블유에이 | 2022.01.23 | 추천 17 | 조회 1295
더블유에이 2022.01.23 17 1295
Re:엑셀 2021, M365 가로스크롤 기능
김학동 | 2022.01.23 | 추천 1 | 조회 353
김학동 2022.01.23 1 353
Re:엑셀 2021, M365 가로스크롤 기능
김동희 | 2022.05.30 | 추천 0 | 조회 200
김동희 2022.05.30 0 200
24189
[엑셀 VBA] Snippet - OCR: 이미지 파일을 텍스트 파일로 변환하기 (28)
dra**** | 2021.12.01 | 추천 8 | 조회 3516
dra**** 2021.12.01 8 3516
Re:[엑셀 VBA] Snippet - OCR: 이미지 파일을 텍스트 파일로 변환하기
tin | 2023.01.12 | 추천 0 | 조회 90
tin 2023.01.12 0 90