Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 3003|回复: 7

Lazarus 連結 Oracle 10g 出現 ORA-12154 問題

[复制链接]

该用户从未签到

发表于 2018-6-11 14:03:53 | 显示全部楼层 |阅读模式
[ Lazarus 連結 Oracle 10g 出現 ORA-12154 問題 ]

這兩天測試用 XP (Lazarus 1.6.4 內建 Oracle 元件 OracleConnection1) 來連另一台電腦上的 Oracle 10.0.2 DB
遇到一些問題, 搞了兩天終於搞定, 分享一下, 避免有人遇到跟我一樣情形
(之前連過 MS SQL 及 SQLLITE ... 都很順, 就只有連 Oracle 不順利)


前情提要
1.Client 端是 XP 電腦, 也是開發程式的電腦, 有灌了 Lazarus 開發工具 及 Oracle Client
2.有建了 udl 檔來測試 Oracle 連線, 確定可以連到另一台電腦上的 Oracle 10.0.2 DB
3.BCB 5.0 ADO , 也能從這台 XP 連到另一台電腦上的 Oracle 10.0.2 DB
4.Lazarus 1.6.4 內建 Oracle 元件 OracleConnection1 就是無法連, 出現 ORA-12154: TNS: 無法解析指定的連線 ID

5.後來換了 ZEOS 元件, 仍然無法連, 一樣是 ORA-12154 , 所以不是元件問題, 但我百思不解, 明明 udl 檔來測試 Oracle 連線是通的
6.無意間發現, 在 Lazarus IDE 環境中, 設計時期把 Object Inspector 上的 OracleConnection1 或 ZConnection1 元件相關屬性設好
再把其 Connected 設成 true , 居然可以連, 但在編譯後的執行時期, 一到 Connected:=true 的階段, 都是 ORA-12154


解決方案
1.到網路搜尋相關問題, 似乎都沒有對策
2.有人說換掉 Oracle Client, 因為已經沒步了, 姑且一試
把 OracleClient_10.2.0.1 換成 OracleClient_11.2.0 , 結果正常了
網路說高一點的 OracleClient 版本可連低版本資料庫 (Oracle 10g)
3.看起來跟 Oracle Client 有關, 跟 Lazarus 元件及版本無關
但其他程式語言又沒這問題, 可能 OracleClient_10.2.0.1 跟 Lazarus 相剋 ....XD
4.換成 OracleClient_11.2.0 後, Lazarus 內建的 OracleConnection1 & ZConnection1 都能在執行時期正常連 Oracle



補充註記
1.使用 Lazarus 內建的 OracleConnection1 或 ZOES 元件, 都需要安裝 Oracle Client
2.另有一種要錢的元件叫 ODAC ( https://www.devart.com/odac/download.html )
聽說可以不用安裝 Oracle Client 元件就能直接連 Oracle DB
3.以下為 內建的 OracleConnection1 或 ZOES 元件, 測試 OK 的 SAMPLE
Oracle DB 在另一台電腦 IP:192.168.5.12 SID 名稱叫 dream
XP 開發電腦(本機)安裝 Oracle Client 後, 在 NetManager 中設了一服務名稱 niceapdb
其實服務名稱 niceapdb 也是指到 IP:192.168.5.12 SID:dream
所以 DatabaseName 屬性有兩種設法, 一是直接設 'niceapdb' 一是設為 '192.168.5.12/dream'


測試 OK , 中文欄位亂碼
//OracleConnection1.HostName := ''; //在 ide design 模式測試發現可以不設
//OracleConnection1.DatabaseName := '192.168.5.12/dream'; //直接聯資料庫所在 IP/SID, OK
OracleConnection1.DatabaseName := 'niceapdb'; //with NetManager setup , OK
OracleConnection1.UserName := 'sa';
OracleConnection1.Password := 'sa123';
//OracleConnection1.Params.Add('codepage=UTF8'); //沒作用
OracleConnection1.Open;
SQLQuery1.PacketRecords:=-1;
SQLQuery1.SQL.Text:='SELECT * FROM "OIS"."PSM_CASHIER"';
SQLQuery1.Active:=true; //SELECT * FROM "OIS"."PSM_CASHIER"
DataSource1.DataSet:=SQLQuery1;


//測試 OK , 中文欄位正常顯示
//ZConnection1.HostName := '' ; //在 ide design 模式測試發現可以不設
ZConnection1.Port := 1521 ;
//ZConnection1.Database := '192.168.5.12/dream'; //直接聯資料庫所在 IP/SID, OK
ZConnection1.Database := 'niceapdb'; //with NetManager setup, OK
ZConnection1.User := 'sa' ;
ZConnection1.Password := 'sa123' ;
ZConnection1.Protocol := 'oracle' ;
ZConnection1.Connected:=true;
ZQuery1.FetchRow:=0;
ZQuery1.SQL.Text:='SELECT * FROM "OIS"."PSM_CASHIER"';
ZQuery1.Active:=true;
DataSource1.DataSet:=ZQuery1;
回复

使用道具 举报

该用户从未签到

发表于 2018-9-3 16:58:14 | 显示全部楼层

RE: Lazarus 連結 Oracle 10g 出現 ORA-12154 問題

OracleClient的问题,,,如果不关心版权的话,ODAC是非常好的解决方案。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2019-5-29 14:38:26 | 显示全部楼层

RE: Lazarus 連結 Oracle 10g 出現 ORA-12154 問題

我發現 VISUAL STUDIO C# 使用 ODAC 有內建簡單且免費的方法
但 LAZARUS 藥用 ODAC 需要下面這家公司提供的 COMPONENT 才能連 ORACLE
https://www.devart.com/odac/

ODAC 是 ORACLE 提供的, 但 ODAC COMPONENT 是 DEVART 公司開發的要錢的商業元件
或是有哪位前輩可以提供 LAZARUS 可以直接呼叫 ODAC 的範例, 在此先謝謝

回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 10:10 , Processed in 0.030646 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表