cennot delete or update

0

witam chciałem się dowiedzieć jak można zmienić komunikat który mi wyskakuje "cennot delete or update a forigen key constraint fails"

chciałem się dowiedzieć jak można zmienić ten komunikat albo wystawić wcześniej komunikat ze nie można usunąć danego rekordu

0

To zależy od składni bazy danych.
Przy definiowaniu referential integrity przykładowo trzeba dać na końcu
ON DELETE CASCADE ON UPDATE CASCADE
wtedy rekordy w tabeli podrzędnej zostaną skasowane przed kasowaniem rekordu w tabeli nadrzędnej.

0

to wiem jak usunąć ale ja chce żeby mi wyswietlil wiadomosc jak chce usunąć wiersz który jest powiązany kliuczem obcym

0

Chyba nie tedy droga. Jesli juz ma sie cos takiego dziac to moze jakas procedure skladowana.

0
.... napisał(a)

Chyba nie tedy droga. Jesli juz ma sie cos takiego dziac to moze jakas procedure skladowana.

Ja tam idę na łatwiznę i takie rzeczy jak zapytania czy mogę usunąć nie robię na poziomie bazy danych tylko na poziomie serwerowym programu client-server. Łatwiej się pisze w Delphi niż w języku programowania danej bazy danych. Z tego samego powodu nie używam też php tylko Delphi. Nie muszę uczyć się dodatkowego języka.

0

"cennot"? cannot. kurna nawet przepisac nie potrafia. przeciez to az bije po oczach.

0
ehhh napisał(a)

"cennot"? cannot. kurna nawet przepisac nie potrafia. przeciez to az bije po oczach.
Chyba nie masz większych problemów, skoro czepiasz się literówek.

A wracając do meritum. Przyznaję, że nie ćwiczyłem tego tematu, ale sie nad nim zastanawiałem. Większość DataSetów ma takie zdarzenie jak: onError, a jeżeli nie one wprost, to na pewno komponent, który odpowiada za połączenie do bazy danych.

zazwyczaj te zdarzenia dostają jako parametr strukturę, zawierającą dane nt. błędu. W niej jest numer błędu, a serwer BD zazwyczaj przy wywalaniu typowego błedu (jak błąd Foreign Key) zwraca również jego numer. Wystarczy wtedy w try ... except ... end dorobić kawałek swojego kodu, ze swoim kmunikatem.

Zaznaczam - nie ćwiczyłem tego (choć przydałoby mi się), ale jeżeli będziesz potrzebował - mogę się nad tym "pochylić"

Powiedz jeszcze jakich komponentów dostępowych używasz i w połączeniu z jakim motorem.

0

Nawet jeśli błąd bazy danych ma swój numer to, o ile pamiętam, delphi otrzymuje tylko informacje o typie błędu (tutaj: błąd bazy danych) i komunikacie tekstowym błędu i ten komunikat jest różny dla różnych baz danych i nawet może się zmieniać w kolejnych wersjach tej samej bazy. Dlatego bezpieczniej jest odczytać w części serwerowej programu czy są rekordy podrzędne i w zależności od tego podjąć działanie.

0

Dlatego pytałem jakiego motoru bazy danych używa, bo np. MySQL w treści komunikatu zwraca na początku numer błędu, który można sparsować.

Treść komunikatu może się zmieniać między wersjami bazy danych, ale na pewno nie numer błędu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1