0

これは、さまざまな部門が独自のデータベースにアクセスするマルチユーザー アプリケーション (マルチスレッド) です。データベースは 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;

終わり;

4

0 に答える 0