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


印刷屋  2010-09-04 22:19:36  No: 39099  IP: 192.*.*.*

以前、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 11:47:41  No: 39100  IP: 192.*.*.*

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

編集 削除
印刷屋  2010-09-05 12:16:21  No: 39101  IP: 192.*.*.*

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

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 12:34:09  No: 39102  IP: 192.*.*.*

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

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

編集 削除
HOta  2010-09-05 13:26:21  No: 39103  IP: 192.*.*.*

ちょっと普通の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-05 19:35:23  No: 39104  IP: 192.*.*.*

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

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

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

編集 削除