DBNavigatorの全データ更新でのエラーはなぜ?

解決


ペニー  2004-08-30 23:54:49  No: 10700

DBGridに表示したTableのレコードをDBNavigatorの[レコードの削除]で
削除したのち(Gridでは実際削除されている)、[全データの更新(Refreshボタン)]を押すと、
「'ClientDataSet1:最新のデータを取得する前に変更データを更新しなければなりません。'」と出てエラーになってしまいます。
Gridで削除されていた(表示されていなかった)レコードはデータベースからは削除されていません。

なお接続はdbExpressで
SQLConnection
SQLDataSet
DataSetProvider
ClientDataSet
DataSource
です。
DBはMySQLです。

どのようにすればエラーが出ず解決できますでしょうか?
わかる方がいましたらよろしくお願いいたします。


@っしー  2004-08-31 03:50:19  No: 10701

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;

外してたらすいません。


ペニー  2004-08-31 18:53:35  No: 10702

@っしーさんレスありがとうございました。

早速やってみましたが今度は、
「'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が関係しているのではないかと思い、試してみたのですがダメでした・・・。

心当たりのある方、いらっしゃいましたら是非ご教授お願いいたします。


@っしー  2004-08-31 20:26:15  No: 10703

適切な回答ではないかもしれませんが、、、

SQLDataSetのCommandTextに記述したSQL分の最後に”;(セミコロン)”がありませんか?

dbExpressのバグのような気がします。
確か、D7のUpdate1でSQL分の最後のセミコロンの問題は解決されているような気がします。
Update1を当てていない場合は、SQL分の最後のセミコロンを削除して、様子を見てください。


@っしー  2004-08-31 20:27:21  No: 10704

”SQL分”じゃなくて”SQL文”です。

失礼しました。


ペニー  2004-08-31 20:39:03  No: 10705

できましたーっ!!!!!

@っしーさんのご指摘通り、SQL文の最後につけていたセミコロンをはずしたところ
正常にデータの更新を行うことができました。
そういったバグがあるとは知らなかったため、セミコロンが原因でバグっていたなんて考えもしませんでした(汗)。

的確で迅速なレスありがとうございました。


@っしー  2004-08-31 21:14:22  No: 10706

解決してよかったですね。

ついでに、TSQLQueryでSQL文を指定するときも、最後にセミコロンを付けると動きません。(T_T)

私も散々悩みました、、、


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

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






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