سؤال

أود أن يتذكر طلبي أي صف محدد في جدول قاعدة البيانات تم استخدامه (محدد) قبل إغلاق التطبيق ثم قم بتحميله (هل تم تحديده) في المرة التالية التي يبدأ فيها التطبيق. يحتوي الجدول على 4 سجلات فقط ويتم قراءة لذلك لا داعي للقلق إذا حاول شخص ما تغيير أي شيء.الآن أستخدم:

procedure TForm3.ClientDataSet1AfterOpen(DataSet: TDataSet);
begin
  Clientdataset1.DisableControls;
  try
    cxGrid1DBTableView1.DataController.KeyFieldNames := 'ID';
    cxGrid1DBTableView1.DataController.LocateByKey('4');
  finally
    Clientdataset1.EnableControls;
  end;
end;

لكن هذا مشفر.أريدها مرنة.كيف يمكنني حفظ هذه الإعدادات في ملف INI الموجود في مجلد Application.exe وتحميلها عند بدء التطبيق؟لذلك ، على سبيل المثال ، إذا كان المفتاح "3" (عندما يكون التطبيق.خرجت) أقوم بتحميله في المرة القادمة.

هل كانت مفيدة؟

المحلول

استخدم ال TDataSet.OnAfterOpen و TDataSet.OnBeforeClose أحداث لتحميل وحفظ القيم المطلوبة

procedure TForm3.ClientDataSet1AfterOpen(DataSet: TDataSet);
var
  LIni : TIniFile;
begin
  DataSet.DisableControls;
  try
    LIni := TIniFile.Create( '<YourIniFileName.ini>' );
    try
      DataSet.Locate( 'ID', LIni.ReadString( 'MyDataSet', 'ID', '' ), [] );
    finally
      LIni.Free;
    end;
  finally
    DataSet.EnableControls;
  end;
end;

procedure TForm3.ClientDataSet1BeforeClose(DataSet: TDataSet);
var
  LIni : TIniFile;
begin
  LIni := TIniFile.Create( '<YourIniFileName.ini>' );
  try
    LIni.WriteString( 'MyDataSet', 'ID', DataSet.FieldByName( 'ID' ).AsString ) );
  finally
    LIni.Free;
  end;
end;

هذا هو جدا بسيط و إلى الأمام بشكل مستقيم عينة ويجب عدم تنفيذ ذلك في التطبيقات الحقيقية.

في التطبيقات الحقيقية، سوف تقوم بتفويض هذا إلى شخص واحد يعتني بقراءة وكتابة قيم التطبيق هذه

// Very simple KeyValue-Store
IKeyValueStore = interface
  function GetValue( const Key : string; const Default : string ) : string;
  procedure SetValue( const Key : string; const Value : string );
end;

// Global Application Value Store as Singleton   
function AppGlobalStore : IKeyValueStore;

ويعطيك حلا ذكيا جدا

procedure TForm3.ClientDataSet1AfterOpen(DataSet: TDataSet);
begin
  DataSet.DisableControls;
  try
    DataSet.Locate( 'ID', AppGlobalStore.GetValue( 'MyDataSet\ID', '' ), [] );
  finally
    DataSet.EnableControls;
  end;
end;

procedure TForm3.ClientDataSet1BeforeClose(DataSet: TDataSet);
begin
  AppGlobalStore.SetValue( 'MyDataSet\ID', DataSet.FieldByName( 'ID' ).AsString ), [] );
end;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top