반응형
▣ 데이터 베이스 연결 확인
데이터베이스 정보, Table 정보, 사용자 정보를 알아야 합니다. 사용자 이름으로 데이터 베이스외 연결을 확인 하는 코드 입니다
Option Explicit
Sub CheckPostgreSQLConnection()
' ADO 객체 선언
Dim conn As Object
Dim connectionString As String
' PostgreSQL ODBC 연결 문자열
connectionString = "Driver={PostgreSQL Unicode(x64)};" & _
"Server=localhost;" & _
"Port=5432;" & _
"Database=creomodel01;" & _
"Uid=postgres;" & _
"Pwd=****;" ' 실제 비밀번호로 대체하세요
' ADO Connection 객체 생성
Set conn = CreateObject("ADODB.Connection")
On Error GoTo ErrorHandler
' 데이터베이스 연결 시도
conn.ConnectionString = connectionString
conn.Open
' 연결 성공 메시지
MsgBox "데이터베이스에 성공적으로 연결되었습니다!", vbInformation, "연결 확인"
' 연결 닫기
conn.Close
Set conn = Nothing
Exit Sub
ErrorHandler:
' 에러 처리
MsgBox "데이터베이스 연결 실패: " & Err.Description, vbCritical, "연결 오류"
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
Set conn = Nothing
End If
End Sub
사용된 코드를 간략히 설명 합니다
1. 필요한 객체:
- ADODB.Connection 객체를 사용해 ODBC를 통해 PostgreSQL에 연결합니다.
- CreateObject("ADODB.Connection")로 ADO 연결 객체를 생성합니다.
2. 연결 시도:
- conn.Open을 호출하여 데이터베이스에 연결을 시도합니다.
- 연결이 성공하면 conn.State가 1(adStateOpen)로 설정됩니다.
3. 성공/실패 메시지:
- 연결 성공 시: "데이터베이스에 성공적으로 연결되었습니다!" 메시지 박스 표시.
- 연결 실패 시: 에러 메시지와 함께 실패 원인을 표시.
▣ 데이터 베이스의 테이블 읽어오기
데이터 베이스의 테이블에 저장된 값들을 엑셀로 가져오는 코드 입니다. 엑셀의 기능으로 데이터를 가공하여 다양한 정보를 얻을수 있습니다. 아래 예제는 특정 폴더(C:\PTC\WORK90) 하위에 있는 폴더 이름과 레벨을 표시한것 입니다. 또한 테이블에 입력한 날짜를 가져오도록 하였습니다.

- 스키마 이름 : DesignTeam
- 테이블 이름 : creo_folder01
Option Explicit
Sub GetTableDataFromPostgreSQLToExcel()
'// ADO 객체 선언
Dim conn As Object
Dim rs As Object
Dim connectionString As String
Dim sqlQuery As String
'// Excel 관련 변수 선언
Dim ws As Worksheet
Dim currentRow As Long
Dim recordCount As Long
Set ws = ThisWorkbook.Sheets("database") '// 현재 활성 시트 또는 특정 시트 이름으로 변경 (예: "Sheet1")
currentRow = 7
recordCount = 0
'// PostgreSQL ODBC 연결 문자열
connectionString = "Driver={PostgreSQL Unicode(x64)};" & _
"Server=localhost;" & _
"Port=5432;" & _
"Database=creomodel01;" & _
"Uid=designer;" & _
"Pwd=7777;" '// 실제 비밀번호로 대체하세요
'// SQL 쿼리 (스키마 및 테이블 명시, 대/소문자 처리)
'// 참고: * 대신 필요한 컬럼만 명시하고, 순서 보장을 위해 ORDER BY id ASC를 추가했습니다.
'// id 열을 기준으로 결과를 오름차순(ASC)으로 정렬합니다. 즉, id 값이 작은 것부터 큰 순서로 데이터가 반환됩니다.
sqlQuery = "SELECT id, folder_name, folder_description, folder_level, insert_folder_date FROM ""DesignTeam"".""creo_folder01"" ORDER BY id ASC"
'// ADO Connection 및 Recordset 객체 생성
Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
'// 기존 데이터 지우기 (필요하다면)
ws.Range(ws.Cells(7, "D"), ws.Cells(ws.Rows.Count, "I")).ClearContents
On Error GoTo ErrorHandler
'// 데이터베이스 연결
conn.connectionString = connectionString
conn.Open
'// Recordset에 쿼리 실행
rs.Open sqlQuery, conn
'// 데이터가 있는지 확인
If Not rs.EOF Then
'// 데이터 쓰기
Do While Not rs.EOF
ws.Cells(currentRow, "D").Value = recordCount '// 번호 컬럼 (순번)
ws.Cells(currentRow, "E").Value = rs("id")
ws.Cells(currentRow, "F").Value = rs("folder_name")
ws.Cells(currentRow, "G").Value = rs("folder_description")
ws.Cells(currentRow, "H").Value = CStr(rs("folder_level"))
' H열에 텍스트 서식 적용 (선택 사항)
ws.Cells(currentRow, "H").NumberFormat = "@"
ws.Cells(currentRow, "I").Value = rs("insert_folder_date")
'// *** 추가: 날짜/시간 형식 지정 ***
ws.Cells(currentRow, "I").NumberFormat = "yyyy-mm-dd hh:mm:ss"
currentRow = currentRow + 1
recordCount = recordCount + 1
rs.MoveNext
Loop
MsgBox "테이블 데이터가 성공적으로 엑셀 시트에 가져와졌습니다!", vbInformation, "성공"
Else
MsgBox "테이블에 데이터가 없습니다.", vbInformation, "결과"
End If
' 리소스 정리
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
Set ws = Nothing
Exit Sub
ErrorHandler:
' 에러 처리 및 디버깅
Debug.Print "Error Number: " & Err.Number & ", Description: " & Err.Description
MsgBox "데이터 가져오기 실패: " & Err.Description & vbCrLf & "자세한 내용은 디버그 창을 확인하세요.", vbCritical, "오류"
If Not rs Is Nothing Then rs.Close
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
End If
Set rs = Nothing
Set conn = Nothing
Set ws = Nothing
End Sub
▷ 프로그램 실행 결과

▷ 확장성
모델로 부터 다양한 정보를 API 프로그램 활용하여 데이터 베이스에 저장 가능 합니다. 저장된 데이터를 엑셀 파일로 가져올수 있습니다. 이것을 활용하여 영업부, 구매부, 생산 관리부서에서 필요한 데이터를 가져올수 있습니다.
필요에 따라 영업부, 구매부, 생산 관리부서에서 데이터를 추가 할 수 있습니다.

by korealionkk@gmail.com

반응형
'업무 자동화 > PostgreSQL' 카테고리의 다른 글
| PostgreSQL 공부하기 -사이트 (0) | 2025.08.01 |
|---|---|
| PostgreSQL] VBA로 데이터 베이스 읽기 쓰기 #4 (0) | 2025.08.01 |
| PostgreSQL] PostgreSQL 스키마에 사용자 권한을 설정 (1) | 2025.07.30 |
| PostgreSQL] 사용자 Group Role 만들기 (1) | 2025.07.29 |
| PostgreSQL] VBA로 데이터베이스 읽기 쓰기 #2 (1) | 2025.07.29 |