delete機能を実行させるには?

解決


久美  2003-09-05 20:33:15  No: 4643

keikoさんからの続きなのですが
具体的なコードは
procedure TForm1.Button1Click(Sender: TObject);
begin
query1.ApplyUpdates;
query1.Delete;
form1.Refresh;
end;
です。
SQLは
delete from TEST  where  EmpNo = 8
です。
このSQLでは一番上のレコードが削除しまいます。
また実際のデータベースACCESSでは、それすら削除されていません。
基本的なことだと思いますが、使い始めたばかりなので、できれば詳しくお願いしたいのですが。


にしの  2003-09-05 21:00:55  No: 4644

やりたいことをコードにできていないようです。

query1.ApplyUpdates;
// キャッシュのアップデート。Open,ExecSQLしていないと意味がありません

query1.Delete;
// アクティブレコードの削除

form1.Refresh;
// フォームの再描画

プロパティに設定してあるSQLを実行するのであれば、
query1.ExecSQL; // SQLの実行
query1.ApplyUpdates;//キャッシュ更新
だと思いますが、どうでしょう。


久美  2003-09-05 22:23:36  No: 4645

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.ExecSQL;
Query1.ApplyUpdates;
end;
参考にさせていただき、コードを書いてみたのですが
「Query1:データセットが編集または挿入モードではありません」
というエラーが出てしまいます。
どこが悪いのでしょうか?
また、UpdateSQLのdelete、insert、modifyの使い分けはどうするのかも
わかりません。(上のコード中で)
お願いします。


にしの  2003-09-05 22:57:20  No: 4646

UpdateSQLとは、TUpdateSQLコンポーネントのことですよね?
ひとまずこれは考えない方がよいです。
もし必要なら、
http://forum.nifty.com/fdelphi/samples/00886.html
ここにサンプルがあります。

ApplyUpdatesはいらないみたいです。
こちらでテストしてみたところ、

procedure TForm1.Button1Click(Sender: TObject);
begin
  Query1.SQL.Clear;
  Query1.SQL.Add('DELETE FROM test WHERE ID>=3');
  Query1.ExecSQL;
end;

こんな感じでOKでした。
後は、他のDBコンポーネントの設定や、DBの種類によって違うかもしれません。


HOota  2003-09-05 23:08:31  No: 4647

TUpdateSQLのリンク元を操作します。Closeしていては編集モードになりません。
TQueryのDataSetの対して行います。


HOota  2003-09-05 23:11:03  No: 4648

書いている途中で登録されてしまいました。
TQueryに対して,Deleteをして、
  Query1.Delete;
Closeする前にAppliUpdateをかけます。


久美  2003-09-05 23:19:52  No: 4649

にしの様ありがとうございます。

同じようにコードしたのですが下のような
警告が出ました。

デバッガ例外が発生
プロジェクトProject1.exeがEDBEngineErrorクラスの例外を生成しました。
’キー違反です。
[Microsoft][ODBC  Microsoft  Access  Driver]リレーションシップが
設定されたレコードがテーブル'orders'
にあるので、レコードの削除や変更を行うことはできません。’

書いてある意味すら理解できません。
何度も申し訳ないのですが、よろしくお願いします。


にしの  2003-09-05 23:20:13  No: 4650

TQueryのDeleteメソッドは、TDataSetのDeleteメソッドですよね?
これはアクティブレコードの削除だと思ったのですが、SQLを実行した際の対象レコードすべての削除になるんでしょうか。
DELETE FROM TEST ID > 3
の場合、
ID=3,ID=4,ID=5...もDeleteで消えます??


久美  2003-09-05 23:35:15  No: 4651

現在Form上には、TQueryとTUpdateSQLとTDataSourceとTDBGridとTButtonを貼り付けています。これではできないのでしょうか?
アクティブレコードだけの削除になっていました。
コードを

Query1.SQL.Clear;
Query1.SQL.Add('DELETE FROM test WHERE ID=8');
Query1.ExecSQL;

に変更したところ
{デバッガ例外が発生}
「「プロジェクトProject1.exeがEDBEngineErrorクラスの例外を生成しました。
’キー違反です。
[Microsoft][ODBC  Microsoft  Access  Driver]リレーションシップが
設定されたレコードがテーブル'orders'
にあるので、レコードの削除や変更を行うことはできません。’」」
というエラーが出てしまいました。
長くなってしまいましたが、お願いします。


HOota  2003-09-06 17:41:35  No: 4652

TQueryとTUpdateSQLが連結されていますので、Query1のSQLを変更すると、整合性がなくなり、エラーになります。この場合は、別にTQueryを配置し、Query2のSQLにDelete文を書き、ExecSQLを発行します。その後で、Query1をリフレッシュして読み直します。


久美  2003-09-08 22:23:15  No: 4653

ありがとうございました。


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

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






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