iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
Software Development

Genero Packages - 可接替4GL的LowCode商業語言系列 第 4

[FGL] 可連結資料庫的種類與連線方法

  • 分享至 

  • xImage
  •  

既然是從 INFORMIX 剝離出來的工具,應該連結資料庫的能力是強大的。本段落我們檢視一下Genero連結資料庫的能力。

市面上常用的資料庫,都有自己努力的強項,個別的指令也稍微有些不同。為了最大化能共通於這些資料庫,以做到『Write Once, Use Everywhere』,Genero FGL具有自開發的『共通性資料庫介面 ODI, Open Database Interface』,以 INFORMIX 指令為基準 (因為來自於 INFOMIX ),將其他資料庫具有的些微差異,利用 ODI 進行轉譯,概略流程如下:
https://ithelp.ithome.com.tw/upload/images/20210903/20051169moOCaveFDG.png
透過 ODI 的轉換,資料庫內包含數據型態、SQL語法、指令等,能在最大限度下求同,但仍舊保持了使用 PREPARE 方法,使得特殊指令仍在 Genero內能被使用,滿足『優化』的需求,此為存異。

FGLPROFILE

FGL套件的設定檔案是 FGLPROFILE,在這裡可以指定許多必要的設定,今天專門針對『資料庫的連線』進行說明。

FGLPORIFLE採用 entry 的方式設定 (非INI模式),行首 # 字號時代表為註解

  • dbi.default.driver = "" #預設連結的 db 種類驅動程式,安裝時有詢問就會補上
    此設定可以參考 $FGLDIR/dbdrivers 路徑下設定,若為 ORACLE 則通常為 dbmora (注意部分Genero須帶版號)
  • dbi.database..X #指定資料庫連線字串, 可隨產品需求自行定義,X 則是設定帳號密碼等訊息,不同資料庫列出差異於下方

Genero各版本可對接的數據庫

Genero可對接 IBM DB2 / INFORMIX / MS SQL Server / ORACLE / MySQL / PostgreSQL / SAP Hana / SQLite / Sybase ASE (以上按照名稱排序),但是支持版本各有不同,以下挑選部分資料庫作為簡介對象

資料庫廠牌 Genero 2.40 Genero 2.50 Genero 3.20
ORACLE 8.x / 9.x / 10.x / 11.x 9.2 / 10.x / 11.x / 12x 11.x 以上全版本
INFORMIX 5.x / 7.x / 8.x / 9.x / 10.x / 11.x 5.x / 7.x / 8.x / 9.x / 10.x / 11.x 5.x以上全版本
MS SQL Server 2005 / 2008 / 2012 2005 / 2008 / 2012 2012以上全版本,Azure SQDBL V12
PostgreSQL 8.x.y / 9.x.y 8.x.y / 9.x.y 9.6 / 10 / 11 / 12
SQLite 3.5.x / 3.6.x 3.5.x / 3.6.x 3.x

Genero端連線方法

連線到資料庫時,最重要的就是連線字串的設定。包含連結的資料庫主機位置 (port) 、登入資料庫的帳號密碼,以及對應需使用的字元組等環境變數。
^ 例如 ORACLE 資料庫會將相關訊息以 ORACLE_SID 含括成為一組設定時,則須依照該資料庫要求進行設定。

使用靜態的 FGLPROFILE 設定

Genero支持靜態的設定檔,即透過 FGLPROFILE 進行連線字串的設定。FGLPROFILE的存放有兩組路徑:$FGLDIR/etc/fglprofile 與 $FGLPROFILE 指定檔案,遇有同樣的設定時,後者可壓過前者;同檔案內衝突時,下方設定壓過上方設定

使用動態的 CONNECT 指令設定

若需要連結的資料庫眾多,或是需要動態設定,則可以在程式內部使用 CONNECT 指令
語法
『CONNECT TO連線對象+ODI驅動程式名稱 USER 連線帳號 USING 連線密碼』
註:連線對象依照不同資料庫有不同需求。部分資料庫如SQLite無帳號密碼則可省略

以下將以 Genero 3.20 為例說明個別資料庫連線注意事項

本文摘錄需特別關注要點進行說明與介紹,需大量採用或作為生產環境時,仍應詳讀FGL的ODI文件,該文件內均會詳列連線時,DB的特殊之處、須採用的特殊語法、如何將原有程式或查詢語句進行轉換為 ODI 通用語句。

ORACLE

連線前

需在 Genero 所在主機安裝完成對應的 ORACLE Client 軟件,並配置 tnsname.ora,確認ORACLE_SID / ORACLE_HOME 等必須存在的環境變數時,可進行 Genero 端設定

FGLPROFILE設定
dbi.database.dbname.driver = "dbmora"
dbi.database.dbname.source = "stock"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"
dbi.database.dbname.schema= "登入SCHEMA"

INFORMIX

連線前

驅動程式配置完成後,需確認 INFORMIXSERVER 環境變數是否已完成配置

因為源自於 INFORMIX,所以在 FGLPROFILE 中指定驅動程式即可

PostgreSQL

連線前

需安裝好client,且必須完成下列環境變數的設定

  • PGHOST PostgerSQL資料庫所在IP/Domain
  • PGPORT PostgreSQL資料庫需要通信埠 (預設為5431可在db端新增額外區或調整)
  • PGDATABASE 預期要使用的database
  • PGHOME 若DB與Genero裝在同一台時,指向PostgreSQL安裝路徑用的
  • PGLOCALDIR 若DB與Genero裝在同一台時,指向語系檔用的
  • PGDATA 若DB與Genero裝在同一台時,指向data file存放路徑
FGLPROFILE設定
dbi.database.dbname.driver = "dbmpgs"
dbi.database.dbname.source = "test1"   #或用dbname[@host[:port]]
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"

MS SQL Server

連線前

SQL Server在2.40與更早前的版本,有支持 open source的FREETDS與Easysoft 的連線,此兩種連線需透過 OPEN ODBC的協助。設定上較為繁雜且軟件為社群維護,可能會有維護窗口的顧慮。可考慮直接使用微軟推出的 Linux 版本SQL Server驅動 SNC (SQLserver Native Client) 。
依據 Genero 官網要求,SQL Server連線前應先確定 Linux 上是否已完成對應驅動程式安裝的最低版本要求如下

FGLPROFILE設定
dbi.database.dbname.driver = "dbmsnc"
dbi.database.dbname.source = "test1"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"

SQLite

連線前

單機文件型資料庫,只需確認套件已安裝即可

FGLPROFILE設定
dbi.database.dbname.driver = "dbmsqt"
dbi.database.dbname.source = "/opt/myapp/stock.dbs"

若完成FGLPROFILE的設定後,即可令程式進行連線

要驗證連線時,可先利用 DATABASE 指令進行連線,依據上方的FGLPROFILE設定,以『dbname』為範例,測試連線如下

MAIN
   DEFINE cnt INTEGER
   DATABASE dbname
   SELECT COUNT(1) INTO cnt FROM hello_table 
   IF cnt > 0 THEN
     DISPLAY “CONNECT OK!”
   END IF
END MAIN

即可確認 DB連線成功。


上一篇
Genero Package 套件安裝與更新方法
下一篇
[GAS] GAS 應用服務器的啟動與 demos.html
系列文
Genero Packages - 可接替4GL的LowCode商業語言32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
尾椎
iT邦新手 5 級 ‧ 2022-08-27 07:04:55

實際測試發現儘管官方文件寫 driver 就是 xxx.so 的xxx,但設定上去之後卻會有無法載入driver的錯誤,是否可以幫忙解惑一下?

我是在AIX 7.1上run,genero 版本是 2.50,postgres則是裝在另一台ubuntu上,AIX有需要裝postgres client嗎?

<root:/usr/informix/genero250/fgl/etc> ls -al /usr/informix/genero250/fgl/dbdrivers/dbmpgs92*
-rwxr-xr-x    1 tiptop   informix      62765 11月 16 2013  /usr/informix/genero250/fgl/dbdrivers/dbmpgs92x.so

<root:/usr/informix/genero250/fgl/etc> cat fglprofile | grep pgerp
dbi.database.pgerp.driver="dbmpgs92x"
dbi.database.pgerp.source="erp"
dbi.database.pgerp.username ="postgres"
dbi.database.pgerp.password ="postgres"

<root:/usr/informix/genero250/fgl/etc> fgldbsch -db pgerp                                    
SQL: CONNECT
 | 4gl source      : fgldbslib.4gl line=748
 | loading driver  : [/usr/informix/genero250/fgl/dbdrivers/dbmpgs92x]
 | Dynamic linker error: [Not a directory]...
Connection to database 'pgerp' failed.
      -6366: Could not load database driver dbmpgs92x. Set FGLSQLDEBUG to get more details.

我要留言

立即登入留言