最近做一个Delphi的项目原先的项目采用BDE连接数据库,现在改用ADO进行数据库连接。数据库为Access。
找了很多资料发现都是用LoadFromFile,SaveToFile两个方法来实现。下面详细讲解
1、备份
备份操作是最简单的
var
ads : TAdoDataSet;
...
ads := TAdoDataSet.Create(nil);
ads.Connection := conn; //conn为TAdoConnection类连接access
ads.CommandText := scmd; //需要备份数据的SQL语句
ads.open;
ads.SaveToFile(sfilename); //sfilename备份文件的文件名(xml格式)_
ads.close;
ads.free;
2、恢复
也是采用上面的思路
使用TAdoDataSet来打开*.xml文件,用过First,Next,Fields[0].Value 获得记录的值,然后另外创建一个TAdoQuery或者TAdoTable进行添加记录很简单。
但是这里存在一个问题:
假如程序开发前我们不知道该xml文件的表的名称和结构怎么办?
其实在xml文件中存在上述信息我们必须想办法来读出了。
3、读xml文件
此格式xml文件不是普通的格式而是Schema的。
delphi6通过XML Data Binding可以读出真个的xml文件
delphi6->File->new->Others...->XML Data Binding后出现第一个对话框
选择要读取xml的文件名,下一步按照默认,下一步按照默认点击完成按钮在你项目中添加了一个pas文件。
Options按钮可以修改影射关系(数据类型等等)
仔细察看pas文件与xml文件你就能发现它们的对应关系即可读出你想要的信息。
例如:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids,xmldom, msxmldom,
XMLDoc, XMLIntf,Unit2;
type
TForm1 = class(TForm)
XMLDocument1: TXMLDocument;
Button6: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xmls: IXMLXmlType;
inext : integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
xmldocument1.FileName := 'testdata.xml';
xmls := Getxml(xmldocument1);
inext := 0;
end;
procedure TForm1.Button6Click(Sender: TObject);
var
ixmltl : IXMLAttributeTypeList;
ixmlt : IXMLAttributeType;
begin
ixmltl := xmls.Schema.ElementType.AttributeType;
if inext <= ixmltl.Count - 1 then
begin
ixmlt := ixmltl[inext];
Edit1.Text := ixmlt.Name;
Edit2.Text := ixmlt.Keycolumn;
inc(inext);
end
else
inext := 0;
end;
end.