在 Clarion 中处理 PostgreSQL 时间间隔可以使用 ODBC 驱动程序。首先,需要用 ODBC 连接到 PostgreSQL 数据库。然后,使用 SQL 查询语句获取 PostgreSQL 数据库的结果集,包含时间间隔字段。最后,使用 Clarion 语言中的 TIME#B 结构体来处理时间间隔数据。
以下是一个简单的示例程序,说明了如何使用 ODBC 连接到 PostgreSQL 数据库,检索时间间隔数据并将其转换为 TIME#B 格式:
program
include('Equates.clw')
MAP
MODULE('ODBC32')
SQLAllocHandle(*USHORT, *USHORT, VOID),
SQLSetEnvAttr(USHORT, LONG, VOID, LONG),
SQLFreeHandle(USHORT, USHORT),
SQLConnect(USHORT, STRING, SHORT, STRING, SHORT, STRING, SHORT),
SQLExecDirect(USHORT, STRING, LONG),
SQLFetch(USHORT),
SQLGetData(*USHORT, LONG, SHORT, **VOID, LONG, LONG),
SQLDisconnect(USHORT),
SQLError(*USHORT, *USHORT, *USHORT, *BYTE, *LONG, *BYTE, SHORT, BYTE),
MODULE('ODBCINST')
SQLConfigDataSource(HWND, SHORT, STRING, STRING),
END
CODE
OPEN(0)
DRIVER = 'PostgreSQL ANSI'
SERVER = 'localhost'
DATABASE = 'test'
UID = 'user'
PWD = 'password'
hEnv = 0
RC = SQLAllocHandle(SQL_HANDLE_ENV, 0, @hEnv)
RC = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)
hDbc = 0
RC = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, @hDbc)
CONNECT_STRING = FORMAT('DRIVER={~t|%s~t|};Server={~t|%s~t|};Database={~t|%s~t|};Uid={~t|%s~t|};Pwd={~t|%s~t|}', DRIVER, SERVER, DATABASE, UID, PWD)
RC = SQLConnect(hDbc, CONNECT_STRING, LEN(CONNECT_STRING), 0, 0, 0, 0)
SQL = 'SELECT duration FROM events WHERE event_id = 1234'
hStmt = 0
RC = SQLAllocHandle