Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  Cum Sa Fac Un T...
 Cum Sa Fac Un Trigger SQL
 
 9/26/2009 12:09:31 AM
User is offlinelmax25
57 posts


Cum Sa Fac Un Trigger SQL
 (N/A)
Cum sa fac un trigger SQL pentru urmatoarea problema : Am o tabela "miscari" in care tin toate miscarile de marfuri. Cind adaug,sterg sau schimb ceva in tabela miscari vreau ca acel trigger sa calculeze automat stocul pentru inregistrarea modificata in alta tabela numita stoc (stoc_initial,cant_in,cant_out,stoc_final) Imi puteti da un exemplu ? Va multumesc!
 9/26/2009 10:08:04 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Cum Sa Fac Un Trigger SQL
 (N/A) Modified By Daniel Buduru  on 9/26/2009 10:08:36 AM)
 lmax25 wrote
Cum sa fac un trigger SQL pentru urmatoarea problema : Am o tabela "miscari" in care tin toate miscarile de marfuri. Cind adaug,sterg sau schimb ceva in tabela miscari vreau ca acel trigger sa calculeze automat stocul pentru inregistrarea modificata in alta tabela numita stoc (stoc_initial,cant_in,cant_out,stoc_final) Imi puteti da un exemplu ? Va multumesc!

Un exemplu de astfel de trigger

USE [myDatabase]
GO

/****** Object:  Trigger [dbo].[TrigAIUD_stocks]    Script Date: 09/26/2009 09:34:18 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[TrigAIUD_stocks]
   ON  [dbo].[stocks]
   AFTER INSERT,DELETE,UPDATE
AS
BEGIN
    DECLARE @status char(10) 
    SELECT @status='Succeeded'
    SET NOCOUNT ON;

    if update(idarticol) or update(gestiune) or update(qty_in) or update(qty_out)
        BEGIN
/* Se insereaza idarticol si gestiune in tabela de stoc curent, daca nu exista o astfel de inregistrare */

        insert into stock_crt (idarticol, gestiune, qty_stock)
            (select idarticol, gestiune, 0 from deleted
            union
            select idarticol, gestiune, 0 from inserted)
            except
            select idarticol, gestiune, 0 from stocks

/* Se storneaza miscarea de dinainte de modificare */

         update stock_crt set qty_stock = isnull(sc.qty_stock,0) - isnull(del.qty_in,0) + isnull(del.qty_out,0) , updated=getdate()
            from stock_crt sc, deleted del where sc.idarticol=del.idarticol and sc.gestiune=del.gestiune

/* Se actualizeaza stocul cu miscarea curenta */

        update stock_crt set qty_stock = isnull(sc.qty_stock,0) + isnull(ins.qty_in,0) - isnull(ins.qty_out,0)  , updated=getdate()
           from stock_crt sc, inserted ins where sc.idarticol=ins.idarticol and sc.gestiune=ins.gestiune
    END  
if @status='Failed'
    RAISERROR ('Eroare actualizare stoc curent', 10, 1, 'TrigAIUD_stocks')
END


GO

Daniel Buduru
 9/27/2009 8:52:25 PM
User is offlinelmax25
57 posts


Re: Cum Sa Fac Un Trigger SQL
 (N/A)
Nu prea merge... Imi da mereu eroare la updated=getdate(). Eroarea este : Msg 207, Level 16, State 1, Procedure TrigAIUD_stocks, Line 0 Invalid column name 'updated'. Ce este updated? Unde pot gasi informatii despre cum sa fac un trigger ca cel din exemplul dvs ? Va multumesc !
 9/27/2009 10:14:46 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Cum Sa Fac Un Trigger SQL
 (N/A)
Trigger-ul functioneaza, am luat codul dintr-o aplicatie de-a mea. Ti-am dat un exemplu, nu un cod gata facut pentru aplicatia ta. Pe ala il faci singur.
Daca vrei sa-l pui pe server, iti trebuie tabele cu acceasi structura. E mai simplu sa adaptezi codul la tabelele si campurile tale, decat tabelele la cod.
Updated este un camp din tabela stoc_crt, care tine data ultimei actualizari a stocului. De fapt, erau si alte campuri, pe care le-am scos din codul postat, nefiind esentiale pentru ce te interesa. Daca nu il ai, scoate-l din cod.
Informatii despre triggere gasesti in BOL (BooksOnLine). Daca nu le-ai instalat odata cu serverul, le descarci de la microsoft.


Daniel Buduru
 9/28/2009 10:49:25 AM
User is offlineaflorin
840 posts
1st


Re: Cum Sa Fac Un Trigger SQL
 (N/A)
Uite si un articol destul de bun pentru documentare:
http://www.sqlteam.com/article/an-introduction-to-triggers-part-i

Florin Aparaschivei - Iasi
 9/28/2009 11:57:25 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Cum Sa Fac Un Trigger SQL
 (N/A)
Ce trebuie sa stii referitor la trigger-e:
- In trigger sunt vizibile doua tabele, inserted si deleted, care contin liniile afectate de adaugare/modificare/stergere din tabela pe care este declarat trigger-ul. Inserted contine liniile in forma finala, dupa adaugare/modificare/stergere, deleted contine liniile asa cum erau inainte de adaugare, modificare stergere.
- Fiecarei linii din inserted ii corespunde o linie in deleted. Daca s-a facut adaugare, linia din deleted are toate campurile null. Daca s-a facut stergere, linia din inserted are toate campurile null.
- Inserted si deleted pot avea una sau mai multe linii. Din acest motiv, comenzile din trigger trebuie sa lucreze cu mai multe linii, si sa nu presupui niciodata ca este afectata o singura linie.
- Poti stabili ce anume s-a modificat comparand valorile campurilor din inserted cu cele din deleted.
- In trigger nu poti apela proceduri.
- Exista restrictii la functiile pe care le poti apela in trigger. In majoritatea cazurilor, le semnaleaza compilatorul.
- In Sql Server Management Studio (SSMS) 2008 exista un debugger cu care se pot depana si trigger-ele. Daca esti pe SQL 2005 express poti face upgrade la 2008. Sau poti instala o instanta de 2008 express si sa folosesti SSMS instalat odata cu instanta.
In rest, in trigger se scrie cod T-SQL normal.


Daniel Buduru
 10/1/2009 5:26:30 AM
User is offlinelmax25
57 posts


Re: Cum Sa Fac Un Trigger SQL
 (N/A)
Am facut trigger-ul pt stocuri. Nu sint absolut sigur ca este bun, dar sint in perioada de testare. Am gasit ceva exemple aici : http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug823.htm Va multumesc pt raspunsuri !
 10/1/2009 10:21:07 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Cum Sa Fac Un Trigger SQL
 (N/A)
Daca l-ai facut dupa exemplul din link, fii atent la urmatoarele aspecte:
- Codul presupune ca update se face la acelasi articol, se schimba doar cantitatea. Daca utilizatorul tau si-a dat seama ca a codificat gresit articolul sau gestiunea, actualizarea nu se face - vezi clauza  where unde are un inner join, se actualizeaza doar in cazul in care inserted.title_id=deleted.title_id.
- Codul este doar pentru update. Pentru Delete si Insert trebuie cod separat, pus in triggerele respective.

Daniel Buduru
  Visual FoxPro  Client/Server  Cum Sa Fac Un T...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement