2012-01-27 23 views
2

私は私のソフトウェアで、次のDBX構造を持っている:私のTClientDataSetのからフィールドのプロパティがfalseに設定されているプロパティを持つフィールドから情報を取得する方法?

TSQLDataSet -> TDataSetProvider -> TClientDataSet 

一つは、データベース(火の鳥)にトリガーおよび発電機に基づ​​いて、このフィールドの自動インクリメントので、falseに設定必要な性質を持っています。

私はTClientDataSetのからこのフィールドを読み込むしようとすると、しかし、要求されていないこの分野でのTSQLDataSetとTClientDataSetの両方を設定した後、私は本当に奇妙な結果を取得しています。この条件でこのフィールドの値を取得するようにTClientDataSetを強制するには、何か特別な処理をする必要があるかもしれないと思います。

私はここで何が欠けていますか?

ありがとうございます。

EDIT

必要なプロパティのヘルプファイルには、このことについて何かを言うが、私はかなりそれは私が何をしたいのか理解できませんでした。

説明

は、フィールドの空白以外の値が を必要とするかどうかを指定します。

フィールド を空白にすることができれば、フィールドに値を必要とする場合や、使用必須見つけるために。

フィールドが項目エディタを使用して作成されている場合は、このプロパティは、基になるテーブルに基づいて を設定されています。 (例えば、パスワードまたは一部 数)の値を持っていますが、基本となるテーブルが フィールドを必要としない、プロパティを強制するOnValidateイベントハンドラを記述しなければならないためにしなければならないフィールドに対して真 するために必要なセットのアプリケーション。

Requiredプロパティが基になる データベーステーブルのプロパティを反映している場合、null値を適用してポストしようとすると、例外 が発生します。 、基になるテーブルにフィールドを必要としないときにtrueに必要なプロパティを設定するアプリケーションは、同じ結果を達成するために、OnValidateイベントハンドラ でnull値の EDatabaseError例外を発生させなければなりません。

EDIT 2

言及し忘れ:TDataSetProviderとTClientDataSetの間、DataSnapの層(TClientDataSetの接続がDataSnapのドライバで構成されている)があります。

EDIT 3

私はこのDataSnapのセットアップと小さなテストケースを作成し、それが完全に働きました。このプロジェクトは残念ですが、厄介な選択肢があり、私を噛んでいるか、DataSnapのバグに遭遇しました。

+0

ClientDataSetからフィールドをどのように読み取ろうとしていますか?フィールドが必須であるかどうかは、フィールドから読み取るときには何も変わりません。データが挿入/編集操作でテーブル/データセットに書き込まれるときにのみ影響します。 –

+0

cds.FieldByName( 'FIELD')。AsString; //問題はRequired:= falseフィールドでのみ発生します。 – ivarec

+0

奇妙な結果は何ですか?インクリメント文字列フィールドがありますか? –

答えて

0

問題は、古いフィールドがINTEGERとして読み取られ、データベースのSMALLINTでした。

この問題はデバッグするのが難しく、この質問は誤解を招きました。私はこれをデバッグするのに役立つ誰もがありがとう。

0

Haole、挿入後にTClientDataset.RefreshRecordを試してみましたか?またはTClientDataset.Refresh? ジェネレータを使用すると、select gen_id(generator,1) from RDB$Database(メモリから取得したもので、Firebirdをテストする必要はありません)のようなクエリで事前に(ApplyUpdatesを呼び出す前に)ジェネレータを取得してPKフィールドに事前に入力することもできます。

EDIT:これはヒーゼンクです。コンポーネントを削除して再コンフィグレーションしようとしますゼロから()(これは、削除した後、保存してDelphiを終了することを意味します)。

さらに、必要なクエリ設定だけで空のプロジェクトを作成し、そのデータをTDBGridで表示しようとします。この問題が引き続き発生する場合は、FBインストールで何らかのコンポーネントが壊れている(またはDelphiインストールされている)可能性があります。

+0

さて、今は挿入がありません。私はすでにDB上にあるいくつかのデータを持っており、私はTClientDataSetでこのフィールドを正しく読み取ることができません。 – ivarec

+0

TClientDataset.Refreshはそれを解決しません。私のアプリケーションがスレッド化されているので、そのようなジェネレータの値を得ることは危険です。 – ivarec

+0

Hmmm。 IBExpertやISQLの簡単なSELECTは正しいデータを表示しますか? –

関連する問題