응용 프로그램 시작시 테이블보기로드
-
21-12-2019 - |
문제
데이터베이스 테이블에서 선택한 행이 무엇인지 기억하고 싶습니다. 응용 프로그램이 닫혀 있기 전에 사용 된 (선택됨) 다음에 다음에로드하십시오. 응용 프로그램 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.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;
. 제휴하지 않습니다 StackOverflow