이 페이지에서
구문
SQL_UPDATE 연결문자열, 테이블이름, 필드목록, 값목록, WHERE절
인수구분
형식 설명
연결문자열
필수
String
OLEDB(ADO.NET)로 연결할 연결문자열입니다.
테이블이름
필수
String
DB에서 데이터를 업데이트할 테이블 이름입니다.
필드목록
필수
String
테이블에서 값을 업데이트할 필드 목록입니다. 필드가 여러개일 경우 쉼표(,)로 구분하여 작성합니다.
예를 들어 "필드1,필드2,필드3,..." 과 같이 입력합니다.
값목록
필수
String
각 필드에 업데이트할 값 목록입니다. 값이 여러개일 경우 쉼표(,)로 구분하여 작성합니다.
예를 들어 "값1,값2,값3,..." 과 같이 입력하며, 값 목록의 개수는 필드 목록의 개수와 반드시 동일해야 합니다.
WHERE절
필수
String
업데이트 할 행의 WHERE 절을 작성합니다.
예를 들어 "id=1" 과 같이 입력합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요Sub SQL_UPDATE(Connection As String, Table As String, Fields As String, Values As String, Where As String)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ SQL_UPDATE 함수
'▶ SQL 서버에 연결 후 특정 행의 데이터를 업데이트합니다.
'▶ 인수 설명
'_____________Connection : SQL OLE DB로 연결할 연결문자열(Connection String)을 입력합니다.
'_____________Table : DB 중 데이터를 Update 할 테이블 이름입니다.
'_____________Fields : 데이터를 변경할 대상 필드명입니다. 쉼표(,)로 구분하여 작성합니다.
'_____________Values : 추가할 데이터입니다. 반드시 Fields와 짝이 되도록 입력합니다.
'_____________Where : Update 할 Row의 Where 절을 작성합니다.
'▶ 사용 예제
'SQL_UPDATE "Server=database.windows.net,1433;User ID=oppadu;Password=123;", "테이블명", "필드1,필드2,...", "값1, 값2, ...", "필드명=조건"
'■ 사용된 보조명령문
'SQL_CONN
'SQL_EXECUTE
'SQL_UPDATE_STRING
'###############################################################
Dim DB As Object
Set DB = SQL_CONN(Connection)
SQL_EXECUTE DB, SQL_UPDATE_STRING(Table, Fields, Values, Where)
End Sub
Function SQL_UPDATE_STRING(Table As String, Fields As String, Values As String, Where As String) As String
Dim vFields As Variant: Dim vValues As Variant
Dim i As Long: Dim sValue As String
vFields = Split(Fields, ","): vValues = Split(Values, ",")
If UBound(vFields) <> UBound(vValues) Then
MsgBox "UPDATE 쿼리가 잘못 작성되었습니다." & vbNewLine & "Fields 와 Value의 개수가 다릅니다." & vbNewLine & _
"Fields : " & Fields & vbNewLine & "Values : " & Values, vbCritical
End
End If
SQL_UPDATE_STRING = "UPDATE " & Table & " SET "
For i = LBound(vFields) To UBound(vFields)
sValue = Trim(vValues(i))
If sValue <> "CURRENT_TIMESTAMP" Then
If Not (Left(sValue, 1) = "'" Or Left(sValue, 1) = "`") Then sValue = "'" & sValue
If Not (Right(sValue, 1) = "'" Or Right(sValue, 1) = "`") Then sValue = sValue & "'"
End If
SQL_UPDATE_STRING = SQL_UPDATE_STRING & vFields(i) & "=" & sValue & ", "
Next
SQL_UPDATE_STRING = Left(SQL_UPDATE_STRING, Len(SQL_UPDATE_STRING) - 2) & " WHERE " & Where
End Function
Sub SQL_EXECUTE(DB As Object, SQL_STRING As String)
On Error GoTo EH_CONN:
DB.Execute (SQL_STRING)
Exit Sub
EH_CONN:
MsgBox "쿼리를 실행하는 도중 오류가 발생했습니다." & vbNewLine & _
"오류 번호 : " & Err.Number & vbNewLine & "오류 내용 : " & Err.Description, vbInformation
End
End Sub
Function SQL_CONN(CONN_STRING As String) As Object
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ SQL_CONN
'▶ SQL 연결 문자열로 OLE DB 연결 후 ADODB 커넥션 개체를 반환합니다.
'▶ 인수 설명
'_____________Connection : SQL OLE DB로 연결할 연결문자열(Connection String)을 입력합니다.
'▶ 사용 예제
'Dim DB As Object
'Set DB = SQL_CONN("Server=database.windows.net,1433;User ID=oppadu;Password=123;")
'###############################################################
Dim DB As Object
Set DB = CreateObject("ADODB.Connection")
If InStr(1, CONN_STRING, "Provider=", vbTextCompare) = 0 Then CONN_STRING = "Provider=SQLOLEDB;" & CONN_STRING
On Error GoTo EH_CONN:
DB.ConnectionTimeout = 3
DB.Open CONN_STRING
If DB.State = 1 Then
Set SQL_CONN = DB
Else
GoTo EH_CONN
End If
Set DB = Nothing
Exit Function
EH_CONN:
MsgBox "서버에 연결할 수 없습니다." & vbNewLine & "인터넷 연결 또는 서버 상태를 확인하세요.", vbInformation
Set DB = Nothing
End
End Function
활용 예제
users 테이블에서 id가 1인 레코드의 이름·나이 갱신하기
Dim ConnString As String
ConnString = "Server=database.windows.net,1433;User ID:xxx..."
SQL_UPDATE ConnString, "users", "user_name,user_age", "오빠두,38", "id=1"
안내사항
전체 코드에 함께 담긴 보조 명령문 SQL_CONN·SQL_EXECUTE·SQL_UPDATE_STRING 을 모두 모듈에 추가해야 동작합니다.
값 목록의 개수가 필드 목록의 개수와 다를 경우 쿼리를 실행하지 않고 오류창을 출력합니다.
댓글 1
로그인 후 댓글을 작성할 수 있습니다.
강민준🤗
2024.08.11 13:05
좋은 자료 감사합니다.🙇♂️