kemyliu 发表于 2025-10-6 11:56:57

PostgreSQL数据库的读取|查询|增加|删除【已解决】

本帖最后由 kemyliu 于 2025-10-11 08:43 编辑

现在的数据库都用PostgreSQL了,在我们论坛和英文论坛搜了一圈也没发现有PostgreSQL的UDF,试了下用ADO.au3,但是没法链接数据库,那位大神有PostgreSQL数据库的读取|查询|增加|删除,帮忙分享一下。 感谢!!

下面是ADO.au3 UDF的链接。
ADO.au3 UDF - BETA - Support Topic - AutoIt Projects and Collaboration - AutoIt Forums;~ $Driver='{PostgreSQL Unicode(x64)}'
;~ $Server='xxxxxxxx'
;~ $Port='5432'
;~ $DB='Table'
;~ $User='postgres'
;~ $Password='postgres'
; 数据库连接函数
Func ConnectDatabase($User, $Password, $DB, $Server, $Driver = '{PostgreSQL Unicode(x64)}', $Port = '5432')
        $ConnectionStr = "Driver=" & $Driver & ";" & _
                        "Server=" & $Server & ";" & _
                        "Port=" & $Port & ";" & _
                        "Database=" & $DB & ";" & _
                        "Uid=" & $User & ";" & _
                        "Pwd=" & $Password & ";" & _
                        "Option=3;"
        Local $dbConn = ObjCreate("ADODB.Connection") ; 创建连接对象
        If Not IsObj($dbConn) Then
                ConsoleWrite("Error: ADODB Connection Fail!!" & @CRLF)
                Return 0
        EndIf
        ConsoleWrite("Contact to DB: " & $ConnectionStr & @CRLF)
        $dbConn.Open($ConnectionStr) ; 尝试打开连接

        ; 捕获连接错误
        If @error Then
                ConsoleWrite("Error: Connect Fail " & @error & @TAB & $ConnectionStr & @CRLF)
                Return 0
        EndIf
        Return $dbConn
EndFunc   ;==>ConnectDatabase


; 数据库查询函数
Func ExecuteQuery($dbConn, $querySQL)
        Local $rs = $dbConn.Execute($querySQL) ; 执行查询
        If Not IsObj($rs) Then
                ConsoleWrite("SQL Ru Fail: " & @error & @CRLF)
                Return 0
        EndIf

        ; 计算结果行列数量并存储于二维数组
        Local $result ; 初始化二维数组结构
        Local $rowsCount = 0
        Local $columnsCount = $rs.Fields.Count

        ; 动态创建二维数组字段
        While Not $rs.EOF
                ReDim $result[$rowsCount + 1][$columnsCount] ; 增加新行
                For $columnIndex = 0 To $columnsCount - 1
                        $result[$rowsCount][$columnIndex] = $rs.Fields($columnIndex).Value
                Next
                $rowsCount += 1
                $rs.MoveNext
        WEnd
        $rs.Close
        Return $result
EndFunc   ;==>ExecuteQuery

; 执行不返回结果的SQL (插入、更新、删除)
Func ExecuteNonQuery($dbConn, $nonQuerySQL)
        ; 检查数据库连接对象有效性
        If Not IsObj($dbConn) Then
                ConsoleWrite("Error: Invalid Database Connection!" & @CRLF)
                Return 0
        EndIf

        Local $rowsAffected = -1 ; 基于 ADODB.Connection.Execute 的返回值初始化受影响的行的变量
        Local $rs ; 捕获可选的记录集(通常为空)

        ; 执行 SQL 语句
        $rs = $dbConn.Execute($nonQuerySQL, $rowsAffected) ; ADODB Execute 方法返回受影响行数
        If @error Then
                ConsoleWrite("SQL Execution Error! SQL: " & $nonQuerySQL & " | Error Code: " & @error & @CRLF)
                Return 0
        EndIf

        ; 输出受影响的行数到控制台
        ConsoleWrite("SQL Executed Successfully. Rows Affected: " & $rowsAffected & @CRLF)
        Return $rowsAffected ; 返回受影响的行数
EndFunc   ;==>ExecuteNonQuery



; 数据库连接关闭函数
Func CloseDatabase($dbConn)
        If IsObj($dbConn) Then $dbConn.Close
EndFunc   ;==>CloseDatabase

; 格式化查询结果显示
Func FormatQueryResult($queryResult)
        If Not IsArray($queryResult) Then Return "未查询到结果"
        Local $formatted = ""
        For $i = 0 To UBound($queryResult, 1) - 1 ; 遍历行
                For $j = 0 To UBound($queryResult, 2) - 1 ; 遍历列
                        $formatted &= $queryResult[$i][$j] & "|" ; 用分隔符“|”连接每列
                Next
                $formatted &= @CRLF ; 换行
        Next
        Return $formatted
EndFunc   ;==>FormatQueryResult


找不到可用的UDF,自己用AI写了一个,自用版,分享给发家吧。





yohoboy 发表于 2025-10-7 02:16:39

貌似 有更新檔到 2.1.19 BETA
https://www.autoitscript.com/forum/files/file/389-adoau3-udf/?do=download
還沒玩過PostgreSQL ,你先下載 最新版看看

kemyliu 发表于 2025-10-7 08:16:28

yohoboy 发表于 2025-10-7 02:16
貌似 有更新檔到 2.1.19 BETA
https://www.autoitscript.com/forum/files/file/389-adoau3-udf/?do=downl ...

我就是下载的2.1.19版的,就是连不上数据库,里面的案列也是参考了还是不行
页: [1]
查看完整版本: PostgreSQL数据库的读取|查询|增加|删除【已解决】