mdbのboolean型の更新

解決


godon  2007-09-13 23:28:16  No: 27761

一日に何度もすいません。adoでmdbに接続してるのですが、mdbのboolean型の更新がsqlクエリーで出来ません。
boolean型の列名はcheckです。

adoquery1.Active:=false;
adoquery1.SQL[0]:='update table1 set check=true where id=5';
adoquery1.ExecSQL;
としたのですがupdateの構文エラーとでます。

またadoqueryのプロパティでdatatypeとtypeをboolean型にした初期値true
のパラメータparam1を作り試しましたが同様でした。
adoquery1.Active:=false;
adoquery1.SQL[0]:='update table1 set check=:params1 where id=5';
adoquery1.ExecSQL;

boolean型以外は普通に更新できるのですが、皆様よろしくお願いします。


Syake  2007-09-13 23:58:41  No: 27762

mdbのBoolean型って良くわからんですが
もしかしてTrueは1でFalseは0とか・・・
ちゃうかな?


Syake  2007-09-14 00:09:50  No: 27763

mdbはBoolean型ではなくてYES/NO型ですね
DBGridに呼び出した時点でTrueやFalseになるだけです。
論理型として判断しているようです。
論理型と同一でYESが1で、NOが0でした。

'UPDATE  TB  SET  CHECK = 1 WHERE ID = 5'


godon  2007-09-14 00:51:59  No: 27764

syake様ありがとうございます。
失礼しましたご指摘のとおりmdbはYES/NO型でした。
教えてくださったように1あるいは0で指定しましたが、
私のところではだめでした。うーんどうしてでしょう。
試しにアクセス側のクエリでやったところupdate table1 set check=trueでも1でもyesでも普通に更新できました。
環境delphi6プロ  XPプロです。


Syake  2007-09-14 01:13:42  No: 27765

ありゃ駄目ですか?
試しに、直接SQL文を発行してみました。
ADOConnection1.Execute('UPDATE TB SET FLG =1 WHERE ID = 1');
FLGはYESに
ADOConnection1.Execute('UPDATE TB SET FLG =1 WHERE ID = 1');
FLGはNOに
更新はそれぞれ正しく行われました。
D2006#2  Access2000  XPProSP2


Syake  2007-09-14 01:14:44  No: 27766

失礼
ADOConnection1.Execute('UPDATE TB SET FLG =1 WHERE ID = 1');
FLGはYESに
ADOConnection1.Execute('UPDATE TB SET FLG =0 WHERE ID = 1');
FLGはNOに


Syake  2007-09-14 01:30:18  No: 27767

ADOQeryは使ったこと無いので試しに
//---------------------------
if ADOQuery1.Active then ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE TB SET FLG =1 WHERE ID = 1');
ADOQuery1.ExecSQL;
//---------------------------
こちらも正しく更新されました。
駄目だったのは、何かエラーが発生したのでしょうか?
別にDBGridに既にデータが表示されているのであれば
DBGrid側も再読み込みかけないと駄目ですよ。
(キャッシュされたデータを表示しているだけだから)


godon  2007-09-14 02:22:17  No: 27768

syake様
ほんとに申し訳ないです。
試しに簡単にmdbを作ったら普通にいけました。
またflg=trueでも更新OKでした。
元のmdbが壊れたのか複雑なのか不明ですがお騒がせしてすいません。
原因が絞り込めましたので、もう少し検証してみます。
syake様付き合っていただき感謝です。


godon  2007-09-14 04:21:42  No: 27769

いろいろ検証した結果。多分ですが理由がわかりました。私が作った論理型のcheckなる列はSQLの予約語のようでした…。変更したらあっさり解決しました。盲点でした。すいません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加