一日に何度もすいません。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型以外は普通に更新できるのですが、皆様よろしくお願いします。
mdbのBoolean型って良くわからんですが
もしかしてTrueは1でFalseは0とか・・・
ちゃうかな?
mdbはBoolean型ではなくてYES/NO型ですね
DBGridに呼び出した時点でTrueやFalseになるだけです。
論理型として判断しているようです。
論理型と同一でYESが1で、NOが0でした。
'UPDATE TB SET CHECK = 1 WHERE ID = 5'
syake様ありがとうございます。
失礼しましたご指摘のとおりmdbはYES/NO型でした。
教えてくださったように1あるいは0で指定しましたが、
私のところではだめでした。うーんどうしてでしょう。
試しにアクセス側のクエリでやったところupdate table1 set check=trueでも1でもyesでも普通に更新できました。
環境delphi6プロ XPプロです。
ありゃ駄目ですか?
試しに、直接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
失礼
ADOConnection1.Execute('UPDATE TB SET FLG =1 WHERE ID = 1');
FLGはYESに
ADOConnection1.Execute('UPDATE TB SET FLG =0 WHERE ID = 1');
FLGはNOに
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側も再読み込みかけないと駄目ですよ。
(キャッシュされたデータを表示しているだけだから)
syake様
ほんとに申し訳ないです。
試しに簡単にmdbを作ったら普通にいけました。
またflg=trueでも更新OKでした。
元のmdbが壊れたのか複雑なのか不明ですがお騒がせしてすいません。
原因が絞り込めましたので、もう少し検証してみます。
syake様付き合っていただき感謝です。
いろいろ検証した結果。多分ですが理由がわかりました。私が作った論理型のcheckなる列はSQLの予約語のようでした…。変更したらあっさり解決しました。盲点でした。すいません。
ツイート | ![]() |