2012-04-18 4 views
0

私のデータベースでは、列cardidはnullがtrueに設定されています。つまり、NULLは許可されていません。sql - 引用符を無効にするnullを要求しない

私はデルファイ兼で次のクエリを実行TZQuery、結果フィールドcard_id0は正しいが、結果フィールドcard_id1ある真として必要な性質を持っているZEOS card_id1を囲む引用符、すなわちていない私にデータを与える意味するように見えます制約はありません。

select c.id, c.cardid as card_id0, c.cardid as "card_id1" 
    from mydata c 

この標準はsqlですか?

+1

結果セット/カーソルの制約はSQL標準の一部ではないと私は考えています。 –

+0

これはDelphiの問題であり、MySQLの問題ではないと確信しています。 –

答えて

0

あなたが見ているのは、TZQueryがテーブル/クエリのメタデータからデータベース制約(nullではない)を検出していないことです。これは、TZQueryコンポーネントを使用してレコードを追加または更新する場合にのみ意味があります。 card_id0またはcard_id1のヌルのレコードを追加または更新しようとすると、例外が発生します。例外はコンポーネントではなくデータベースによって生成されます。

通常、フィールド名(またはエイリアス)の引用は、SQLクエリのフィールド名に不正な文字を許可するためにのみ使用されます。すなわち、フィールド名にスペースがある。 Firebird/Interbaseなどのフィールド名の引用には副作用があります。フィールド名を引用すると、大文字と小文字を区別しないで大文字と小文字が区別されます。

+0

これは正解と思われます(最後の文は非常に面白いです)。私は、データベースに入力しようとする前にデータが正しいことを確認するために、メモリテーブルと一緒に制約を使用しているため、例外が発生することはありません。どうもありがとう。 – user1342438

0

これはsqlとは関係がないと考えていますが、resulsetを使用した制約はありません。 私はこれがTZQueryだと思います。私はそれが行って、テーブルCのメタデータを取得し、cardidとcardid0の間のマップを仮定し、次に "card_id1"のための何も持っていなかったと思います。

select句のフィールドの順序を逆にして、必要なプロパティがそれとスワップするかどうかを確認します。

+0

"結果セットで制約を戻さない"!ああ、しかし私は8 =です)引用符を使わないと結果フィールドにデータベースの "allow null"プロパティと一致するfalse/trueの正しい "required"値があるので、引用符は常にfalse値になります。 – user1342438

+0

いいえ、あなたはしません。 TZqueryはクエリの結果を返します。これを行うには、基になるデータベースにピアがあります。それに頼らないでください、あまりにも多くのものに依存して正確です。 –

+0

ええ、非常に有効なポイント。ああ、ドローイングボードに戻って。あまりにも遠くなる前に私を止めてくれてありがとう。週末をお楽しみください。 Bill – user1342438

関連する問題