🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
8 messages
8 total messages Started by karol77marchewka Wed, 25 Nov 2015 20:25
usuwanie rekordów z tabeli
#137049
Author: karol77marchewka
Date: Wed, 25 Nov 2015 20:25
8 lines
1589 bytes
W bazie danych są dwie tabele: jedna "URLOPY" zawierająca wpisy o urlopach danego pracownika o polach: PESEL, OdKiedy, DoKiedy, itd.
Druga tabela OSOBY zawierająca pola: PESEL, Imię, Nazwisko, itd.
W obydwóch tabelach pole PESEL to pole typu txt dł. 11 znaków.

Załóżmy, że z firmy ubywa Pan Kowalski - znika mi więc on z tabeli OSOBY. W jaki sposób usunąć wszystkie rekordy obrazujące jego urlopy z tabeli URLOPY.
Pomijając oczywiście zasadność takiego działania.

Karol
Re: usuwanie rekordów z tabeli
#137050
Author: Mariusz Jakoniuk
Date: Wed, 25 Nov 2015 20:48
12 lines
1876 bytes
> W bazie danych są dwie tabele: jedna "URLOPY" zawierająca wpisy o urlopach danego pracownika o polach: PESEL, OdKiedy, DoKiedy, itd.
> Druga tabela OSOBY zawierająca pola: PESEL, Imię, Nazwisko, itd.
> W obydwóch tabelach pole PESEL to pole typu txt dł. 11 znaków.
> 
> Załóżmy, że z firmy ubywa Pan Kowalski - znika mi więc on z tabeli OSOBY. W jaki sposób usunąć wszystkie rekordy obrazujące jego urlopy z tabeli URLOPY.

"Znika" oznacza kasujesz?
Jeśli tak i masz założone relacje to same znikną :)
Jeśli NIE to musisz sam je usunąć.

MJ
Re: usuwanie rekordów z tabeli
#137051
Author: karol77marchewka
Date: Thu, 26 Nov 2015 03:36
16 lines
2324 bytes
W dniu środa, 25 listopada 2015 21:48:39 UTC+1 użytkownik Mariusz Jakoniuk napisał:
> > W bazie danych są dwie tabele: jedna "URLOPY" zawierająca wpisy o urlopach danego pracownika o polach: PESEL, OdKiedy, DoKiedy, itd.
> > Druga tabela OSOBY zawierająca pola: PESEL, Imię, Nazwisko, itd.
> > W obydwóch tabelach pole PESEL to pole typu txt dł. 11 znaków.
> > 
> > Załóżmy, że z firmy ubywa Pan Kowalski - znika mi więc on z tabeli OSOBY. W jaki sposób usunąć wszystkie rekordy obrazujące jego urlopy z tabeli URLOPY.
> 
> "Znika" oznacza kasujesz?
> Jeśli tak i masz założone relacje to same znikną :)
> Jeśli NIE to musisz sam je usunąć.
> 
> MJ

Tyle wiem :-)

Problem polega na tym, że relacja założona jest na polach tekstowych więc nie mogę jej nadać "Kaskadowo usuwaj dane". A przy utworzeniu kwerendy sprzężonej jednostronnie i wybraniu zestawu rekordów do usunięcia kwerenda podaje mi komunikat o niemożności usuwania danych
Re: usuwanie rekordów z tabeli
#137052
Author: MaciejF
Date: Fri, 27 Nov 2015 13:11
3 lines
1636 bytes
Jeżeli indeks typu txt jest problemem i nie jest możliwe usuwanie kaskadowe.

To napisz sobie dwie kwerendy jedną dla każdej z tabel, wykonaj jedną po drugiej transakcyjnie.
Re: usuwanie rekordów z tabeli
#137053
Author: karol77marchewka
Date: Fri, 27 Nov 2015 15:07
10 lines
2211 bytes
W dniu piątek, 27 listopada 2015 14:12:01 UTC+1 użytkownik MaciejF napisał:
> Jeżeli indeks typu txt jest problemem i nie jest możliwe usuwanie kaskadowe.
> 
> To napisz sobie dwie kwerendy jedną dla każdej z tabel, wykonaj jedną po drugiej transakcyjnie.

Tabela z danymi osób zatrudnionych w zakładzie jest zasysana raz na tydzień i zawiera ona wyłącznie listę obecnie zatrudnionych osób. Tym samym jedyne co chcę robić, np przy otwarciu bazy to podpiąć pod autoexec kwerendę, która usunie mi z tabeli urlopy osierocone rekordy. Mam taką kwerendę:
DELETE URLOPY.*, OSOBY.PESEL
FROM URLOPY LEFT JOIN OSOBY ON URLOPY.PESEL = OSOBY.PESEL
WHERE (((OSOBY.PESEL) Is Null));
Ale otrzymuję komunikat "Nie można usunąć danych z podanych tabel"
Re: usuwanie rekordów z tabeli
#137054
Author: MaciejF
Date: Fri, 27 Nov 2015 16:40
10 lines
1536 bytes
Może tak:

DELETE * FROM URLOPY
WHERE PESEL NOT IN (SELECT DISTINCT PESEL FROM OSOBY)

Pisane z palca.
Pokombinuj z podkwerendami (kwerendami zagnieżdżonymi)
Pomysł na szybko po przeczytaniu twojego ostatniego posta.

MF
Re: usuwanie rekordów z tabeli
#137055
Author: karol77marchewka
Date: Fri, 27 Nov 2015 22:07
13 lines
1882 bytes
W dniu piątek, 27 listopada 2015 17:40:10 UTC+1 użytkownik MaciejF napisał:
> Może tak:
> 
> DELETE * FROM URLOPY
> WHERE PESEL NOT IN (SELECT DISTINCT PESEL FROM OSOBY)
> 
> Pisane z palca.
> Pokombinuj z podkwerendami (kwerendami zagnieżdżonymi)
> Pomysł na szybko po przeczytaniu twojego ostatniego posta.
> 
> MF

O to mi chodziło :-)
Re: usuwanie rekordów z tabeli
#137056
Author: Maciej Tokarz
Date: Wed, 16 Dec 2015 09:09
10 lines
1368 bytes
Witaj,

    trochę po czasie, ale dołączę jeszcze jedno rozwiązanie...
    Dodaj pracownikowi pole Widoczny tak/nie.
    Jeśli pracownik zwalnia się, wtedy można mu nadać Widoczny = nie, przy 
okazji nie tracąc danych archiwalnych.
    Widoczność to naturalnie warunek istnienia w systemie.

Pozdrawiam,
Maciej Tokarz
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