以前投稿させていただいた内容の続きなのですが…
複数のテーブルよりTQueryを用いてデータを取得し、
TDBGridに表示しています。
その内容をボタンクリックで、任意のテーブルに
追加/修正する処理を考えています。
UpdateSQLを用いて修正することはできていますが、
追加処理ができません。
登録先のテーブルをLocateメソッドを利用して識別し、
追加or修正の分岐はできています。
また、Insertメソッドで追加モードにもしていますが、
「この操作は行えません」というエラーメッセージが表示されます。
どうして追加処理ができないのかがわかりません。
皆様、ご指導宜しくお願いします。
自己レスです。
現状としては、単独での修正処理はできています。
追加処理は、一度更新処理を行うと可能となり、
最初に追加処理を行うとエラーとなります。
エラーになる原因がわかりません。
以下にソースを掲載させていただきます。
procedure TForm.ButtonClick(Sender: TObject);
begin
if Table.Locate(NO',DBEdit.Text,[loCaseInsensitive]) then
//----- 更新処理 -----//
begin
with Query do begin
if Modified then
begin
UpdateSQL.ModifySQL.Clear();
UpdateSQL.ModifySQL.Add('update文');
Post;
end;
if State in [dsInsert, dsEdit] then
Cancel;
if UpdatesPending then
Database.ApplyUpdates([Query]);
end;
end
else
//----- 追加処理 -----//
begin
with Query do begin
if Modified then
begin
UpdateSQL.InsertSQL.Clear();
UpdateSQL.InsertSQL.Add('insert文');
Post;
end;
if State in [dsInsert, dsEdit] then
Cancel;
if UpdatesPending then
Database.ApplyUpdates([Query]);
end;
end;
end;
どなたかお分かりになる方いらっしゃいましたら、
ご指導宜しくお願いします。
TUpdateSQLのSQLを一々変えているようですが、設計時には設定できないような内容なのでしょうか?追加処理ができないのは、追加処理をステップ実行して、エラーの内容を把握するのが第一だと思います。
HOtaさん レスありがとうございます。
追加処理のステップ実行をおこないましたが、
Database.ApplyUpdates([Query]); の部分で、
「この操作は行えません」というエラーがでます。
前述した通り、
一度、更新処理を行った後に追加処理を行うと実行可能ですが、
最初から、追加処理を行うとエラーとなります。
そこで、ステップ実行を行ったのですが、上記の部分でエラーとなります。
前者のやり方では追加処理が可能なのに、後者の方法では
エラーとなる原因がわかりません。
なにか他に必要な処理があるのでしょうか?
ご指導宜しくお願いします。
TQueryでも追加不可能でしょうか?同じinsert文で追加できますでしょうか?
HOtoさん レスありがとうございます。
追加処理自体はおかしくないと思うのですが…
単独ではないにしろ一定の条件では正しく処理を行うので。
勘違いでしたら、すみません。
ツイート | ![]() |