1

私は、1 つのマスター データベースから多数の異なるデータベースにデータをプッシュできるデータ変換ユーティリティに取り組んでいます。ユーティリティ自体は、宛先にデータがどのように保持されるか (テーブル構造) を認識しませんが、複数の結合ステートメントを含む複雑な SQL クエリを使用して、宛先からデータを返す SQL ステートメントを記述したいと思います。データが、ユーティリティが ADO​​ クエリで認識できる標準化された形式 (フィールド名) である限り。

私がやりたいことは、この ADO クエリのライブ データを変更することです。ただし、複数の結合ステートメントがあるため、これが可能かどうかはわかりません。少なくとも BDE については知っています (BDE を使用したことはありません)。これは非常に厳密で、すべてのフィールド (*) などを返す必要がありました。私が知っている ADO はより柔軟ですが、この場合の柔軟性はよくわかりません。

TADOQuery結果に異なるテーブルのフィールドが含まれている場合、この方法でデータを変更できるはずですか? その場合でも、新しいレコードを最後に追加したいとします ( TADOQuery.Append)。2 つの異なるテーブルに追加しますか?

私が選択している実際の主テーブルには、同じ主キー フィールドで結合された補完的なテーブルがあります。小さいテーブル)。したがって、典型的なステートメントには次のようなものが含まれます。

select ts.record_uid, ts.SomeField, td.SomeOtherField from table_small ts
join table_detail td on td.record_uid = ts.record_uid

他のテーブルのレコードへの結合も多数ありますが、それらのレコードへの追加については心配していません。「小」テーブルと「詳細」テーブルに同時に追加することだけが心配です。

そのようなことは ADO クエリで可能ですか? これを可能にするために必要な方法で SQL ステートメントを微調整および変更するつもりです。ありえないとはいえ、嫌な予感がします。

互換性:

  1. SQL Server 2000 ~ 2008 R2
  2. デルファイ XE2
4

3 に答える 3

6

結合に影響を与えないこれらのフィールドを編集することは、通常は問題ありません。追加は...次の方法でテーブルの1つに追加を制限できます

procedure TForm.ADSBeforePost(DataSet: TDataSet);
begin
  inherited;
  TCustomADODataSet(DataSet).Properties['Unique Table'].Value := 'table_small';
end;

しかし、Requery がなければ、それ以上のことはできません。より良い方法は、BeforePost、Requery、Abort などの手順で値を設定することです。

ビューが永続的な場合は、 INSTEAD OF Triggersを使用できます

于 2012-12-28T21:38:15.163 に答える
2

ジェリー、

FireBirdでも同じ問題が発生しました。経験から、 CachedUpdatesを使用することで(少し複雑になるまで)問題を解決できることがわかります。非常に優れたリソースはこれです-http://podgoretsky.com/ftp/Docs/Delphi/D5/dg/11_cache.html。この記事には、すべての質問に対する回答があります。

于 2012-12-29T08:40:48.967 に答える
0

ライブ ADO クエリ更新の元のアイデアは、理解できないほど複雑になったため、放棄しました。データ プッシュ プロジェクトの範囲が変更されたため、これはもはや私にとって問題ではありませんが、依然として興味深いテーマです。

アプリケーションの新しい構造は、元のデータ セットのさまざまなフィールドに複数の「フィールド リンク」を関連付けることで構成されます。これらの各リンクは、元のフィールド名と、そのフィールドのインポート時に実行される SQL ステートメントを参照します。複数のフィールド リンクを 1 つのフィールドに配置できるため、複数のステートメントを実行したり、さまざまなテーブルに値を配置したりできます。最終的な目標は、共通のデータセットを元のソースから外部ソースに簡単かつ繰り返しエクスポートできるアプリでした。アプリを再コンパイルすることなく、さまざまなデータ構造。

ただし、キャッシュされた更新の概念は私には魅力的ではありませんでした.RBAの回答のリンクで指摘されているように、その間にデータベース内のデータを変更できるという事実だけです。そのため、代わりに、カスタマイズ可能なデータ プッシュの独自の方法を統合します。

于 2012-12-29T09:42:57.013 に答える