🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #82999

Re: MSSQL Trigger z parametrem

#82999
From: Miroo
Date: Tue, 25 Aug 2020 11:43
40 lines
4477 bytes
W dniu 2020.08.25 o 13:13, Pancio pisze:
> wtorek, 25 sierpnia 2020 o 08:18:10 UTC+2 jast napisał(a):
>> W dniu 2020-08-24 o 10:52, Pancio pisze:
>>> Witam wszystkich,
>>> Mam nadzieję, że grupa jeszcze nie umarła, choć od dłuższego czasu niewiele się tutaj dzieje. No ale do rzeczy.
>>> Mam sobie bazę w MS SQL Server 2014 (wersja Express). Do bazy użytkownicy łączą się z aplikacji w Delphi XE7 z poziomu FireDAC jako jeden użytkownik "sa" (tak, wiem, że nie tak powinno to wyglądać, ale jednak jest jak jest).
>>> Oczywiście jest tabela z danymi zalogowanych użytkowników i nadanych im numerów ID.
>>> No i o ile cała aplikacja bazodanowa działa nawet dość sprawnie i generalnie spełnia swoje zadania, to nadszedł czas rozbudowy aplikacji o dziennik zdarzeń. Chodzi po prostu o to, żeby w osobnej tabeli np. "Dziennik" zapisywane były zmiany typu kto, co i w jakiej tabeli zmienił.
>>> Sprawę w tym momencie załatwiłby wyzwalacz, ale nie mam pomysłu w jaki sposób do triggera przekazać jeden parametr będący numerem ID użytkownika, który danej zmiany dokonał.
>>> Czy w ogóle można to jakoś wykonać? Alternatywą jest obsługa takiego dziennika nie z poziomu bazy danych, a z samej aplikacji. Tyle, że roboty z tym trochę więcej.
>>> Bardzo proszę o pomoc osoby, które już zetknęły się z podobnym problemem.
>>>
>>> Dzięki,
>>> Pancio
>> Rzuć okiem na to
>> https://www.red-gate.com/simple-talk/sql/database-administration/pop-rivetts-sql-server-faq-no.5-pop-on-the-audit-trail/
>>
>>
>> Drobny problem może być zapisanie ID użytkownika. Najprościej zrobić to
>> przez tabelę logowań, w której będziesz zapisywał logowania użytkowników
>> do aplikacji, zapisując w niej identyfikator sesji procesu (SPID pobrany
>> przez select @@SPID). W triggerze pobierzesz ten SPID i z tabeli logowań
>> odczytasz dane użytkownika. Oczywiście po wylogowaniu użytkownika z
>> aplikacji stosowny rekord z tabeli logowań należy usunąć :-)
>
> Hmm, przyznam szczerze, że to nawet bardzo ciekawe rozwiązanie. Dość proste w realizacji, a dająca dość duże możliwości. Jest tylko jedno "ale", podpowiedz proszę, bo być może zetknąłeś się z tym.
> Co w sytuacji, gdy użytkownik uruchomi dwa rady aplikację. Wtedy otrzyma dwie różne @@SPID.
> A co jeśli ktoś uruchomi dwu-, lub trzykrotnie aplikację, albo wyjdzie z niej zabijając jej proces, a nie przez opcję "Wyjdź z programu"? Wtedy dla danego użytkownika będzie wygenerowane więcej niż jeden identyfikator @@SPID.
> Jeśli to jakoś sensownie dałoby się załatwić, to rozwiązanie jest w zasadzie wszystkim czego mi potrzeba.

Dwa różne SPID dla jednego użytkownika w niczym nie będą przeszkadzać. 
Po prostu będą przy nich te same dane. Raczej nie ma znaczenia, z której 
instancji programu użytkownik coś zrobił, tylko że on to zrobił.

Przy wpisywaniu SPID do tabeli trzeba usunąć/zaktualizować wpis z tym 
samym SPID. Usuwanie przy wylogowywaniu nie jest wtedy konieczne, chyba 
że chcemy to wykorzystać do monitorowania aktualnie zalogowanych 
użytkowników.

Pozdrawiam
Technical Details
Message-ID: <5f44f96d$0$547$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.net!aioe.org!peer03.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!border2.nntp.ams1.giganews.com!nntp.giganews.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <4f16cba6-1123-4d58-9112-5fd103fb749en@googlegroups.com> <5f44ad20$0$520$65785112@news.neostrada.pl> <45fec06b-f91d-4b9d-88f5-8aa5edde8579n@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.net!aioe.org!peer03.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!border2.nntp.ams1.giganews.com!nntp.giganews.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Subject: Re: MSSQL Trigger z parametrem
Newsgroups: pl.comp.lang.delphi.bazy-danych
References: <4f16cba6-1123-4d58-9112-5fd103fb749en@googlegroups.com> <5f44ad20$0$520$65785112@news.neostrada.pl> <45fec06b-f91d-4b9d-88f5-8aa5edde8579n@googlegroups.com>
From: Miroo <brak_emaila@brak.brak.i.juz>
Date: Tue, 25 Aug 2020 13:43:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0
MIME-Version: 1.0
In-Reply-To: <45fec06b-f91d-4b9d-88f5-8aa5edde8579n@googlegroups.com>
Lines: 41
Message-ID: <5f44f96d$0$547$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 91.197.153.32
X-Trace: 1598355822 unt-rea-a-02.news.neostrada.pl 547 91.197.153.32:10244
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 4359
X-Received-Body-CRC: 3451578439
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit