DBGridに表示したTableのレコードをDBNavigatorの[レコードの削除]で
削除したのち(Gridでは実際削除されている)、[全データの更新(Refreshボタン)]を押すと、
「'ClientDataSet1:最新のデータを取得する前に変更データを更新しなければなりません。'」と出てエラーになってしまいます。
Gridで削除されていた(表示されていなかった)レコードはデータベースからは削除されていません。
なお接続はdbExpressで
SQLConnection
SQLDataSet
DataSetProvider
ClientDataSet
DataSource
です。
DBはMySQLです。
どのようにすればエラーが出ず解決できますでしょうか?
わかる方がいましたらよろしくお願いいたします。
ClientDataSet1のBeforeRefreshイベントでApplyUpdatesすれば、エラーはでなくなります。
procedure TForm1.ClientDataSet1BeforeRefresh(DataSet: TDataSet);
begin
if MessageDlg('Refreshする?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
TClientDataSet(DataSet).ApplyUpdates(-1)
else
Abort;
end;
外してたらすいません。
@っしーさんレスありがとうございました。
早速やってみましたが今度は、
「'You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near';」
というエラーが出てしまいました。
これはMySQLのほうの問題でアプリケーション(!?)の問題ではないんでしょうか?
まだ勉強したてですが今までの経験では
SQLDataSetのactiveが関係しているのではないかと思い、試してみたのですがダメでした・・・。
心当たりのある方、いらっしゃいましたら是非ご教授お願いいたします。
適切な回答ではないかもしれませんが、、、
SQLDataSetのCommandTextに記述したSQL分の最後に”;(セミコロン)”がありませんか?
dbExpressのバグのような気がします。
確か、D7のUpdate1でSQL分の最後のセミコロンの問題は解決されているような気がします。
Update1を当てていない場合は、SQL分の最後のセミコロンを削除して、様子を見てください。
”SQL分”じゃなくて”SQL文”です。
失礼しました。
できましたーっ!!!!!
@っしーさんのご指摘通り、SQL文の最後につけていたセミコロンをはずしたところ
正常にデータの更新を行うことができました。
そういったバグがあるとは知らなかったため、セミコロンが原因でバグっていたなんて考えもしませんでした(汗)。
的確で迅速なレスありがとうございました。
解決してよかったですね。
ついでに、TSQLQueryでSQL文を指定するときも、最後にセミコロンを付けると動きません。(T_T)
私も散々悩みました、、、
ツイート | ![]() |