三層架構之Socket
通過 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 .