DBISAMでUpDateSQLがうまく使えません。


印刷屋  2010-09-05 07:19:36  No: 39099

以前、BDEとIBでUpdateSQLの使い方を教えていただいて、そのままDBISAMで利用しようとしたらうまくいきません。
ご教授願います。D7+WIN2000

とりあえずInsert部分のみですが、
with DBISAMUpdateSQL do
begin
 Query[ukInsert].ParamByName('CODE').AsString := edtCode.Text;
 Query[ukInsert].ParamByName('NAME').AsString := edtName.Text;
 Apply(ukInsert);//←ここで
end;

A value must be provided for the field'NAME' in the table 'TEST'
'TEST'というテーブルのfield'NAME'に値を提供しなければなりません。

となります。
テーブル設計とかQueryのSQLとか確認したんですがどうもわかりません。


igy  2010-09-05 20:47:41  No: 39100

TDBISAMUpdateSQL は使ったことがないのですが、
InsertSQL プロパティ は、どのように記述していますか?


印刷屋  2010-09-05 21:16:21  No: 39101

前文は省略&名称変換していますが、実際は

insert into NECESSARY
  (CODE, NAME, KANA, DISPLAYNAME, SALEPRICE, COSTPRICE, WHOLESALE,
   ORDERLOT, LOT, UNITNAME, MEMO)
values
  (:CODE, :NAME, :KANA, :DISPLAYNAME, :SALEPRICE, :COSTPRICE, :WHOLESALE,  
   :ORDERLOT, :LOT, :UNITNAME, :MEMO)

です。
Queryは
SELECT *
FROM NECESSARY
ORDER BY CODE ASC
です。

RequestLive=True&Order Byの記述を無くせば、カレントレコードに対する編集できるんですが、並びが登録順になるんでUpdateSQLを使いたいんです。


佐助  2010-09-05 21:34:09  No: 39102

>Apply(ukInsert);//←ここで

ExecSQL(ukInsert);  ではないでしょうか。


HOta  2010-09-05 22:26:21  No: 39103

ちょっと普通のBDEの構文とは違うので、判りにくいのですが、
BDEでTQuery+TUpdateSQLでSQL文が
>Queryは
>SELECT *
>FROM NECESSARY
>ORDER BY CODE ASC
だと、

with DBISAMUpdateSQL do
begin
 Edit;
 FieldByName('CODE').AsString := edtCode.Text;
 FieldByName('NAME').AsString := edtName.Text;
 Post;
 ApplyUpdate;
end;
は使えませんか?


印刷屋  2010-09-06 04:35:23  No: 39104

みなさんありがとうございます。
とりあえず、UpDateSQLでのInsertが成功しました。

with DBISAMUpdateSQL do
begin
  Append;
  Query[ukInsert].ParamByName('CODE').AsString := edtCode.Text;
  //つらつらと…パラメータを全部挿入。
  Post;
  ExecSQL;
end;
で挿入成功でした。

自分の認識として、
Apply(ukInsert)はパラメータがある場合
ExecSQL(ukInsert)はパラメータがない場合とヘルプを読んで解釈していたのですが。
Apply(ukInsert)だとエラーになりました。
意味がわかりません。


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

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






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