これは、さまざまな部門が独自のデータベースにアクセスするマルチユーザー アプリケーション (マルチスレッド) です。データベースは SQLite で、私は FireDac を使用しています。部門ごとに個別の ADConnection を割り当てているので、予期しないロックは発生しません。
どの接続がアクティブ化 (アクティブ) されるかは、ADQuery3 によって生成される数だけに依存します。これは、このようにする必要があるため、MainForm Show で行われます (ログインが成功した後に表示されます)。FormClose ですべての接続を閉じることができるようにしたいのですが、マルチユーザーが同じデータベースを使用してログインおよびログアウトすると、いくつかの悪い問題が発生します。より良い方法で行われますか?
また、私はこれを使用したことがないので、これをどのように進めればよいのでしょうか?
DataModule1.ADQuery3.FieldByName('DEPARTMENT').AsString = '12' のように、別の部門の番号が表示されたかどうかを確認する必要がある場合、次の ELSE はどこに表示されますか?
procedure TMainForm.FormShow(Sender: TObject);
begin
if DataModule1.ADQuery3.FieldByName('DEPARTMENT').AsString = '13'
then begin
try
if DataModule1.1_CONNECTION.Connected = true then
DataModule1.1_CONNECTION.Connected := False
else
DataModule1.1_CONNECTION.DriverName:= 'SQLite';
DataModule1.1_CONNECTION.Params.Values['Database']:= ExtractFilePath(Application.ExeName)+ 'mydatabase.db';
DataModule1.1_CONNECTION.Connected := true;
DataModule1.ADTable1.TableName :='DEPT_13';
DataModule1.DEPT_13.Active:=True;
cxGrid1.ActiveLevel.GridView := DEPT_13;
except
on E: Exception do begin
ShowMessage('There was an error... : ' + E.Message);
end;
end;
終わり;