いつもお世話になります。
「抽出条件でデータ型が一致しません」とエラーが出ます。
DBはMicrosoft Access 2003を使っています。
名称区分はDB上の型は「数値」を設定しています。この場合、.AsInteger
では間違っているのでしょうか?
環境は、WindowsXP、Access2003、Delphi2007です。
どなかご教授頂けますでしょうか?
------------------------------------------------------------------------
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT 名称区分 FROM Serial_No_Table'
+ ' WHERE コード = 00'
);
ADOQuery1.Open;
int_wk := ADOQuery1.FieldByName('名称区分').AsInteger + 1;
Form2.Edit1.Text := IntToStr(int_wk);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'UPDATE Serial_No_Table 名称区分 = '
+ IntToStr(int_wk)
+ ' WHERE コード = 00';
ADOQuery1.ExecSQL;
------------------------------------------------------------------------
例えば名称区分を'1'に更新したい時、ももさんのSQLを使うと以下の様になります。
>UPDATE Serial_No_Table 名称区分 = '1' WHERE コード = 00'
・・・おかしいところはありませんか?
もし気がつかない時は以下のURLのSQL文と見比べてください。
SQLServer・データベース入門 【Sql Server UPDATE文】
ttp://www.near-future.com/sqlserver/03sql_server_update.html
いつもお世話になります。
更新のところは『SET』が抜けておりました。
しかし、修正して同じエラーが出ます。
どうも以下の文で引っかかっているようですが、どうしても判りません。
int_wk := ADOQuery1.FieldByName('名称区分').AsInteger + 1;
いつもお世話になります。
確認のためにShowMessageで以下のようにしても、「抽出条件でデータの型が一致しません」とエラーとなります。
名称区分はAccess2003では「数値型」なのですが、.AsIntegerではダメ
なのでしょうか?
もうさっぱり判りません。。。
ShowMessage(ADOQuery1.FieldByName('名称区分').AsString);
ShowMessage(IntToStr(ADOQuery1.FieldByName('名称区分').AsInteger));
Select分を実行した後に最初のデータを取得して
いないからエラーになっているのではないでしょうか?
ADOQuery1.Open;
の後に
ADOQuery1.First; //最初のデータを取得
を追加してみたら。
もしかしてSerial_No_Tableのコード項目はテキスト型ですか?
>「抽出条件でデータ型が一致しません」
というエラーなので、コード項目に「00」という数値をセットしている為にエラーが発生してると思います。
一度
ADOQuery1.SQL.Add('SELECT 名称区分 FROM Serial_No_Table'
+ ' WHERE コード = ''00'''
);
に置き換えて実行してください。
> もしかしてSerial_No_Tableのコード項目はテキスト型ですか?
00 とあるのでそのような気がします。
型が分からなくなるようであれば、パラメータを指定した方がいいですよ。
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT ');
ADOQuery1.SQL.Add(' 名称区分 ');
ADOQuery1.SQL.Add('FROM ');
ADOQuery1.SQL.Add(' Serial_No_Table');
ADOQuery1.SQL.Add('Where ');
ADOQuery1.SQL.Add(' コード = :_CODE');
ADOQuery1.Parameters.ParamByName('_CODE').AsString := '00';
ADOQuery1.Open;
int_wk := ADOQuery1.FieldByName('名称区分').AsInteger + 1;
Form2.Edit1.Text := IntToStr(int_wk);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE ');
ADOQuery1.SQL.Add(' Serial_No_Table ');
ADOQuery1.SQL.Add('Set ');
ADOQuery1.SQL.Add(' 名称区分 = :MKBN');
ADOQuery1.SQL.Add('Where ');
ADOQuery1.SQL.Add(' コード = :_CODE ');
ADOQuery1.Parameters.ParamByName('MKBN' ).AsInteger := int_wk;
ADOQuery1.Parameters.ParamByName('_CODE').AsString := '00';
ADOQuery1.ExecSQL;
いつもお世話になります。
GTR様、オラクル勉強中様、DEKO様、上手くいきました。
もう何とお礼を言っていいのか判りません。
表示もDB更新も出来てしまって感激しています。
本当にありがとうございました。
また、よろしくお願い致します。(m_m)(m_m)(m_m)
ツイート | ![]() |