Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: usuwanie rekordów w bazie
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
becki
witam serdecznie;
tworze sobie taką małą aplikacyjkę php+mssql i pojawił się mały problemik;
chcąc usunąć jakiś rekord w bazie (przy pomocy procedury przechowywanej) wyskakuje mi komunikat, że rekord ma powiązanie z innymi tabelami. Jeśli te powiązania sa puste to wtedy wszystko jest ok.
Słyszalem o czymś takim jak kaskadowe usuwanie rekordów (jesli usuwam rekord to razem z nim usuwają się wszystkie powiązane), ale to chyba nie jest najlepsze rozwiązanie (głupi błąd powoduje utratę danych).
Można to cyba zrobić w ten sposób ze ta procedura przechowywana sprawdza czy są powiązania i jeśli takie są to usuwa dane.
To ta procedura:
Kod
CREATE procedure del_liga
(    @id_liga int
)
as
delete
from ligi
where @id_liga=id_liga
GO


Czy mógłby ktoś życzliwy dopisać przykładowe sprawdzenie np. czy w jakichś dwóch tabelach czy są te powiązania?
Zbłąkany
Napisz dokładnie co chciałbyś osiągnąć wtedy będę może w stanie jakoś pomóc z zapytaniem smile.gif
SongoQ
Najprosciej sprawdzic zwyklym selectem czy dane nie sa zwiazane ID
becki
ok, mam trzy tabele:
marki (id_marka, marka)
modele (id_model, id_marka, nazwa_model)
typy (id_typ, id_model, nazwa_typ)

i teraz chce usunąć jakiś rekord z tabeli marki procedurą przechowywaną:
Kod
CREATE procedure del_marka
( @id_marka int
)
as
delete
from marki
where @id_marka=id_marka
GO

(zmienna @id_marka jest przekazywana przez php do bazy).
--------------------------
mam jeszcze pytanie trochę z innej beczki;
w bazie mssql mam pewne pole
spotkanie (datetime); format daty to np.2005-11-05 18:00.
do bazy nastepnie przekazuje wpisaną date przez admina z poziomu php tylko przy pomocy formularza (pola select)(pięć zmiennych: rok, miesiąc, dzień, godzina, minuta);
jak te dane o dacie z formularza wpisać w ten rekord typu datetime?questionmark.gif
Zbłąkany
@datetime:
Ja bym zamiast przekazywać z php datę zrobiłbym coś takiego:
  1. INSERT
  2. INTO tabela (DATA) VALUES (GETDATE());
becki
tak, ale admin ustala daty np. za dwa tygodnie i musi jakos w pole typu datetime wpisac te dane (z poziomu php idą przy pomocy formularza);
przyklad:
dzisiaj ustalam spotkanie dla Kowalskiego i wpisuje je np. na za dwa tygodnie o 18.15
Zbłąkany
Poszukaj w BOL: DATEADD i DATEDIFF to ci na pewno pomoże smile.gif
SongoQ
Musisz uzyc maski i podac w jakiem formacie podajesz date. Nie wiem jak to jest w MSSQLu ale mozliwe ze TO_DATE(data, maska)
beel
Cytat(SongoQ @ 12.01.2006, 13:43:33 ) *
Musisz uzyc maski i podac w jakiem formacie podajesz date. Nie wiem jak to jest w MSSQLu ale mozliwe ze TO_DATE(data, maska)


Możesz zrobić w ten sposób, korzystając z funkcji CONVERT:
Aby np wczytywane były kolejno dzień, miesiac i rok:

  1. SET DATEFORMAT dmy
  2. SELECT 'tak ma wygladac data: dzien/miesiac/rok' = CONVERT(datetime, '31/3/1986')
emjot27
Witam.
Kontynuując temat, mam pytanie.
Mam bazę programu środków trwałych w MS SQLu 2000 i chciałbym usunąć pewne rekordy przy użyciu np PHP. Nie mogę tego zrobić przy użyciu Enterprise Managera, gdyż rekordy są połączone z danymi w innej tabelce. W jaki sposób mogę je pousuwać bez względu na konsekwencje. Jakie polecenie umożliwia kasowanie kaskadowe przy użyciu PHP.
Pozdrawiam i z góry dziękuję za pomoc.
mwojcik
Musisz miec stworzony diagram dla tych tabel, ktore sa powiazane kluczami. Wtedy na diagramie zaznaczasz interesujacy cie zwiazek i na nim prawy i Properities. W zakladce Relationships masz na dole pole Cascade Delete Related Records. Jak zapiszesz zmiany w diagamie to bedziesz mogl usuwac bez konsekwencji (oczywiscie z tej tabeli i kazdej z niej powiazanej kluczem obcym) - tak samo jak wywolasz polecenie z poziomu PHP to dane zostana usuniete.
emjot27
Super. Wielkie dzięki za info. Pomogło. Problem rozwiązany w 100%.
Jeszcze raz dzięki wielkie.

Ps. Swoja droga, jaką książkę polecielibyście mi na temat MS SQLa o takiej tematyce?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.