各位大侠:
     小弟最近由于一个项目由.NET转到Delphi了,用的Delphi 7+ADO +Access。不知道怎么用TADOConnection控件实现远程数据库的连接,如果大家知道,请说一下,非常感谢!!!

解决方案 »

  1.   

    //转的别人的贴子,网上有很多这样的资料,查一下就出来了,下面实例是最基本的。一、三层服务器程序的建立 
    提前说明: 
    (1)建立一个基本的服务器程序和一个客户端程序,返回一个动态查询的数据给客户端。 
    (2)服务器上的Query1的SQL语句是从客户端传过来的。 
    (3)基于BDE和Oracle数据库的三层。 
    1、新建立一个项目,在项目加入一个远程数据模块“Remote Data”,名称为:ZDRHYJServer。 
    2、在ZDRHYJServer中加入一个DataBase1控件,并设置其Name为:ZDRHYJServerDatabases, 
    双击DataBase1控件,在弹出的窗口中,去除窗口中的“Login prompt”(否则激活时会出现登录窗口), 
    选择“Driver name”为“Oracle”,然后单击“Defaults”,在编辑框中设置其属性如下: 
    SERVER NAME=ORAdb_11 
    USER NAME=hyj 
    NET PROTOCOL=TNS 
    OPEN MODE=READ/WRITE 
    SCHEMA CACHE SIZE=8 
    LANGDRIVER= 
    SQLQRYMODE= 
    SQLPASSTHRU MODE=SHARED AUTOCOMMIT 
    SCHEMA CACHE TIME=-1 
    MAX ROWS=-1 
    BATCH COUNT=200 
    ENABLE SCHEMA CACHE=FALSE 
    SCHEMA CACHE DIR= 
    ENABLE BCD=FALSE 
    ENABLE INTEGERS=FALSE 
    LIST SYNONYMS=NONE 
    ROWSET SIZE=20 
    BLOBS TO CACHE=64 
    BLOB SIZE=32 
    OBJECT MODE=TRUE 
    PASSWORD=hyj 
    设置完毕后选择“OK”保存。 关于BDE的说明: 
    (A)、设置服务名、用户名和口令如下: 
       SERVER NAME=ORAdb_11 //在使用前要在Oracle中配置一个连接数据库的Oradb_11的服务名。 
       USER NAME=hyJ 
       PASSWORD=hyj 
    (B)、如果DataBase1控件设置正确,在DataBase1的属性窗口中,双击其“Connectioned”属性,即设置为True,激活DataBase1连接。 
       如果设置错误,将弹出“未连接到Oracle”的错误信息。 
    (C)、最后部署时时,可能必须设置Connectioned为False,否则出错。 
    (D)、系统将自动创建一个*_TLB.pas文件。(该文件在进行服务器上的函数打包时很有用,详见下面的内容。) 3、在数据模块中加入一个查询Query1,该控件用于接收客户端传来的SQL语句,并执行查询。 
    设置其Databasesname属性为:ZDRHYJServerDatabases。 
    由于其SQL语句从客户端传入,所以不用设置其SQL语句。 
    说明: 
    (A)由于Query1的SQL语句是从客户端传来的,所以对于各种临时的查询采用这种方法很管用。可以执行任何查询。 
    (B)如果只执行一个SQL语句,就可以把SQL语句写死在其SQL属性中。 4、加入一个DataSetProvider1控件,该控件用于和客户端建立。设置其DataSet属性为:Query1。 
    在DataSetProvider1的“Option”属性下,有很多的设置内容,要从客户端接收SQL语句, 
    必须设置其PoAllowCommandText为True(这一点很重要,否则提示出错信息)。 
    5、加入一个ListBox1控件,该控件用于显示连接数据库的信息。 
    6、编译程序,到此服务器程序建立完毕,运行该程序。(说明:此时可以不用运行scktsrvr.exe程序。) 
    7、三层程序的部署要注意的问题: 
    (1)部署服务器程序时,要在服务器要重新编译、运行才行(服务器必须安装Delphi7程序)。 (2)为了使程序安全运行,其端口号建议在4000以上,以免端口被其它程序占用出现错误。 
    到此,一个基本的服务器程序建立完毕。 二、客户端程序的建立。 
      提前说明: 
    (1)客户端数据模块中采用DCOMConnection控件和远程的数据模块建立连接。 
    (2) 1、新建一个工程,添加一个数据模块:(File/New/Data Module) 
    2、在数据模块中添加一个DCOMConnection1控件(在DataSnap控件页中),用于和远程的数据模块建立连接。 
    (1)设置DCOMConnection1的属性: 
    在“ComputerName”后单击按钮,弹出“浏览计算机”窗口,从中选择部署有服务器程序的“计算机名”, 
    (如:Zdr-qn30vok6sxt),也可以直接输入服务器的IP地址,如:192.168.4.4 
    (2)设置ServerName属性: 
    单击ServerName属性后的小箭头,弹出上面的计算机中所有的服务名,从中选择“HYJMYServer.ZDRHYJServer”, 
    此时,“ServerGUID”将自动显示出来。 
    (3)激活远程数据模块: 
    如果远程服务器程序没有运行,设置DCOMConnection1的“Connectioned”属性不true时,将自动激活服务器端程序 。 
    3、在数据模块中添加一个ClientDataSet1控件(在Data Access控件页上),用于给服务器的远程数据模块中传递SQL语句, 
    并接收服务器上的Query1执行查询后返回的数据。 
    设置ClientDataSet1属性如下: 
    RemoteServer属性为:DCOMConnection1 
    ProviderName属性为:DataSetProvider1 
    (说明:先设置DCOMConnection1的Connectioned为False,当单击ProviderName后的小箭头时, 
    将自动激活服务器端程序,并列出可选的服务器端程序的所有的DataSetProvider控件列表) 
    此时,运行客户端程序,可自动激活服务器端程序。 
    4、在数据模块中添加一个DataSource1控件,设置其DataSet属性为ClientDataSet1, 
    该控件用于将返回的数据提供给下面的DBGrid1控件。 
    5、添加一个DBGrid1控件,用于显示返回的数据。在主窗口的Uses中加入数据模块:uses ClientDM; 
    设置DBGrid1控件的DataSource属性为:DataModule1.DataSource1。 
    6、到此,客户端程序的设置完毕,编译程序。 三、客户端程序的运行。 
      提前说明: 
    (1)在上面的程序中,建立了服务器程序和客户端程序,但查询的SQL语句没有输入, 
    在下面,我们通过客户端主窗口的一个按钮来传递一个SQL语句给服务器上的Query1,并将查询的结果显示出来。 
    (2) 
    1、在窗口的SHOW事件中添加代码如下: 
    procedure TFrmClientMain.FormShow(Sender: TObject); 
    begin 
      try 
      if not ClientDM.DataModule1.DCOMConnection1.Connected then 
     ClientDM.DataModule1.DCOMConnection1.Connected; 
     except 
      showmessage('数据库连接“ClientDM.DataModule1.DCOMConnection1.Connected”时出错!!'); 
     abort; 
     end; 
     memo1.Text:='select * from Cust_info where Custname like '+#39+'%众%'+#39; 
    end; 2、新建一个按钮,在其Caption为:“动态SQL查询”。双击按钮,输入代码如下: 
    procedure TFrmClientMain.Button1Click(Sender: TObject); 
    begin 
     ClientDM.DataModule1.ClientDataSet1.close; 
     ClientDM.DataModule1.ClientDataSet1.CommandText:=edit1.Text;// 
     ClientDM.DataModule1.ClientDataSet1.Open; 
     FrmClientMain.DBGrid1.DataSource:=ClientDM.DataModule1.DataSource1; 
     FrmClientMain.Label1.Caption:='查询的记录总数为:'+inttostr(ClientDM.DataModule1.ClientDataSet1.RecordCount); 
    end; 
    3、运行客户端程序,点击按钮查询后,在Dbgrid1表格显示出查询的数据。 说明:此处有个奇怪的问题: 
    如果在服务器的Query1中,如果没有设置SQL语句,在运行客户端时就会出现“No SQL StateMent available”的错误, 
    如果先设置该SQL语句如:“select * from cust_info”,运行一次客户端后(也可能是服务器程序),再删除该SQL语句,就不会出现错误了。