VBA, VB.NET For Creo

Creo Parameter <=> PostgreSQL Table #7

ToolBOX01 2025. 1. 4. 16:53
반응형

PostgreSQL Table에 넣는 기능을 생성 합니다.

 

▷ Date Modified 항목의 데이터베이스 테이블 유형 정의

Windows 파일의 수정 날짜를 PostgreSQL 테이블에 저장하려면 적절한 데이터 유형을 선택해야 합니다. 파일 시스템의 시간 정보는 일반적으로 매우 정밀하며, 특정 시간대를 가지고 있을 수 있습니다. PostgreSQL은 다양한 날짜 및 시간 관련 데이터 유형을 제공 합니다.

PostgreSQL에서 Windows 파일 수정 날짜를 저장하기 위한 일반적인 데이터 유형은 다음과 같습니다.

1. timestamp with time zone:

  • 파일 시스템에서 제공하는 정확한 시간과 시간대 정보를 모두 저장하기에 적합합니다.
  • 시간대를 명시적으로 저장하므로, 다른 시간대의 데이터와 비교하거나 변환하기 용이합니다.
  • 예시: 2023-11-22 15:34:05+09 (한국 표준시)

2. timestamp without time zone:

  • 시간대 정보 없이 시간만 저장합니다.
  • 특정 시간대를 가정하고 데이터를 저장하는 경우에 사용할 수 있습니다.
  • 예시: 2023-11-22 15:34:05

3. date:

  • 날짜만 저장하며, 시간 정보는 버립니다.
  • 파일이 수정된 날짜만 기록하고 시간은 중요하지 않은 경우에 사용할 수 있습니다.
  • 예시: 2023-11-22

어떤 데이터 유형을 선택해야 할까요?

  • 정확한 시간과 시간대 정보가 필요한 경우: timestamp with time zone을 사용합니다.
  • 시간대 정보는 필요 없지만 시간까지 저장해야 하는 경우: timestamp without time zone을 사용합니다.
  • 날짜만 필요한 경우: date를 사용합니다.

▷ 데이터베이스  테이블 정의 

 

기본 코드

Sub InsertDataToPostgreSQL()
    Dim conn As Object
    Dim query As String
    Dim lastRow As Long
    Dim i As Long
    Dim PostWS As Worksheet
    Set PostWS = ThisWorkbook.Worksheets("File_List")

    ' PostgreSQL ODBC 연결 문자열
    Dim connectionString As String
    connectionString = "Driver={PostgreSQL Unicode(x64)};" & _
                       "Server=localhost;" & _
                       "Port=5432;" & _
                       "Database=creomodel01;" & _
                       "Uid=postgres;" & _
                       "Pwd=****;"

    ' ODBC 연결 열기
    Set conn = CreateObject("ADODB.Connection")
    On Error GoTo ErrorHandler
    conn.Open connectionString

    ' 데이터 삽입
    With PostWS
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' A열 기준 마지막 데이터 행 찾기

        For i = 1 To lastRow ' 데이터가 2행부터 시작한다고 가정
            Dim modelname As String
            Dim modeltype As String
            Dim modellocation As String
            Dim datemodified As Variant
            Dim formattedDate As String

            ' 셀 데이터 읽기
            modelname = Replace(.Cells(i + 7, "B").Value, "'", "''") ' 특수문자 이스케이프
            modeltype = Replace(.Cells(i + 7, "D").Value, "'", "''")
            modellocation = Replace(.Cells(i + 7, "C").Value, "'", "''")
            datemodified = Replace(.Cells(i + 7, "E").Value, "'", "''")

            ' 데이터가 비어 있는 경우 건너뛰기
            If IsEmpty(datemodified) Or datemodified = "" Then
                Debug.Print "비어 있는 데이터 - 행 번호: " & i + 7
                GoTo SkipRow
            End If

            ' 날짜 형식 유효성 검사
            If IsDate(datemodified) Then
                formattedDate = Format(CDate(datemodified), "yyyy-mm-dd HH:nn:ss")
            Else
                ' 유효하지 않은 데이터가 있는 경우 로그 작성 및 건너뛰기
                Debug.Print "유효하지 않은 데이터 - 행 번호: " & i + 7
                MsgBox "유효하지 않은 날짜 형식이 발견되었습니다. 행 번호: " & i + 7, vbExclamation
                GoTo SkipRow
            End If

            ' SQL 쿼리 작성
            query = "INSERT INTO ""DesignTeam"".""modelinfo"" (modelname, modeltype, modellocation, datemodified) " & _
                    "VALUES ('" & modelname & "', '" & modeltype & "', '" & modellocation & "', '" & formattedDate & "');"

            ' 디버그용 쿼리 출력
            Debug.Print query

            ' SQL 실행
            conn.Execute query

SkipRow:
        Next i
    End With

    ' 연결 닫기
    conn.Close
    Set conn = Nothing
    MsgBox "데이터베이스에 데이터가 성공적으로 삽입되었습니다."
    Exit Sub

ErrorHandler:
    MsgBox "오류 발생: " & Err.Description, vbCritical
    If Not conn Is Nothing Then conn.Close
    Set conn = Nothing
End Sub

 

▷ 프로그램 실행 결과

데이터 베이스 입력 프로그램은 AI를 이용하여 작성 하였습니다. PostgreSQL 테이블 구성도 AI의 도움을 받아 작성 하였습니다. 만일 AI의 도움이 없다면 코드를 작성 하는데 수 많은 시간과 노력이 필요 합니다.

by korealionkk@gmail.com