關於delphi聯接oracle數據庫問題(100分)

  • 主题发起人 empty023
  • 开始时间
E

empty023

Unregistered / Unconfirmed
GUEST, unregistred user!
我現在做的程序是用dbexpress控件聯接oracle數據庫,然後通過oracle客戶端程序,才能使其它電腦聯接我的數據庫。想請教高手怎麼用delphi寫個程序,代替oracle客戶端,在其它電腦上用我寫的程序就能聯接我的數據庫。
 
用ODAC连ORACLE可以不需要装ORACEL的客户端。
大多数应用程序使用 OCI 的ODAC 标准方式来连接 Oracle 数据库服务器。这是使用第三方开发语言设计 Oracle 应用程序最常用的方法。 所有的 OCI 接口都作为内部库来使用,使得编译生成的应用程序非常小。但是,这需要在客户机上安装 Oracle 客户端软件,这使得安装和管理要花费额外的开销。 有时,安装 Oracle 客户端程序甚至是不可能的。 例如,如果你需要在远程计算机上设置你的应用程序,你不能提供特殊的文件支持。

ODAC Net 允许你的应用程序直接通过 TCP/IP 协议来连接 Oracle,而不需要 Oracle 客户端软件。运行使用 ODAC Net 的应用程序,仅需要有一个支持 TCP/IP 协议的操作系统。
使用 ODAC Net 连接 Oracle 服务器,你需要知道 Oracle 服务器的地址,监听端口号以及数据库实例名称。
在你的应用程序中使用 Net 选项前,你只需要设置 TOraSession 对象的选项 Net 为 True 且指定它的Server 属性为指定的数据库。如果使用 ODAC 的标准方式通过 OCI 来连接数据库,你必须设置 Server 属性为 TNS 别名,但现在使用 ODAC 的 Net 选项,你只需要指定数据库字符串,格式如下: Host:port:SID.

这里, Host 指服务器地址, Port 指服务器监听端口号, SID 指特定的系统实例名称。

这里有个例子示范不使用 OCI 而 连接数据库:

var
Session: TOraSession;
. . .
Session.Options.Net := True;
Session.Username := 'Scott';
Session.Password := 'tiger';
Session.Server := '205.227.44.44:1521:eek:rcl';
Session.Connect;

注意:这些是你的应用程序要支持 Net 选项时所必须的。你不需要重写应用程序的其它部分。除此之外,你还可以在任何时候通过 OCI 连接 Oracle 。要实现它,你仅需要设置 TOraSession.Options.Net 选项为 False.

OCI 与 Net:

使用 ODAC 标准方式和 Net 方式编译的应用程序,在程序大小和运行速度上非常相似。使用 Net 选项在安全方面,与使用 OCI 的 Oracle 的加密方式并不相同。 Net 使用 DES 来验证安全性,现在它并不支持 Oracle 的加密方式。

ODAC Net 的优势:

- 不需要安装和管理 Oracle 客户端软件;
- 减少系统需求。

ODAC Net 选项的限制:

仅支持通过 TCP/IP 协议来连接 Oracle;
不支持 Oracle 8 的对象,数组;
不支持 TOraLoader 的直接装载;
请注意:我们并不能保证 ODAC Net 可以在所有网络上的所有 Oracle 服务
 
我如果用doac來聯接數據庫,那我以前寫的程序不是要重寫?有沒有什麼辦法,自己寫一個用dbexpress通過odbc聯接oracle數據庫的程序,請高手指教,最好能附上代碼。
 
我如果用doac來聯接數據庫,那我以前寫的程序不是要重寫?有沒有什麼辦法,自己寫一個用dbexpress通過odbc聯接oracle數據庫的程序,請高手指教,最好能附上代碼
 
首先我定義index: integer;Node: TTreeNode;然後用index of 方法找到字符串的位置Index := List.IndexOf(Query.FieldByName('PID').AsString);,接著把得到的字符串位置轉換位treenode,並增加節點,並將本節點所對應的記錄標簽數據放到節點所提供的附加數據中Node :=TreeView.Items.AddChildObjectFirst(TTreeNode(List.Objects[Index]),Query.FieldByName('CAPTION').AsString, query.GetBookmark);
如果數據庫表裡定義pid是integer 程序能正常運行,如果定義pid為varchar2類型,就會有list index out of bounds的錯誤,我想應該是在轉換treenode時的方法沒用對,但又不知道怎麼解決,請知道的幫忙解決。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部