通过 WinSocket 架设三层应用程序 , 除了使用 TSocketConnection 组件外还需要 TDataSetProvider 将 两端的 DataSet 连接起来.
步骤如下:
Server 端:
1. 创建一个新的 Project , 命名为 SCKTServer, 同时会有一个 MainForm 窗体.
2. 添加 Remote Data Module , 命名为 RDMServer.
3. 在 RDMServer 需添加 3个数据组件:
一个 TADOConnection , 命名为 Con1, 设置其 ConnectionString 为如下: Provider=SQLOLEDB.1;User ID=sa;Initial Catalog=数据库名;Data Source=SqlServer服务器名; (注意因为sa密码为空,所以没有密码项).
设置LoginPrompt = False, 不需要提示输入密码.
设置Connected = True , 测试一下是否可以正常连接 SqlServer 数据库.
一个 TADODataSet , 命名为 ds1, 设置 Connection 为 Con1;
一个 TDataSetProvider , 命名为DSProvider, 设置 DataSet 为 ds1 ; 设置 Option 中的 poAllowCommandText = True , 意为允许 Client 端DataSet 可以 设置 Sql 语句操作数据表.
Ok , 编译运行一下 , 即注册一下服务.
Client 端:
1. 创建一个新的 Project , 命名为 SCKTClient, 同时会有一个 MainForm 窗体.
2. 在窗体上添加一个 TSocketConnection , 设置 Address 为服务器 IP ,这里是本机, 为 127.0.0.1; 设置 ServerName 为 Server 端数据模块, 这里是: SCKTServer.RDMServer; 因为 服务以及注册, 这里是通过列表选择出来的.
3. 在窗体上添加一个 TClientDataSet , 命名为 dsClient, 设置 ProviderName为 Server端的TDataSetProvider : DSProvider;
设置其CommandText 为 Sql 命名, 如: SELECT * FROM 数据表名
4. 以后就是和一般数据库应用程序一样, 添加 DataSource 和 DBGrid 和其他数据库组件.
5. 最后是添加连接和断开的 2个 Button 及简单代码:
procedure TForm1.btn1Click(Sender: TObject);
begin
if dsClient.CommandText ='' then Exit;
con1.Open;
dsClient.Open;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
con1.Close;
dsClient.Close;
end;
OK, 以上基本完成.
本机测试一下, 先打开$DELPHI/Bin 下的 ScktSrvr.exe (运行于服务端), 再运行 Client 端 应用程序 , 即可通过 Socket 连接远端数据库服务.
基本连接线路是 : SqlServer --> ADOConnection --> ADODataSet --> DataSetProvider , 通过SocketConnection与客户端连接起来--> ClientDataSet -->DataSource --> DBGrid .