이 페이지에서
구문
SQL_INSERT 연결문자열, 테이블이름, 필드목록, 값목록
인수구분
형식 설명
연결문자열
필수
String
OLEDB(ADO.NET)로 연결할 연결문자열입니다.
테이블이름
필수
String
DB에서 데이터를 추가할 테이블 이름입니다.
필드목록
필수
String
테이블에서 값을 추가할 필드 목록입니다. 필드가 여러개일 경우 쉼표(,)로 구분하여 작성합니다.
예를 들어 "필드1,필드2,필드3,..." 과 같이 입력합니다.
값목록
필수
String
필드에 추가할 값 목록입니다. 값이 여러개일 경우 쉼표(,)로 구분하여 작성합니다.
값 목록의 개수는 필드 목록의 개수와 반드시 동일해야 하며, 그렇지 않을 경우 오류창을 출력합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요Sub SQL_INSERT(Connection As String, Table As String, Fields As String, Values As String)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ SQL_INSERT 함수
'▶ SQL 서버에 연결 후, 특정 테이블에 새로운 행을 추가합니다.
'▶ 인수 설명
'_____________Connection : SQL OLE DB로 연결할 연결문자열(Connection String)을 입력합니다.
'_____________Table : DB 중 데이터를 Insert 할 테이블 이름입니다.
'_____________Fields : 데이터를 추가할 대상 필드명입니다. 쉼표(,)로 구분하여 작성합니다.
'_____________Values : 추가할 데이터입니다. 반드시 Fields와 짝이 되도록 입력합니다.
'▶ 사용 예제
'SQL_INSERT "Server=database.windows.net,1433;User ID=oppadu;Password=123;", "테이블명", "필드1,필드2,...", "값1, 값2, ..."
'■ 사용된 보조명령문
'SQL_CONN
'SQL_EXECUTE
'SQL_INSERT_STRING
'###############################################################
Dim DB As Object
Set DB = SQL_CONN(Connection)
SQL_EXECUTE DB, SQL_INSERT_STRING(Table, Fields, Values)
End Sub
Function SQL_INSERT_STRING(Table As String, Fields As String, Values 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 "INSERT 쿼리가 잘못 작성되었습니다." & vbNewLine & "Fields 와 Value의 개수가 다릅니다." & vbNewLine & _
"Fields : " & Fields & vbNewLine & "Values : " & Values, vbCritical
End
End If
SQL_INSERT_STRING = "INSERT INTO " & Table & "(" & Fields & ") VALUES ("
For i = LBound(vValues) To UBound(vValues)
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_INSERT_STRING = SQL_INSERT_STRING & sValue & ","
Next
SQL_INSERT_STRING = Left(SQL_INSERT_STRING, Len(SQL_INSERT_STRING) - 1) & ");"
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 테이블에 이름·나이 값 추가
Dim ConnString As String
ConnString = "Server=database.windows.net,1433;User ID=xxx..."
SQL_INSERT ConnString, "users", "user_name, user_age", "오빠두, 38"
안내사항
엑셀 2007 이후 모든 버전에서 제공되는 ADO 라이브러리를 사용하므로 별도의 라이브러리나 드라이버를 설치하지 않아도 됩니다.
보조 명령문 SQL_CONN·SQL_EXECUTE·SQL_INSERT_STRING 이 함께 필요하며, 위 전체 코드에 모두 포함되어 있습니다.
값 목록과 필드 목록의 개수가 다르면 오류창을 출력하고 실행이 중단됩니다.
빈칸은 공백으로 입력하면 됩니다.
SQL_INSERT ConnString, "users", "user_name, user_age, user_level", "오빠두, ,100"
이런 식으로 입력해보세요.^^
그러면 null 허용시 null 그렇지 않으면 데이터형식에 따라 기본값이 입력됩니다.
감사합니다.