zrobienie triggera w bazie MSSQL

0

Postanowiłam stworzyć zapytanie MSSQL w bazie dla nieuczciwych klientów, którzy zakupują oprogramowanie na termin płatności, ale nie mają zamiaru zapłacić. Wiem to nie powinienem sprzedawać na termin, ale takie są realia rynku i nie każdego trzeba traktować jako złodzieja.

W bazie MSSQL jest tabela Konfig i kolumna ParWartosc – jest tam zawarty zaszyfrowany klucz serializacyjny powiązany z użytkownikami i jeszcze innymi parametrami po usunięci tego klucza program staje baza wywala błąd i nic się nie da zrobić jedynie producent programu, ale oni najpierw kontaktują się z nami. Wymyśliłem coś takiego, żeby zrobić takiego triggera w którym określiłoby się termin usunięcia klucza z tabeli Konfig kolumny ParWartosc najlepiej do jakieś nowej tabeli stworzonej przez tego triggera np. Klucz . Termin usunięcia można by było określić z tabeli Paragon kolumna DataCzas – jest tam zawarta data i czas transakcji w takim dokładnie zapisie 2010-10-03 0900

A teraz napisze prosto i jasno – jeżeli data pomiędzy pierwsza a ostatnią transakcją w tabeli Paragon
jest większa niż 60 dni to utwórz tabelę Klucz i z tabeli Konfig z kolumny ParWartosc wytnij i kopiuj do tabeli Klucz do kolumny ParWartosc

Zawsze miałbym dostęp do klucza w tabeli Klucz i po uregulowaniu płatności wpisałbym go tabeli Konfig

Zawsze gdybym sprzedawał program robiłbym taki wpis w bazie jeśli klient zapłaci usuwałbym tego triggera

Proszę o jakieś rozwiązanie, może macie lepsze pomysły

0

Trigger zadziała tylko w przypadku wykonania konkretnej operacji na bazie. Upływający czas płatności to nie jest konkretna operacja, więc tutaj trigger nie zadziała.

Jeżeli chcesz jakąś operację wykonywać cyklicznie np. codziennie i jest uzależniona od czasu, a nie od konkretnej operacji na bazie to zamiast triggera powinieneś utworzyć tzw. "job": http://msdn.microsoft.com/en-us/library/ms187880.aspx

Jako ciekawostkę dodam, że w MySQL do cyklicznych operacji na bazie stojącej na serwerze unixowym używało się kiedyś crona: http://pl.wikipedia.org/wiki/Cron, a od wersji 5.1.6 można używać mechanizmu wbudowanego w silnik bazy tzw. "event scheduler": http://dev.mysql.com/doc/refman/5.1/en/events.html

0

Wiem że termin płatności nie zadziała, ale wiesz ja daję termin 30 dni w bazie ustawie sobie powiedzmy 60 dni na stop po 30 dzniach terminu ja dzwonie piszemy wezawania a tu nie ma reakcji, to czekamy i baza stanie po 60 dzniach czy 70 lub 100 ale stanie i wtedy wiesz my jestesmy na górze i my stawiamy warunki. Nawet wstytd pisać że trzeba się prosić o 200 zł np. z 01-01-2012 galerai alkoholi kpina, ale tak to wygląda więć sami chcemyt zadbać o swoje tyłki może w banalny sposób i nie fachowy ale skuteczny.

0

takie rzeczy się robi po stronie programu a nie bazy - baza nie ma mechanizmów ku temu

0

Oczywiście zgadzam się bazy danych tak nie zablokuję, ale jeszcze ktoś będzie musiał umieć coś z tej bazy wydobyć, a sama baza bez aplikacji dla laika jest tylko jednym plikiem. Usuwając ten klucz do innej tabeli blokuję mu odpalenie bazy z aplikacją jeśli nawet znajdzie się magik który mu przeniesie bazę na inny komputer i zainstaluje aplikację to i tak brak klucza w bazie, mało tego jeśli nawet ma klucz na dyskietce i chce zarejestrować bazę w aplikacji to musi być kontynuacja poprzednich wisów i aplikacja wywala błąd serializacji bazy. Oczywiście że jeśli przysiadłbyś ktoś nad tą bazą i tym zabezpieczeniem to ani słowa różne myki się robi i są do wyśledzenia czy złamania, ale to nie Macrosoft tylko zwykła baza u normalnych śmiertelników sklepy spożywcze odzieżowe i małe sieci sklepów. Jeśli chodzi o odblokowanie to można wysłać klientowi po zapłacie oczywiście batcha który robi ubdate na bazie w trigger zmiana z 60 dnia na 100000000 lub usuwa triggera oczywiście przenosi z bazy klucz (kopiuj) z tabeli ParWartosc do bazy konfig do tabeli ParWartosc wklej i program działa niezawodnie. Ja sobie tako to wymyśliłem może to jest nie najlepsze rozwiązanie i mało fachowe, ale na dana chwilę chciałbym tak to rozwiązać szybko i skutecznie, a potem pomyślimy nad lepszym pomysłem typu wyskakujące okno UPŁYNĄŁ TERMIN ZAPŁATY PROSZĘ O WPŁATE wprowadź kod ……… . Opisałem to tak jak to widzę może coś wymyśleć.

0

ale dlaczego nie chcesz tego zrobić w aplikacji? Jest to dużo prostsze.

0

Jaki kod mam Ci pokazać ?
Aplikacji ja nie pisałem więc jak mam to zrobić w programie ?

0

W MSSQL tworzysz joba odpalanego raz dziennie
wstawiasz tam zwykłego update.

update tabela_z_kluczami set klucz=null
where termin>60

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