ADOでSQLServerにINSERTするには

解決


ぴかちゅう  2009-06-06 22:11:03  No: 34641

Delphi7を使っています。
SQLServerに入力したデータを登録するようにしたいのですが、登録のボタンをクリックすると
パラメータ'コード'が見つかりません
というエラーが出ます。
どこがおかしいのか教えてください。

procedure TForm1.Button1Click(Sender: TObject);
//登録(続けて登録)処理
begin
  if Edit1.Text = '' then//必須入力項目確認
  ShowMessage('名前が入力されていません')
  else
    begin
      if Edit8.Text = '' then//必須入力項目確認
      ShowMessage('カナが入力されていません')
      else
        begin
          if Application.MessageBox('登録してよろしいですか?','登録確認',MB_YESNO) <> IDYES then//登録確認
          //登録処理
          ADOQuery1.SQL.Text := 'INSERT INTO TBL_アドレス帳 VALUES (:コード,:カナ名,:名前,:グループ,:住所1,:住所2,:電話番号,:メールアドレス)';
          ADOQuery1.Parameters.ParamByName('コード').Value := Edit7.Text;
          ADOQuery1.Parameters.ParamByName('カナ名').Value := Edit8.Text;
          ADOQuery1.Parameters.ParamByName('名前').Value := Edit1.Text;
          ADOQuery1.Parameters.ParamByName('グループ').Value := ComBoBox1.Text;
          ADOQuery1.Parameters.ParamByName('住所1').Value := Edit3.Text;
          ADOQuery1.Parameters.ParamByName('住所2').Value := Edit4.Text;
          ADOQuery1.Parameters.ParamByName('電話番号').Value := Edit5.Text;
          ADOQuery1.Parameters.ParamByName('メールアドレス').Value := Edit6.Text;
          ADOQuery1.ExecSQL;
          ShowMessage('登録しました');
          //初期画面に戻す
          ADOQuery2.SQL.Text := 'SELECT(CONVERT(INT,MAX(ISNULL(コード,0)) + 1))AS コード FROM TBL_アドレス帳';
          ADOQuery2.Open;
          Edit7.Text := ADOQuery2.FieldByName('コード').AsString;
          Edit1.Text := '';
          Edit8.Text := '';
          ComboBox1.Text := '01';
          Edit3.Text := '';
          Edit4.Text := '';
          Edit5.Text := '';
          Edit6.Text := '';
        end;
    end;
end;


Post  2009-06-07 00:46:45  No: 34642

>ADOQuery1.ExecSQL;ではなくてADOQuery.Post;

ExecSQLはSQL文を実行するときに使用します。


igy  2009-06-07 02:32:21  No: 34643

はずしているかもしれませんが・・・
TADOQueryの Prepared プロパティ は Trueですか?


ぴかちゅう  2009-06-07 02:44:16  No: 34644

>>Postさん

  Postに変えてみましたが同じ結果でした。

>>igyさん

  Trueに直しましたが、同じ結果でした。


igy  2009-06-07 02:59:19  No: 34645

>  Postに変えてみましたが同じ結果でした。

Postではなく、ExecSQL を使ってよいと思います。

>  Trueに直しましたが、同じ結果でした。

では

>:コード
などのように2バイト文字を使わずに、
 : CODE
のようにして、
>          ADOQuery1.Parameters.ParamByName('コード').Value := Edit7.Text;

          ADOQuery1.Parameters.ParamByName('CODE').DataType := ftString;
          ADOQuery1.Parameters.ParamByName('CODE').Value := Edit7.Text;
のように、DataType も指定した場合、どうですか?


ぴかちゅう  2009-06-07 03:30:57  No: 34646

すいません!!
単純ミスでした。

>>  if Application.MessageBox('登録してよろしいですか?','登録確認',MB_YESNO) <> IDYES then//

で、= にしなくてはいけないところを<>にしていました。

>>  パラメータ'コード'が見つかりません
は、いいえを選択したときに出てしますのですがこれは何でしょう・・・


igy  2009-06-07 04:02:53  No: 34647

>         if Application.MessageBox('登録してよろしいですか?','登録確認',MB_YESNO) <> IDYES then//登録確認

以降を
begin
end;
で囲んでないとか・・・


ぴかちゅう  2009-06-08 21:22:00  No: 34648

igyさんできました!!
本当にありがとうございました。


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

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






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