2016-10-27 7 views
-6

私が直面しているかなり重大な問題に対する解決策を探しています。 dbGridのレコードを削除したいのですが、コード化されたボタンをクリックして「削除」を確認すると、すぐに結果が見つかりません。削除されたレコードの結果を見つけるには、プログラムを閉じて再実行する必要があります。それだけで、レコードが削除されていることがわかります。私は、Accessデータベースへの接続の接続をADOに接続されているADOのテーブルを使用していますdbGridでのレコードの削除Delphi 2010

procedure TfrmPunte.btnDeleteClick(Sender: TObject); 
var 
sName, sLeerderNo : string; 
begin 
with dmPunte do 
    begin 
    sLeerderNo := tblLeerder['LeerderNr']; 
    sName := tblLeerder['NaamVan']; 
    if MessageDlg('Is jy seker dat jy ' + sName + ' met Leerder Nommer ' + sLeerderNo + ' wil wis van die rekords? Neem kennis dat al die rekords van sy/haar aktiwiteite ook uitgevee sal word!', mtWarning, [mbOk, mbCancel],0) = mrOK then 
     tblDeelname.Open; 
     tblDeelname.First; 
     while NOT tblDeelname.Eof do 
     begin 
      if tblDeelname['LeerderNr'] = sLeerderNo then 
      tblDeelname.Delete; 
      tblDeelname.Next; 
     end; 
     tblLeerder.Delete; 
     tblLeerder.Active := False; 
     tblLeerder.Active := True; 
    end; 
end; 

を次のように

私のコーディングは、基本的に見えます。私はappologize、いくつかの変数名は、アフリカーンス語です。 どうすればよいですか?

+0

削除されるはずのレコードは、まだDBグリッドに表示されていますが、私はADO接続でADOテーブルを使用しています。 –

+2

クイックビューの場合:削除後は、レコードを削除した後に1レコードをスキップします。次の前にelseを挿入する必要があります –

+0

"tblLeerder"と "tblDeelname"は両方ともTADODataSetであり、グリッドには "tblDeelname"の内容が表示されます。 tblDeelname.deleteの後にactice:= falseおよびactive:= trueを含める必要があります。 tblLeerderがDBGridに接続されている場合、あなたは何を見たいのですか? –

答えて

0

Table.refreshすべての環境で機能しません。安全な方法は

Table.Active := False; 
Table.Active := True; 

です。実際のデータセットが失われるという問題に注意してください。あなたはそれを保存し、ロケートを取得することができます。

+0

アドバイスをありがとう、私はそれを試みたが、残念ながらそれはまだ動作しません.... –

+1

より具体的にする必要があります。完全なコードを表示してください(どのタイプがテーブルですか?)。 dbgridでの削除を意味しますか?私は理解する:データセットのレコードを削除し、dbgridを更新??? –

+0

私はクリスティンの答えに自分のコードを追加しました。 –

関連する問題