Welcome to Sign in | Help
in Search

Inregistare timp functie de declansare eveniment.

Last post 09-09-2007, 4:17 AM by marian2007. 7 replies.
Sort Posts: Previous Next
  •  09-07-2007, 10:24 AM 2624

    Inregistare timp functie de declansare eveniment.

    In cadrul aplicatiei exista  tabla "logica" no.1 (tbl_1) in care sunt campurile:

    id (int) -keya primara,

    code (varchar(10) - identificator unic in cadrul aplicatiei stabilit in prealabil,

    name varchar(100) -numele unei componente stabilit in prealabil,

    Freq (int) -frecventa (nr. de ore) la care are loc un eveniment stabilit in prealabil,

    ET_Ovh (smalldatetime) - camp calculat care exprima timpul estimat pana la producerea evenimentului,

    HrsToNextOvh (int) -camp calculat rezultat al diferentei: [Freq]-[RunHrsFromLastOvh]

    DateOfLastOvh (smalldatetime) -camp introdus manual

    TotalHrsAtLastOvh (int) - camp introdus manual

    RunHrsFromLastOvh (int) - camp calculat rezultat al diferentei: [TotalRunHrs]-[TotalHrsAtLastOvh]

    TolleranceHrs (int) - camp calculat rezultat al produsului: 0.05*[Freq]

    TotalRunHrs (int) - camp introdus manual.

    si o alta tabla (tbl_2) "logica" sa o numim Work_Time compusa din:

    wo_id (int) - primary key

    code (varchar(10) - identificator unic in cadrul aplicatiei stabilit in prealabil
    start_time (smalldatetime) - camp introdus manual
    stop_time (smalldatetime) -camp introdus manual
    wo_interval - camp calculat rezultat al expresiei ((24)*COVERT([real],[wo_stop]-[wo_start],(108))) 

    Cele doua table au in comun (pt partea de logica a aplicatiei) campul . 
    Acestea fiind tabelele logice ale aplicatiei, pentru a rezolva prima tabla a trebuit sa folosesc o tabla primara cu care colectez datele manual si un view ca sa pot acoperi campurile calculate. Aici treaba merge!</p><p>
    Problema mea este insa ca doresc ca la declansarea evenimentului dicatat de campul [HrsToNextOvh], sa intre in operare tabla tbl_2 in care automat sa se transfere
    -(corespunzator evenimentului), corelat cu actiunea manuala de introducere a datei-timp in campul [start_time].</p><p>Dupa efectuarea evenimentului se va introduce (manual) data-timp pt campul [stop_date]. &nbsp;</p><p>Repetare aceluiasi eveniment (dictat evident de valoarile din campurile [Freq] si [TotalRunHrs]) reclama repetarea inregistrari pt tabla tbl_2.</p><p>Cerinta finala este ca in urma unei interogari (sau alt mecanism) sa se afiseze valorile de tip asociate cu activitatea in timp a evenimentelor (un fel de history).</p><p>Descrierea problemei este ceva mai ampla (solicita putina rabdare) dar prin ea am incercat sa descriu cat mai bine situatia de "business logic".</p><p>Multumesc pentru rabdare.&nbsp;</p><p>P.S. Folosesc MS SQL2k5&nbsp; (pt a nu exista dubii).</p><p>
    &nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>


    navigator
  •  09-07-2007, 10:36 AM 2625 in reply to 2624

    Re: Inregistare timp functie de declansare eveniment.

    Din ce inteleg pana acum e de folosit Trigger de tip insert pus pe tbl_1 care declanseaza inserarea datelor in tbl_2.(cautati in Books Online pt CREATE TRIGGER statement)

    Atentie ,(scrie si in Books Online despre asta) datele care sunt in curs de inserare se baga mai intai intr-o table numita "inserted" si cu care se pot face prelucrari;

    De asemenea acle starttime poate capata valoarea data de functia T-SQL GETDATE() care da data curenta

     


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  09-07-2007, 10:43 AM 2626 in reply to 2625

    Re: Inregistare timp functie de declansare eveniment.

    tabele logice, conceptuale si fizice
  •  09-07-2007, 11:14 AM 2627 in reply to 2625

    Re: Inregistare timp functie de declansare eveniment.

    Multumesc pentru operativitate.

    Aspectul de constructie a unui TRIGGER il pot acoperi (prin studiu evident).

    Nu imi este straina nici existenta functiei GETDATE(). Aici insa lucrurile se doresc a functiona la modul: dupa declansarea evenimentului click asupra unui buton postat pe interfata aplicatiei, data si ora sa fie inregistrate in acest camp. GETDATE() am vazut ca returneaza data curenta dar la ora este trecut startul zilei (12:00:00) desi eu as dori inregistrarea curenta si a orei curente (referinta fiind sistemul).

    Impasul meu este la nivel de conceptie (recunosc si din lipsa de pregatire). Daca s-ar putea sa-mi explicati macar partea de logica pe care trebuie sa o urmez pt. a construi TRIGGER-ul ce poate acoperi cerinta problemei.

    Multumesc pentru rabdare. 


    navigator
  •  09-07-2007, 11:22 AM 2628 in reply to 2627

    Re: Inregistare timp functie de declansare eveniment.

    Userul apasa pe buton si nu este o problema pt a retine data si ora apasarii insa eu as pune data si ora la care individul a terminat tranzactia cu succes.

    Cum se retine ?

    Se face o procedura stocata care este lansata de buton si printre altele scrie data curenta intr-o variabila care apoi este folosita si de trigger.

    Insa, uitandu-ma mai cu atentie cred ca tbl2 nu si-ar avea rost decat daca o inregistrare din tbl1 are mai multe in tbl2

     


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  09-07-2007, 11:35 AM 2629 in reply to 2628

    Re: Inregistare timp functie de declansare eveniment.

    Pentru a obtine corect campul [wo_interval] este clar pentru mine ca am nevoie de data si timp in ambele campuri: [start_time] si [stop_time] pt. ca la final doresc sa stiu cat tim a luat sa se efectueze sarcina respectiva. Aici am luat in calcul si faptul ca actiunea poate  incepe sa zicem astazi la ora x si sa se incheie in alta zi in viitor la o anumita ora.

    In excel am aceasta tabla construita  dar retine doar o singura inregistrare. Situatia practica este ca eu pot interveni asupra unei componente de mai mult ori ( in functie de campurile [Freq] si [TotalRunHrs]) asa ca a trebuit sa ma gandesc la existanta acestei table (tbl_2)  care devine componenta "many" in relatia cu tbl_1.


    navigator
  •  09-07-2007, 7:32 PM 2633 in reply to 2628

    Re: Inregistare timp functie de declansare eveniment.

    Am incercat (la sugestia corecta a dvs.) sa folosesc un trigger. Din pacate nu este un rezultat corect dar as dori sa ma ajutati acum cu intocmirea lui (daca este permis). Ce am facut eu:

        CREATE TRIGGER tr_WoTime_Insert

        ON tbl_1

        FOR INSERT

        AS

        IF EXISTS(SELECT code FROM inserted WHERE HrsToNextOvh=0)

        BEGIN

            DECLARE @code varchar(10)

            INSERT INTO Work_Time(code) values code=@code

         END

    GO

    Ce am obtinut(!): < Incorect syntax near 'code'.>

    Asadar departe de ceea ce doream:

    triggerul sa urmareasca ca daca in tbl_1 in campul [HrsToNextOvh] apare valoarea zero, atunci sa citeasca valoarea corespunzatoare din campul si sa o scrie in table Work_Time in campul -(tabla Work_Time este deja definita).</p><p>Apreciez foarte mult suportul oferit de dvs.
    &nbsp;</p>


    navigator
  •  09-09-2007, 4:17 AM 2639 in reply to 2633

    Re: Inregistare timp functie de declansare eveniment.

    CREATE TRIGGER tr_WoTime_Insert

        ON tbl_1 // tbl_1 este un view

        INSTEAD OF UPDATE

        AS

        DECLARE @code_PMS varchar(10)

        SET @code_PMS=(SELECT code_PMS FROM inserted WHERE HrsToNextOvh=0) 


             INSERT INTO Work_Time(code_PMS,wo_start) VALUES ( @code_PMS, GETDATE())

    GO

    Credeti ca m-am mai apropiat sau...tot bat campii?!. De aceasta data eroarea spune ca obiectul tbl_1 nu exista, ceea ce este ciudat pt. ca acesta exista in BD.

    Trigger-ul nu imi face nici o inregistrare.. 

    Va rog ajutati-ma.
     


    navigator
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems