문제

데이터베이스 테이블에서 선택한 행이 무엇인지 기억하고 싶습니다. 응용 프로그램이 닫혀 있기 전에 사용 된 (선택됨) 다음에 다음에로드하십시오. 응용 프로그램 Starts.The 테이블에는 4 개의 레코드 만 있고 읽기 전용으로 읽혀 지므로 누군가가 걱정할 필요가 없습니다. 아무것도 바꾸려고합니다. 지금은 사용 :

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

그러나 이것은 하드 코딩됩니다.나는 그것을 유연하게 원한다. 이 설정을 Application.exe 폴더에있는 INI 파일에 저장하려면 어떻게합니까? 응용 프로그램이 시작될 때로드하십시오.예를 들어, 키가 '3'이면 (앱이 꺼낼 때) 다음 번에로드합니다.

도움이 되었습니까?

해결책

TDataSet.OnAfterOpenTDataSet.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