Delphi Advent Calendar 2022 25日目
はじめに
今年、なぜかParadoxを使っているプログラムの機能追加の仕事を請けたときに、昔々の知識を絞り出して作成したParadoxのデータを見るためのプログラムの紹介です。
まだ、Paradoxを使っているところが他にあるのか不明で、このネタに興味を持つ人がいるのか疑問ですが。。。
画面
画面は、以下のような感じです。
フォルダ選択で、Paradoxテーブルがあるフォルダを選択します。
テーブル一覧が、左部分に表示され、テーブルをクリックすると右グリッドにデータが表示される仕組みです。
データを表示した後に、フィルター機能やIndexを使う機能も入れてあります。
プログラム
コンポーネント
コンポーネントは、こんな感じで。
FolderDialogは、TMSのものを使ってます。
テーブル一覧取得
フォルダ選択し、その中のテーブルの一覧を取得するコードです。
テーブルを固定して、データを見るだけでしたら、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を使っているプログラムはほかにあるのだろうか。という疑問を持ちつつ他にネタが思いつかなかったのでまとめてみました。
ちなみにこの案件のプログラムは、来年に書き換えるらしいです。
私にその話が来なかったのは、ちょっと残念。。。まあ、私一人でやったらずいぶん時間がかかるボリュームだから仕方がないかなとは思うけど。。
今年の最後のネタがこれで良かったのか。。。(笑)