Krzysztof Bojakowski 12 Napisano 8 Kwietnia 2022 Udostępnij Napisano 8 Kwietnia 2022 w Aktualizacja stanu magazynowego - SQL Witam. Czy koś może wyciągał z bazy aktualny stan magazynowy na podstawie zmian w asortymencie i dokumentach?? Potrzebuję co 10 min sprawdzać czy zmienił się stan magazynowy asortymentu. Ale tylko towary, którym zmienił się stan magazynowy. 1. zrobiłem listę towarów i stany. Niestety w połączeniu tabeli Asortyment z tabelą encji mam tylko informację który towar został edytowany. 2. połączyłem tabele encje + asortymenty + dokumenty + pozycja dokumentu - tu jest już pół sukcesu bo mogę sprawdzać w odstępach czasowych towary, które zmieniły stan bo są już na jakimś dokumencie, który oczywiście można jeszcze odfiltrować. Problem zaczyna się, gdy np. Jakiś dokument zostanie usunięty. Wówczas nie mam informacji o zmianie ilości towaru. Czy jest na to jakieś rozwiązanie Czy może jest jeszcze gdzieś zapisywana informacja o zmianach.?? Będę wdzięczny za informację. Link to postu
Paweł Szczygieł 36 Napisano 8 Kwietnia 2022 Udostępnij Napisano 8 Kwietnia 2022 w Aktualizacja stanu magazynowego - SQL Nie lepiej triggerem na tabeli stany ? Link to postu
Radomił Ząbik 308 Napisano 8 Kwietnia 2022 Udostępnij Napisano 8 Kwietnia 2022 w Aktualizacja stanu magazynowego - SQL Polecam kolumnę MSSQL Timestamp, do wykrywania zmian. Będzie wydajnej. A temat niedawno poruszany, więcej szczegółów tutaj: Link to postu
Krzysztof Bojakowski 12 Napisano 12 Kwietnia 2022 Autor Udostępnij Napisano 12 Kwietnia 2022 w Aktualizacja stanu magazynowego - SQL Witam ponownie trochę walczyłem z triggerami - bo się uczyłem testowałem trigger przy aktualizacji ceny zakupu wszystko działa jak należy jeśli aktualizuję tabelę w tej samej bazie. Problem zaczyna się gdy chcę zaktualizować bazę MySQL na hostingu. Stworzyłem "LinkedServer" na podstawie ODBC. select * FROM OPENQUERY(Image, 'SELECT products_model, purchase_price, FROM products') MYSQL Polecenie działa prawidłowo. Połączyłem trigger z LinkedServer. with subiekt as ( SELECT cenabrutto.Symbol as products_model, cenabrutto.CenaZakupuBrutto as purchase_price FROM [Nexo_IMAGE].[dbo].[ImageArteCenaZakupu] cenabrutto ) UPDATE MYSQL SET MYSQL.purchase_price = subiekt.purchase_price FROM OPENQUERY(ImageArte, 'SELECT products_model, purchase_price FROM products') MYSQL inner join subiekt on subiekt.products_model=MySQL.products_model WHERE MySQL.products_model = subiekt.products_model Uruchamiając całość ręcznie - działa prawidłowo. Dane na hostingu MySQL zaktualizowały się. Niestety jeśli dodam to jako trigger to subiekt się wsypuje przy zmianie ceny ewidencyjnej. Czytałem różne artykuły - była informacja, że trzeba w usługach składowych (dcomcnfg) wejść usługi składowe -> komputery ->koordynator transakcji rozproszonych -> Lokalna usługa DTC -> prawym przyciskiem i w zabezpieczeniach zezwolić na dostęp. niezależnie od ustawień błąd jest ten sam. Nie wiem czy to ma znaczenie, ale próbując zrobić select * from [IMAGEARTE].[bojak_ImageArte]..[cache] otrzymuję informację contains no columns that can be selected or the current user does not have permissions on that object. na Hostingu mam dostęp do baz danych, ale nie mogę wykonać wielu poleceń, ani nawet dodać użytkownika.Z poziomu PHPMySQL mam dość spore graniczenia. Czy ograniczenia hostingowe mogą powodować te problemy ?? W obecnej sytuacji wszystkie zmiany towarowe będę musiał wysyłać do tabel pośrednich a następnie poleceniem sqlcmd w pliku bat będę uruchamiał polecenie SQL z harmonogramu w określonym odstępnie czasu do aktualizacji MySQL-a. A po każdej aktualizacji czyścić tabelę. Tak myślę, żeby uchronić się przez sytuacją w której jedno polecenie będzie usuwało dane z tabeli po aktualizacji hostingu a trigger w tym czasie zaktualizuje zmiany to będę musiał użycz dodatkowo znacznika czasu albo dodawać jakąś wartość do pozycji, które zostały zaktualizowane. Do aktualizacji tabeli pośredniej użyłem MERGE tak więc INSERT i UPDATE załatwione w jednym kodzie. Jeszcze pozostanie do dodania opcja warunkowa, jeśli stan przez update jest taki sam to nie rób nic oraz jeśli stan się różni a jest jakiś znacznik to zrób insert. wydaje mi się, że takie rozwiązanie zabezpieczy sytuację, w której w trakcie aktualizacji MySQL a następnie w trakcie usuwania zaktualizowanych pozycji wykona się trigger bo zmieni się stan. Będę wdzięczy za jakieś sugestie - ciągle się uczę Link to postu
Polecane posty