3.7 MyBase
Delphi的MIDAS/DataSnap技术从推出之后便支持BriefCase模式的数据处理能力。所谓BriefCase模式是指客户端应用程序在使用DataSnap技术从数据来源取得了数据之后,可以临时把数据储存在客户端的机器之中,切断和数据来源的连接,再继续处理数据。当客户端处理完毕之后,又可以连接数据来源,再把客户端更改的数据更新回数据来源中。
这种数据处理的模式非常适合需要把数据带出企业,在客户处处理数据,再回到企业中更新在客户端处理的数据。例如许多Sales需要在会见客户之前从系统下载产品信息,到客户处展示、更改数据,最后再回到公司把最新的数据更新回企业的系统中。
在Delphi 6的后续版本中,Borland又再次扩充BriefCase的数据处理模式,允许程序员使用XML的格式在客户端储存数据,或是和其他系统以XML的格式交换数据,因此把这种功能称为MyBase。
在TSimpleDataSet/TClientDataSet中提供了两种方法允许程序员把数据临时储存在文件之中,以及再从文件中加载先前储存的数据,它们就是SaveToFile以及LoadFromFile。SaveToFile除了可以储存数据之外,也允许程序员使用不同的格式来储存数据,程序员可以储存为二进制格式或是XML的格式。下面是SaveToFile的原型声明:
SaveToFile(const FileName: string = ''; Format TDataPacketFormat=dfBinary);
SaveToFile的第一个参数是储存的文件名称,第二个参数则是让程序员指定的储存格式,默认储存为二进制格式。表3-7列出了TDataPacketFormat能够拥有的数值以及这些数值代表的意义。
表3-7
|
TDataPacketFormat |
意义 |
|
dfBinary |
以二进制格式储存TSimpleDataSet/TClientDataSet之中的数据 |
|
dfXML |
以XML格式储存TSimpleDataSet/TClientDataSet之中的数据 |
|
dfXMLUTF8 |
以XML、UTF8格式储存TSimpleDataSet/TClientDataSet之中的数据 |
LoadFromFile方法则更简单,它只接受一个要加载数据的文件名称参数:
procedure LoadFromFile(const FileName: string = '');
如果程序员使用XML格式储存数据,那么就可以再和其他的应用程序交换数据。程序员可以使用Delphi提供的XML Data Binding向导来进行数据交换的工作。下面的片断程序代码显示了如何使用SaveToFile和LoadFromFile方法来储存和加载TSimpleDataSet/TClientDataSet中的数据。
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if (Self.rbtnBinary.Checked) then
Self.sdsPerformers.SaveToFile(TFILENAME)
else
begin
Self.sdsPerformers.SaveToFile(TFILENAME+ '.XML', dfXMLUTF8);
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
Self.sdsPerformers.Active := False;
if (Self.rbtnBinary.Checked) then
Self.sdsPerformers.LoadFromFile(TFILENAME)
else
Self.sdsPerformers.LoadFromFile(TFILENAME + '.XML');
end;
图3-25显示了当用户在TSimpleDataSet中更改了数据之后通过调用SaveToFile把数据临时储存在一个XML文件中。

图3-25 储存TSimpleDataSet中的数据到XML文件中
图3-26是使用IE显示图3-25储存为XML格式的数据的画面,从图3-26中我们可以看到,DataSnap的确是把所有的数据正确地储存为XML的格式,这样一来,这个文件中的数据就可以顺利地和其他应用程序交换数据了。

图3-26 IE显示DataSnap储存的XML格式的数据
虽然Delphi的DataSnap能够让程序员储存数据到文件之中,稍后再加载数据回来,但是目前在Delphi 2006中的DataSnap在这方面似乎有一些小臭虫,在加载数据回来之后没有正确地处理Delta的特性值,在稍后Delphi 2006的Patch中也许会更正。






