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;

打完收工,自己看一下效果吧,溜了溜了。


笔记源码


学习中记录的一点点笔记,以便以后翻阅。

猜你喜欢

转载自blog.csdn.net/qq_44111597/article/details/108321085