我需要编写一个 Openedge 11.6.4 ABL 程序来自动:
我的问题在连接部分。
这可能吗?
由于您仍在使用 OpenEdge 11.6(非常旧),您仍然可以使用 OpenEdge DataServer for ODBC。此功能已从 OpenEdge 11.7 中退出:
“OpenEdge 11.6 是带有 DataServer for ODBC 引擎的最后一个 OpenEdge 版本。”
要使用数据服务器,您需要从 Progress Software 获得此产品的许可证。
根据用例和导入频率,从 PostgresSQL 导出到纯文本文件、XML 或 JSON 并使用 ABL 程序导入可能更容易。
如果您需要频繁且可能双向的复制,我更愿意编写一个 Web 服务(使用任何语言)连接到您的 PostgreSQL 数据库并使用 REST 公开数据。
您可以使用 ADODB 和 ODBC 驱动程序
例子:
DEFINE VARIABLE objAdoCon AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE objAdoCmd AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE objAdoRS AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE cAdoSql AS CHARACTER NO-UNDO.
DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
/* ODBC Connection */
CREATE "ADODB.Connection" objAdoCon.
objAdoCon:ConnectionString = "Provider=PostgreSQL OLE DB;" +
"Data Source=myServerAddress;location=myDataBase;User ID=myUsername;password=myPassword".
objAdoCon:OPEN(,,,). /* makes the connection to the datasource */
/* RecordSet */
CREATE "ADODB.RecordSet" objAdoRS.
objAdoRS:CursorLocation = 3. // Client
objAdoRS:CursorType = 0. // ForwardOnly
objAdoRS:locktype = 3. // LockOptimistic
/* eine Start-PR locken. */
cAdoSql = "SELECT * FROM postgreTable".
objAdoRS:OPEN (cAdoSql,objAdoCon,,,).
DO WHILE NOT objAdoRS:eof:
cField = objAdoRS:FIELDS("FieldFromPostgreTable"):VALUE.
CREATE Customer.
ASSIGN
Customer.NAME = cField.
objAdoRS:MoveNext.
END.
FINALLY:
objAdoRS:CLOSE NO-ERROR.
objAdoCon:CLOSE NO-ERROR.
RELEASE OBJECT objAdoCon NO-ERROR.
RELEASE OBJECT objAdoRS NO-ERROR.
ASSIGN objAdoCon = ?.
ASSIGN objAdoRS = ?.
END FINALLY.
其他一些代码示例:
https://community.progress.com/s/question/0D74Q000007tLORSA2/detail https://www.w3schools.com/asp/ado_connect.asp