엑셀 프로그래밍을 하다 보면 데이터베이스를 사용해야 하는 경우가 많습니다.
그렇다면 데이터베이스에 연결한 다음 데이터베이스에서 데이터를 읽는 방법은 무엇입니까?
VBA는 SQL SERVER 데이터베이스 인스턴스에 연결됩니다.
Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer '데이터베이스에 연결할 문자열 strConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[ 사용자 ];비밀번호=[비밀번호];초기 카탈로그=[데이터베이스];데이터 소스=[데이터베이스 IP 주소 또는 데이터베이스 서버 이름];연결 Timeout=720; " '쿼리문, sql문이 너무 길면 strSQL=strSQL+를 이용해서 여러 문단으로 나누어진 문장을 연결하면 됩니다. 문장이 너무 짧으면 한 줄만 쓰면 됩니다. strSQL = "Hy_KPI_Shop_Dept_WeekRpt에서 * 선택 " strSQL = strSQL+"where sdate='2014-01-01' sdate,shopid별 주문 " Set conn = New ADODB.Connection Set ds = New ADODB.Recordset '데이터베이스 연결 열기 conn.Open strConn '이 문장과 데이터베이스 연결 문자열에 연결 Timeout=720은 문이 오랫동안 실행되는 경우 이 두 문장이 VBA의 대기 시간을 연장할 수 있음을 의미합니다. 이 두 문장이 없으면 VBA가 쿼리 시간 초과를 보고하는 경우가 많습니다. conn.CommandTimeout = 720 With ds '쿼리 문에 따라 데이터를 얻습니다. strSQL을 엽니다. conn '모든 열 헤더 추가를 자동으로 제어합니다. For col = 0 To ds.Fields.Count - 1 'Offset( 0, col)이어야 합니다. 이 문장은 제목이 A1 셀부터 첫 번째 행에 기록된다는 의미입니다. 제목 행을 작성하고 싶지 않은 경우 다음 문장을 주석 처리하면 됩니다. Worksheets("매장 내 각 클래스에 대한 KPI 주간 보고서").Range("A1").Offset(0, col).Value = ds.Fields(col).Name Next '데이터의 모든 행을 추가합니다. 이 문장은 다음을 의미합니다. 첫 번째 행은 셀 A1부터 시작하지만 제목 행은 첫 번째 행에 기록되기 때문에 이 행은 실제로 제목 아래 행부터 기록됩니다. Worksheets("sheet1").Range("A1").Offset(1, 0).CopyFromRecordset ds End With '데이터베이스 연결을 닫고 리소스 지우기 Set ds = Nothing conn.Close Set conn = Nothing