🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
3 messages
3 total messages Started by Radko Fri, 23 Apr 1999 06:19
Kasowanie z tabel w relacji
#388
Author: Radko
Date: Fri, 23 Apr 1999 06:19
44 lines
2244 bytes
Mam trzy tabele, w relacjach jak poni¿ej:

MASTER
 |_DETAIL1 (Master dla DETAIL2)
   |_DETAIL2

W momencie usuwania rekordu z tabeli MASTER,. chcê aby zosta³y usuniête
wszystkie odpowiadaj¹ce mu rekordy z tabeli DETAIL1. I odpowiednio w
momencie usuwania rekordu z tabeli DETAIL1, wszystkie odpowiadaj¹ce mu
rekordy z DETAIL2. W tym celu wykorzystujê zdarzenie OnBeforeDelete.
Wszystkie trzy tabele maj¹ wspóln¹ obs³ugê tego zdarzenia, jak poni¿ej:

Procedure OnBeforeDeleteAnyTable(Sender : TDataSet);
Begin
 If Sender = MASTER then KASUJ_Z_DETAIL1  else
 If Sender = DETAIL1 then KASUJ_Z_DETAIL2;
End;

Procedury KASUJ_Z_DETAILn maj¹ identtyczn¹ postaæ (zmienia siê jedynie
tabela).

Procedure KASUJ_Z_DETAILn;
Begin
 With DETAILn do
   try
    DisableControls;
    First;
    While Not Eof do
      Delete;
   Finally
    EnableControls;
  End;
 End;

Uzyskujê ciekawy efekt. W momencie, kiedy kasujê pojedyncze rekordy z
tabeli DETAIL1, wszystko jest OK. Kasowany jest rekord z DETAIL1 i
wszystkie z DETAIL2, które mu odpowiadaj¹. Jednak, kiedy kasujê rekord
MASTER, kasowane s¹ poprawnie wszystkie z DETAIL1. Rekordy z DETAIL2
kasowane s¹ jednak poprawnie jedynie dla pierwszego usuwanego rekordu z
DETAIL1, dla reszty pozostaj¹ w bazie. Czy ktoœ mo¿e zetkn¹³ siê z takim
problemem i wie z czego on wynika ?

radko@uoo.univ.szczecin.pl
Re: Kasowanie z tabel w relacji
#387
Author: Zbyszek Z.
Date: Fri, 23 Apr 1999 07:48
47 lines
2537 bytes
DisableControls w KASUJ_Z_DETAILn, powoduje ze nie sa wyzwalane zdarzenia
dal tej tablicy w tym wypadku Detail2.

--
Zbyszek Zarzycki
BSC Polska
Spotkanie uzytkowników produktów INPRISE/BORLAND
Warszawa, 11-12 maj 1999
wiecej informacji http://www.inprise.com.pl/events/icon99.htm

    Radko napisał(a) w wiadomości:
<372010DE.10AD72B1@uoo.univ.szczecin.pl>...

    Mam trzy tabele, w relacjach jak poniżej:
    MASTER
     |_DETAIL1 (Master dla DETAIL2)
       |_DETAIL2

    W momencie usuwania rekordu z tabeli MASTER,. chcę aby zostały usunięte
wszystkie odpowiadające mu rekordy z tabeli DETAIL1. I odpowiednio w
momencie usuwania rekordu z tabeli DETAIL1, wszystkie odpowiadające mu
rekordy z DETAIL2. W tym celu wykorzystuję zdarzenie OnBeforeDelete.
Wszystkie trzy tabele mają wspólną obsługę tego zdarzenia, jak poniżej:

    Procedury KASUJ_Z_DETAILn mają identtyczną postać (zmienia się jedynie
tabela).

    Procedure KASUJ_Z_DETAILn;
    Begin
     With DETAILn do
       try
        DisableControls;
        First;
        While Not Eof do
          Delete;
       Finally
        EnableControls;
      End;
     End;

    Uzyskuję ciekawy efekt. W momencie, kiedy kasuję pojedyncze rekordy z
tabeli DETAIL1, wszystko jest OK. Kasowany jest rekord z DETAIL1 i wszystkie
z DETAIL2, które mu odpowiadają. Jednak, kiedy kasuję rekord MASTER,
kasowane są poprawnie wszystkie z DETAIL1. Rekordy z DETAIL2 kasowane są
jednak poprawnie jedynie dla pierwszego usuwanego rekordu z DETAIL1, dla
reszty pozostają w bazie. Czy ktoś może zetknął się z takim problemem i wie
z czego on wynika ?
Re: Kasowanie z tabel w relacji
#389
Author: Marcin Wieczorek
Date: Fri, 23 Apr 1999 09:34
9 lines
1035 bytes
Radko <radko@uoo.univ.szczecin.pl> napisał(a):
>Newsgroups: pl.comp.lang.delphi.bazy-danych,pl.comp.lang.delphi

Jeśli już decydujecie się na wysyłanie do dwóch grup to dawajcie
follow-up na jedną z nich. Z góry dziękuję.
-- 
Marcin Wieczorek ( T-1000 )
wieczor@polbox.com 
DELPHI FAQ http://delphi.koti.com.pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads