Delphi 学习了解FireDac【缓存更新、记录的状态之UpdateStatus】
RAD Studio 10.3 测试√
成功连接数据库后【连接参考】Delphi FireDAC连接MySQL数据库
1、在窗体上面放一个cxGrid控件,设置属性
然后发现表格中并没有数据,接下来点击 cxGrid 中的 Customize ,然后在右边找到 Columns 可以手动添加点击右边的Add,或者直接检索表中字段点击右边的 Retrieve Fields ,这时候字段就有了。继续搞
2、设置 FDQuery 属性,缓存更新设置为True
3、对数据修改了,需要提交才可以保存在数据库。这时在添加一个 Button 双击写入这两行代码
procedure TForm1.Button1Click(Sender: TObject); begin FDQuery1.ApplyUpdates(); // 应用更新(确认更新) FDQuery1.CommitUpdates; // 提交更新 end;
4、前面已经已经实现了,继续加一点内容。添加一个状态栏【StatusBar】,双击状态栏,然后添加
5、设置 DataSource 的事件【OnDataChange】
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin // 属性 // cachedUpdates 是否缓存更新数据 // ChangeCount 数据变动的数量 // 判断 FDQuery1 内容是否有改动 if FDQuery1.ChangeCount > 0 then StatusBar1.Panels[0].Text := '有改动--' + FDQuery1.ChangeCount.ToString else StatusBar1.Panels[0].Text := '无改动--' + FDQuery1.ChangeCount.ToString; end;
6、在退出前判断数据是否提交,然后进行提示。
在Form1的事件中找到【OnCloseQuery】双击开搞
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin // UpdatesPending 是否有更新挂起【是否有数据变动】 if FDQuery1.UpdatesPending then case Application.MessageBox('数据已修改,确认不保存退出吗?', '提示', MB_OKCANCEL + MB_DEFBUTTON2 + MB_TOPMOST) of IDOK: begin CanClose := True; end; IDCANCEL: begin CanClose := false; end; end; end;
7、记录的状态之UpdateStatus
首先新建字段:点击 FDQuery 首先关闭连接,右键FDQuery -->字段编辑器–>新建字段【然后设置属性】
然后右击表格标题栏,添加一列,单击击添加的列,设置列属性:DataBinding --> State
都设置完成后,在 FDQuery 事件中找到【OnCalcFields】双击开搞
procedure TForm1.FDQuery1CalcFields(DataSet: TDataSet); begin // 计算字段 case DataSet.UpdateStatus of usUnmodified: DataSet['State'] := '未修改'; usModified: DataSet['State'] := '已修改'; usInserted: DataSet['State'] := '已插入数据'; usDeleted: DataSet['State'] := '已删除'; end; end;
这些东西设置完了就可以啦,然后会发现删除的没有显示出来,默认的是不显示的,我们再来添加两个Button,来让他们显示和恢复默认
procedure TForm1.Button2Click(Sender: TObject); begin // FilterChages 设为显示全部 FDQuery1.FilterChanges := [rtModified, rtInserted, rtDeleted, rtUnmodified, rtHasErrors]; end; procedure TForm1.Button3Click(Sender: TObject); begin // FilterChages 设为默认显示 FDQuery1.FilterChanges := [rtModified, rtInserted, rtUnmodified]; end;