Delphi XE开发三层架构的系统实际上应用的DataSnap机制是非常好用的,在互联网时代的云计算应用具有非常划时代的应用,网络上大多数应用属于示例型的,不具使用价值,这里将实际应用中的操作进行了开发说明;
1、服务器端开发
1.1利用向导设置过程
这里注意选择DSServerModal便于注册服务应用;
1.2、控件摆放
其中可以使用FD,也可以使用ADO等,个人建议使用ADO,速度和效率非常好。
建议建立独立的数据模块,把ADO放置在其中;设置关系,这里不需要详细说明了,大家都会。
编制代码:
function TServerMethodsA.EchoString(Value: string): string;
begin
Result := Value;
end;
{ 测试 }
function TServerMethodsA.ReverseString(Value: string): string;
begin
Result := System.StrUtils.ReverseString(Value);
end;
{ 测试 }
function TServerMethodsA.ChangeSql(Value:string): Integer;
begin
Dataset.Close;
DataSet.CommandText := Value;
DataSet.Open;
Result := DataSet.RecordCount;
end;
数据库自动登录代码:
procedure TFrmmain.ConnectAdo;
Var CnnStr : String;
LoginFlag : Boolean;
truecnnstr :String;
//label Redo;
begin
LoginFlag := False;
CnnStr := ReadIniFile(Apppath+'\DBContentLocal.dat','DbSet','dbcnn','');
TrueCnnStr := Decrypt(CnnStr,6);
if Length(trueCnnStr)=0then
begin
TrueCnnStr := PromptDataSource(GetActiveWindow,'');
CnnStr := Encrypt(TrueCnnStr,6);
WriteIniFile(Apppath+'.\DBContentLocal.dat','DbSet','dbcnn',CnnStr);
end;
Ado.Connected := False;
Ado.ConnectionString := TrueCnnStr;
Ado.LoginPrompt := False;
Try
Ado.Connected := True;
Except
LoginFlag := False;
TrueCnnStr := PromptDataSource(GetActiveWindow,'');
CnnStr := Encrypt(TrueCnnStr,6);
WriteIniFile(Apppath+'.\DBContentLocal.dat','DbSet','dbcnn',CnnStr);
Ado.Connected := False;
Ado.ConnectionString := TrueCnnStr;
Ado.LoginPrompt := False;
Ado.Connected := True;
End;
end;
2、客户端开发
摆放这些空间,设置控件之间的关系。
注意几点:
1、SqlConnection1的ConnectionName选择“DataSnapCONNECTIO”
2、SqlConnection1.Params设置服务器的端口和地址。
3、ClientDataset.remoteServer设置为DSProviderConnection1;
4、ClientDataset.ProvideName设置为服务器开发时候的Provider,注意一致性;
5、右键生成接口实例,便于代码调用,如下图所示:
6、保存生成的实例,开始干活。就这么简单。
其它的非常简单,可以认真参考一下代码:
USES MidasLib;{方便客户端不使用MIDAS.DLL}
procedure TForm5.BtnModClick(Sender: TObject);
begin
ClientDataSet.Edit;
ClientDataset.FieldByName('la').AsInteger := 99;
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(0); {不实用不能提交到数据库,只是本地} {0:表示不允许发生错误}
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
tsc := TServerMethodsAClient.Create(SqlConnection1.DBXConnection); {...注意创建方式}
tsc.ChangeSql('Select * from datainfo');
//ClientDataSet.CommandText := 'Select * from DH_Element';
ClientDataset.Open;
end;
{连接数据库的代码,IP可以按照你的需要设定,支持互联网应用}
procedure TForm5.Button2Click(Sender: TObject);
begin
SqlConnection1.Close;
SqlConnection1.Params.Values['HostName'] := Edtip.Text;
SqlConnection1.Params.Values['Port'] := Edtport.Text;
SqlConnection1.Open;
end;
end.