🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: MSSQL Trigger z parametrem

#82998
From: Pancio
Date: Tue, 25 Aug 2020 11:13
31 lines
3974 bytes
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.

--
Pancio
Technical Details
Message-ID: <45fec06b-f91d-4b9d-88f5-8aa5edde8579n@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <4f16cba6-1123-4d58-9112-5fd103fb749en@googlegroups.com> <5f44ad20$0$520$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:a6cf:: with SMTP id p198mr8962316qke.446.1598354024024;        Tue, 25 Aug 2020 04:13:44 -0700 (PDT)
X-Received: by 2002:a25:103:: with SMTP id 3mr12932331ybb.30.1598354023725; Tue, 25 Aug 2020 04:13:43 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi.bazy-danych
Date: Tue, 25 Aug 2020 04:13:43 -0700 (PDT)
In-Reply-To: <5f44ad20$0$520$65785112@news.neostrada.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=77.65.112.90; posting-account=7yo-vwoAAACTPHSJeUQ3HOShk2-PA34z
NNTP-Posting-Host: 77.65.112.90
References: <4f16cba6-1123-4d58-9112-5fd103fb749en@googlegroups.com> <5f44ad20$0$520$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <45fec06b-f91d-4b9d-88f5-8aa5edde8579n@googlegroups.com>
Subject: Re: MSSQL Trigger z parametrem
From: Pancio <witek.skowronski@gmail.com>
Injection-Date: Tue, 25 Aug 2020 11:13:44 +0000
Lines: 61
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit