DelphiはFireDacを理解することを学びます[キャッシュ更新のUpdateStatusとレコードステータス]

RAD Studio10.3テスト√

データベースに正常に接続した後[接続リファレンス] Delphi FireDACがMySQLデータベースに接続します
1.フォームにcxGridコントロールを配置し、プロパティ
ここに写真の説明を挿入
設定してテーブルにデータがないことを確認し、cxGridで[カスタマイズ]をクリックして、右側にある[列]を見つけます。これは手動で追加できます。右側の[追加]をクリックするか、テーブル内のフィールドを直接検索して右側の[フィールドの取得]をクリックすると、フィールドが使用可能になります。立ち止まるな

2. FDQueryプロパティを設定し、キャッシュの更新をTrueに設定します。3。
ここに写真の説明を挿入
データが変更され、データベースに保存する前に送信する必要があります。このとき、ボタンを追加してダブルクリックし、これら2行のコードを記述します。

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- >状態がすべて設定されています。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;

これらを設定すると、削除されたものが表示されないことがわかります。デフォルトのものは表示されません。2つのボタンを追加して表示し、デフォルトに戻しましょう。

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