10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DelphiAdvent Calendar 2022

Day 25

Paradoxのデータを見るツールを作った

Last updated at Posted at 2022-12-24

Delphi Advent Calendar 2022 25日目

はじめに

今年、なぜかParadoxを使っているプログラムの機能追加の仕事を請けたときに、昔々の知識を絞り出して作成したParadoxのデータを見るためのプログラムの紹介です。
まだ、Paradoxを使っているところが他にあるのか不明で、このネタに興味を持つ人がいるのか疑問ですが。。。

画面

画面は、以下のような感じです。
フォルダ選択で、Paradoxテーブルがあるフォルダを選択します。
テーブル一覧が、左部分に表示され、テーブルをクリックすると右グリッドにデータが表示される仕組みです。
データを表示した後に、フィルター機能やIndexを使う機能も入れてあります。

image.png

プログラム

コンポーネント

コンポーネントは、こんな感じで。
FolderDialogは、TMSのものを使ってます。

image.png

テーブル一覧取得

フォルダ選択し、その中のテーブルの一覧を取得するコードです。
テーブルを固定して、データを見るだけでしたら、Databaseは不要ですが、テーブルの一覧を取得するために使います。GetTableNamesメッソドがこれです。

procedure TFormMain.BtnSelectFolderClick(Sender: TObject);
begin
  FolderDialog.Directory := GetMyDocumentsFolder;
  if FolderDialog.Execute then
  begin
    try
      Database.Close;
      with Database.Params do
      begin
        Values['PATH'] := FolderDialog.Directory;
      end;
      ListBox.Items.Clear;
      Database.Open;
      Database.GetTableNames(ListBox.Items, False);
      TableData.DatabaseName := FolderDialog.Directory;
      Session.NetFileDir := GetExePath;
      Database.Close;
    except
      raise;
    end;
  end;
end;

テーブルオープン

テーブル一覧で開きたいテーブルをダブルクリック

procedure TFormMain.ListBoxDblClick(Sender: TObject);
begin
  TableData.Close;  TableData.Filtered := False;
  TableData.Filter := '';
  TableData.TableName := ListBox.Items[ListBox.ItemIndex];
  TableData.Open;
  TableData.First;
end;

フィルター機能

procedure TFormMain.BtnFileterClick(Sender: TObject);
begin
  if BtnFileter.Caption = 'Fileter ON' then
  begin
    try
      TableData.Filtered := False;
      TableData.Filter := EditFilter.Text;
      TableData.Filtered := True;
      BtnFileter.Caption := 'Fileter OFF';
    except
      raise;
    end;
  end
  else
  begin
    TableData.Filtered := False;
    TableData.Filter := '';
    BtnFileter.Caption := 'Fileter ON';
  end;
end;

インデックス機能

procedure TFormMain.BtnIndexFieldClick(Sender: TObject);
begin
  if BtnIndexField.Caption = 'IndexField ON' then  begin
    try
      TableData.IndexName := '' + Trim(EditIndexField.Text) + '';
      BtnIndexField.Caption := 'IndexField OFF';
    except
      raise;
    end;
  end
  else
  begin
    TableData.IndexName := '';
    BtnIndexField.Caption := 'IndexField ON';
  end;
end;

おわりに

まだ、Pradoxを使っているプログラムはほかにあるのだろうか。という疑問を持ちつつ他にネタが思いつかなかったのでまとめてみました。
ちなみにこの案件のプログラムは、来年に書き換えるらしいです。
私にその話が来なかったのは、ちょっと残念。。。まあ、私一人でやったらずいぶん時間がかかるボリュームだから仕方がないかなとは思うけど。。

今年の最後のネタがこれで良かったのか。。。(笑)

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?