[ Ivan Rakic @ 17.12.2011. 22:20 ] @
Pokušavam da obrišem sve redove jedne tabele koji se sadrže u drugoj tabeli. Ono što kvari sreću je da se veza medju tabelama ostvaruje preko polja koja nisu primarni ključ - ni u jednoj tabeli iako ih svaka pojedinačna tabela ima.

Kada pokušam da izvršim SQL iskaz tipa:

DELETE tabela1.*
FROM tabela2 INNER JOIN tabela1 ON tabela2.polje = tabela1.polje


dobijam poruku (u Accessu): Could not delete from specified tables.

Napominjem da zbog dizajna cele baze podataka nisam u mogućnosti da nijednom od polja za vezu iz ovih tabela dodelim primarni ključ iako su na odgovarajući način indeksirana.

Unapred hvala.


[Ovu poruku je menjao Ivan Rakic dana 17.12.2011. u 23:34 GMT+1]
[ Getsbi @ 18.12.2011. 18:13 ] @
Da bi obrisao roditeljsku tabelu moraš da raskineš vezu sa tabelom dete.
[ Ivan Rakic @ 18.12.2011. 21:40 ] @
Suštinski to sam u međuvremenu i morao da uradim:

1. selekcija zajedničkih zapisa u privremenu tabelu - evidentiranje primarnog ključa tabele koju trebam da brišem
2. brisanje zapisa u parent tabeli koji odgovaraju zapisima u privremenoj tabeli

Pitao sam se da li to može da se odradi na brži i efikasniji način?
[ Getsbi @ 19.12.2011. 06:24 ] @
Stvari stoje ovako:

Veza jedan prema više uspostavljena u Relationship, uz samo čekiranu opciju Enforce Referential Integriti, ne dozvoljava brisanje zapisa na strani jedan dogod postoji adekvatan zapis na strani više.

Ako čekiraš i dodatne opcje Cascade Update Related Fields-(kaskadno ili lančano ažuriranje povezanih polja) i Cascade Delete Related Fields-(kaskadno ili lančano brisanje povezanih polja), brisanje će biti moguće. Obaviće se tako što će ova druga zadata opcija voditi računa da za svaki roditeljski zapis prethodno budu obrisani i svi povezujući zapisi iz tabele dete.
[ Ivan Rakic @ 19.12.2011. 07:54 ] @
To je ok sto kazes. Postoji samo jedan mali problem: RELATIONSHIP NIJE DEFINISAN tako da to nije rešenje.

Naime, reč je o dve nezavisne tabele iz različitih baza.
[ Getsbi @ 19.12.2011. 10:42 ] @
Ako su tabele u različitim bazama (dva različita .mdb ili .accdb fajla), onda treba ulinkovati tabelu u unu u kojoj se SQL iskaz piše.
[ Ivan Rakic @ 19.12.2011. 15:31 ] @
Jedna tabela je u SQL serveru a druga u Jet bazi a to uopše ne pravi problem i to nije predmet mog pitanja. U prvom postu sam opisao problem.

Napomenjim da iskaz tipa DELETE Tabela1.* FROM Tabela1 WHERE Tabela1.id=1 (gde je id PK) radi ispravno ali se problem javlja u iskazu koji sam prethodno naveo!!!