2011-01-24 15 views
0

データリポジトリとしてAccess 2003 .mdbファイルを使用してDelphiでプログラムを作成する必要があります。実行時にTDBCheckBoxが設定されているかどうかを確認するには

アクセスデータベースには、「オリジナル」というブール値(アクセスの可否)フィールドがあるテーブルがあります。

私はこのフィールドをTDBCheckBoxにマップしています。このフィールドはtrueにチェックされ、falseにはチェックが外され、フィールドが設定されていないことを示す半透明のチェックが表示されます。

フィールドのフィールドがfalse(チェックボックスがオフ)に設定され、フィールド値がfalseとして保存されます。IFユーザーが明示的にフィールドを設定していません。

私がしようとしている場合は()DVDQuery.FieldByName( 'オリジナル'。AsBoolean <> TRUE)と(偽DVDQuery.FieldByName() 'オリジナル'。AsBoolean <>) 、その後DVDQuery.FieldByName( 'オリジナル')。 AsBoolean:= False;

しかし、これは新しいレコードでは機能しません。私は、データセットをフィルタリングするために、多数の動的に作成されたwhere文が存在するため、クエリを使用してデータセットにアクセスします。

助けていただきありがとうございます。

ロブ

答えて

2

チェックフィールドは、データセットのBeforePostイベントに値を設定されているかどうか:

procedure TForm1.DVDQueryBeforePost(DataSet: TDataSet); 
begin 
    if DVDQuery.FieldByName('Original').IsNull then 
    DVDQuery.FieldByName('Original').AsBoolean := False; 
+0

私はisnullを知らず、これは非常に助けになりました。ご協力いただきありがとうございます。 – robert

5

あなたは、データベース内の構造を変更することはできますか?デフォルト値の適切な場所は、列定義にあります。構造体を更新できる場合は、フィールドのデフォルト値を「いいえ」に変更します。この問題を回避するためにコーディングを行う必要はなく、アクセスによって直接入力されたとしてもデータは正しいことが保証されます。

コード内の値を確認する必要がある場合は、if DVDQuery.FieldByName('Original').IsNullを使用して、フィールドが空であるかどうかを判断します。

最後に、データベースのデフォルト値ではなくコードの値を変更する必要がある場合は、適切なTDatasetイベント(AfterInsert、AfterScrollなど)で値を変更する必要があります。

+0

私はこの質問をしていましたが、データベースでは、フィールドはデフォルト値Noで定義されています。これはAccessで動作しましたが、Delphiでは動作しませんでした。 – robert

+0

これは奇妙なことですが、私はデフォルト値がフロントエンドに渡されると思います。どのプロバイダの仕組みを使用していますか? ADO?フィールドは「必須」とマークされていますか? –

0

まだ該当する場合は、フィールドのステータスフィールドを確認してください。それはあなたが探しているものであるcbChecked、cbUncheckedまたはcbGrayでなければなりません。

関連する問題