「抽出条件でデータ型が一致しません」とエラーが出ます。

解決


もも  2009-07-14 19:40:28  No: 35127

いつもお世話になります。
  「抽出条件でデータ型が一致しません」とエラーが出ます。
  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;
------------------------------------------------------------------------


おらくる勉強中  2009-07-14 21:19:11  No: 35128

例えば名称区分を'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


もも  2009-07-14 22:02:44  No: 35129

いつもお世話になります。
  更新のところは『SET』が抜けておりました。
  しかし、修正して同じエラーが出ます。
  どうも以下の文で引っかかっているようですが、どうしても判りません。
  int_wk := ADOQuery1.FieldByName('名称区分').AsInteger + 1;


もも  2009-07-14 22:13:17  No: 35130

いつもお世話になります。
  確認のためにShowMessageで以下のようにしても、「抽出条件でデータの型が一致しません」とエラーとなります。
  名称区分はAccess2003では「数値型」なのですが、.AsIntegerではダメ
なのでしょうか?
  もうさっぱり判りません。。。

  ShowMessage(ADOQuery1.FieldByName('名称区分').AsString);
  ShowMessage(IntToStr(ADOQuery1.FieldByName('名称区分').AsInteger));


GTR  2009-07-14 22:39:04  No: 35131

Select分を実行した後に最初のデータを取得して
いないからエラーになっているのではないでしょうか?

ADOQuery1.Open;
の後に
ADOQuery1.First;   //最初のデータを取得
を追加してみたら。


オラクル勉強中  2009-07-14 23:06:32  No: 35132

もしかしてSerial_No_Tableのコード項目はテキスト型ですか?
>「抽出条件でデータ型が一致しません」
というエラーなので、コード項目に「00」という数値をセットしている為にエラーが発生してると思います。

一度
  ADOQuery1.SQL.Add('SELECT 名称区分 FROM Serial_No_Table'
                   + ' WHERE コード = ''00'''
                   );
に置き換えて実行してください。


DEKO  2009-07-14 23:39:46  No: 35133

> もしかして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;


もも  2009-07-15 00:50:33  No: 35134

いつもお世話になります。
  GTR様、オラクル勉強中様、DEKO様、上手くいきました。
  もう何とお礼を言っていいのか判りません。
  表示もDB更新も出来てしまって感激しています。
  本当にありがとうございました。
  また、よろしくお願い致します。(m_m)(m_m)(m_m)


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

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






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