借助DataSnap我们可以很简单的把access变成一个共享数据库。
先来做一个中间层服务器
1、新建一个工程,在Delphi Project中选择DataSnap Server组,然后选择其中的DataSnap Server,点击确定,然后选择缺省设置即可.
2、系统会生成一个工程框架.其实现在你什么代码都不用写,就已经建立好了一个DataSnap的服务器,那么这个服务器可以提供什么呢?
它输出了一个类,这个类只有一个方法:
function EchoString(Value: string): string;
我们用这个函数可以在服务器店接收到客户端传送过来的参数。比如sql语句,我们先不去动他。
3、接下来在我在ServerMethods1中放入了ADOConnection1,ADODataSet1,DataSetProvider1三个控件。
ADOConnection1设置好connectionstring
ADODataSet1设置connection=ADOConnection1
DataSetProvider1设置dataset=ADODataSet1
可以简单的先把三个控件第一行属性全部设置成true
当然为了发布方便,我们可以在ServerMethods1窗体空白处点击,然后在events事件插片中双击oncreate在生成的代码中加入
procedure TServerMethods1.DSServerModuleCreate(Sender: TObject);
var
ado_url:string;
begin
ado_url:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(ParamStr(0))+'test.mdb;Persist Security Info=False';
ADOConnection1.Connected:=False;
ADOConnection1.ConnectionString:=ado_url;
ADOConnection1.Connected:=true;
ADODataSet1.Active:=true;
end;
这样可以方便放到其它电脑中。
4、接下来我们把EchoString也修改一下。当然也可以另外写个函数,我懒,改下得了。
function TServerMethods1.EchoString(Value: string): string;
begin
try
ADODataSet1.Active:=false;
ADODataSet1.CommandText:='select * from Sheet1';
ADODataSet1.Active:=true;
Result := 'OK';
except
Result := 'error';
end;
5、保存,运行。。。。服务器端好了。
############################
现在来做个客户端
6、新建一个工程,在file-new中选择VCL From Application,然后在窗体中放入下面控件:
一个SQLConnection1,设置其Driver为DataSnap,并且Connected置为false;
一个DSProviderConnection1,将其SQLConnection属性设为刚才的SQLConnection1,注意,下面是很重要的一步,即在ServerClassName中输入TServerMethods1;
一个ClientDataSet1,设置其RemoteServer为DSProviderConnection1,然后可以在ProviderName中选择DataSetProvider1了。设置ClientDataSet1的Active为false;
一个DataSource1,设置其DataSet为ClientDataSet1;
一个DBGrid1,设置其DataSource为DataSource1。
7、放入三个按钮,分别是:启动,更新,刷新。
8、启动按钮
procedure TForm1.Button1Click(Sender: TObject);
begin
self.SQLConnection1.Open;
self.ClientDataSet1.Open;
end;
9、更新按钮
procedure TForm1.Button4Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(0);
end;
下面是ApplyUpdates方法的声明原型:
function ApplyUpdates(MaxErrors: Integer); Integer; virtual;
ApplyUpdates方法接受一个整数类型的参数:MaxErrors。MaxErrors代表当TDataSetProvider自动更新数据时,开发人员所允许发生的错误次数。我们已经说明了当调用ApplyUpdates方法时,DataSnap会将所有在缓存内存中自上次调用ApplyUpdates方法之后到本次调用ApplyUpdates方法之间所有已变更的数据,一起进行更新。因此,这可能会有许多的变更数据,而MaxErrors就代表在更新这些数据时开发人员允许更新数据时发生错误的次数。如果ApplyUpdates在更新数据时发生了超过MaxErrors指定笔数的次数,那么这整个更新的操作便会被恢复。相反,如果发生的次数小于或等于MaxErrors,那么成功更新的数据仍然会被更新回数据源中,至于没有成功更新的数据,则可以让开发人员借助错误事件处理函数来决定如何处理这些失败的数据,我们将在异常处理的章节中详细介绍。如果传入给ApplyUpdates方法的MaxErrors参数是0,代表不允许发生任何的更新错误;如果传入的参数为–1,代表不管发生多少错误都没有关系,可以先把能够成功更新的数据更新回数据源之中。
10、刷新按钮
procedure TForm1.Button2Click(Sender: TObject);
begin
if not SQLConnection1.Connected then
begin
showMessage('客户端没有启动!');
Exit;
end;
with TServerMethods1Client.Create(SQLConnection1.DBXConnection) do
begin
self.ClientDataSet1.Close;
self.Memo1.Text:=EchoString('select * from sheet1');
self.ClientDataSet1.Open;
free;
end;
end;