FireDAC 学习 - 1

之前玩 Delphi,数据库部分,用得最多的是 TClientDataSet。这个 TClientDataSet 有很多玩法,重点是它可以作为一个独立的内存表,无论数据来自什么数据库都支持,并且可以把内容保存为文件,也可以把内容通过远程传递。

新的 Delphi,TClientDataSet 还在,但有了新的 FireDAC 的整套数据库访问控件,它也包含一个 TDfMemeTable 内存表控件。这个内存表控件该如何使用?比如,来自数据库的数据,该如何放进去?

开始学习 FireDAC 的玩法。这里大概会写一个系列。

今天来个简单的:

--------------------------------------------------------------

开始测试

新建一个 VCL 工程。拖几个 FireDAC 的控件过来。

1. FDConnection1 用来连接数据库;我这里使用 FireBird 数据库,我自己在硬盘上创建了一个测试用的 FireBird 数据库。双击它会弹一个窗口出来,在里面可以对它要连接的数据库进行一些参数设置。参数设置正确,就可以成功连接数据库了。

2. FDQuery1,它的 Connection 属性指向 FDConnection1,这样它就可以访问对应的数据库里面的表。

2.1. FDQuery1 的 SQL 属性里面填写:select * from TAB_AUTO;这里的 TAB_AUTO 是我的测试用的数据库里面我自己建立的一个表的名字。到这里,如果一切顺利,在设计期,可以打开 FDQuery1 成功。如果有问题,查一下数据库连接的属性设置里哪个地方没做对。

3. 拖一个 FDMemTable1 到界面上;再拖一个 DataSource1 到界面上,其 DataSet 属性指向 FDMemTable1;

4. 拖一个 DBGrid1 到界面上,其 DataSource 属性指向 DataSource1;这样,当 FDMemTable1 里面有数据的时候,可以从 DBGrid1 看到。

5. 拖一个 FDGUIxWaitCursor1 到界面上,否则 FireDAC 在打开数据库的时候,会冻结界面。

6. 拖两个按钮到界面上,代码如下:

procedure TForm1.Button1Click(Sender: TObject);
begin
  FdQuery1.Open();
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  AStream: TMemoryStream;
begin
  AStream := TMemoryStream.Create;
  try
    FdQuery1.SaveToStream(AStream);

    AStream.Position := 0;
    FdMemTable1.LoadFromStream(AStream);
  finally
    AStream.Free;
  end;
end;

Button1 的代码就是打开 FdQuery1,也就是从数据库获取数据;

Button2 的代码是把 FdQuery1 的数据,输出给 FdMemTable1;

运行程序,先点 Button1,没有任何出错信息,说明成功;再点 Button2,出来一个异常:

根据上述异常提示,我去控件面板里面,找到一个控件:FDStanStorageBinLink1 拖过来放到界面上,再次运行,成功。

以下是正确的设计期的界面控件:

以下是点了【取数据】也就是 Button2 以后的执行成功的结果:

总结:

1. FireDac 的 TDataSet 要输出数据,采用 FdQuery1.SaveToStream(AStream); 的方法,但必须要拖一个 FDStanStorageBinLink1 到界面上,否则会出异常。在控件面板的 FireDAC Links 里面,还要诸如 FDStanStorageXMLLink1 等 Link,也就是说,要输出为其它格式比如 XML 也需要拖一个对应的 Link 控件过来;

2. 上述代码里面有:AStream.Position := 0;,如果没有这句,则执行 FdMemTable1.LoadFromStream(AStream); 会出现异常提示。这里说明 LoadFromStream 方法是从 AStream 的当前位置开始的。

猜你喜欢

转载自blog.csdn.net/pcplayer/article/details/106752641