2

これは、多少の違いはありますが、マスター/ディテールの状況にいくぶん似ています。

問題: リンクする必要がある 2 つの独立した MS Access データベース ファイル (.mdb) があります。

  • 最初のデータベースには、部品番号、部品の詳細、ベンダーなどがあります...
  • 2 番目のデータベースにはテーブル名として個々の部品番号があり、それらのテーブル内にはその部品を使用する顧客と製品番号があります。

主に、グリッド内のセル データが変更/更新されると、その場でテーブル名を変更する必要があるため、適切なマスター/詳細リンク方法が見つかりませんでした。

そこで、次のような別のリンク方法を思いつきました。そして、これがそれらをリンクするための良い方法であるとは完全には確信していません.

{DBGrid1 は ADOTable1 の値を表示します} {DBGrid2 は ADOTable2 の値を表示しますが、そのテーブル名は変更されます}

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var PartTableName: string;
begin
if DBGrid1.Fields[2].IsNull then exit
  else
   begin
     if ADOTable2.active then ADOTable2.Close;
     PartTableName:= DBGrid1.Fields[2].AsString;
     while pos('-',TableString) > 0 do
       PartTableName[pos('-',PartTableName)] := '_';
     ADOTable2.TableName:= PartTableName;  //obtained from cell click in DBGrid1
     ADOTable2.Open;
   end;
end;

DBGrid2 は、DBGrid1 でクリックされた部品番号を使用する顧客と製品を表示します。

これを行うためのより良い方法があるはずですか?このリンク方法は私には粗雑に思えます。これも OnDataChange メソッドに入れたいのですが、うまくいかないようです。

4

3 に答える 3

3

これはAccess内で設定できます。これは、Delphiで実行するよりも堅牢なソリューションです。

お使いのバージョンのAccessでLinkedTableManagerを見つけると、別のデータベースから自分のデータベースにテーブルをリンクできます。次に、delphiを使用して単一のmdbにアクセスし、すべてのテーブルを取得できます。

于 2012-04-09T07:23:16.087 に答える
2

TxQueryは別のオプションです。

見積もり:

TxQueryコンポーネントは、 SQL ステートメントを使用して1 つ以上の TDataSet 子孫コンポーネントを照会するために使用できるTDataSet 子孫コンポーネントです。

于 2012-04-09T07:41:00.140 に答える
0

再クエリを行う代わりに、ADO コンポーネントを使用してテーブルのコンテンツをフィルター処理することを検討することをお勧めします。これは、マスターと詳細の配置とほぼ同等であり、「メモリ内」操作のみを実行し、「マスター」行が変更されるたびにデータベースにヒットしないという利点があります。(マスター行が変更されるたびに、子テーブルのフィルター基準を変更するだけです)

于 2012-04-09T23:59:18.267 に答える