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  SQL Trigger...
 SQL Trigger
 
 1/31/2009 4:33:14 PM
User is offlinejohny25
69 posts


SQL Trigger
 (N/A)

Salut.

Am facut un trigger pe SSX.

USE DB1;
GO
CREATE TRIGGER login1 ON UserLogin
AFTER UPDATE
AS
print 'S-a logat un nou user'
GO
 

Cum pot sa trimit acest mesaj catre toate statiile din retea ? Poate VFP sa afle cumva de executia acestui trigger ?

 1/31/2009 5:03:17 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: SQL Trigger
 (N/A)
Vezi aici :
http://www.knowdotnet.com/articles/sysprocesses.html

Daniel Buduru
 1/31/2009 9:12:19 PM
User is offlinejohny25
69 posts


Re: SQL Trigger
 (N/A)

Probabil m-am eprimat eu gresit... Nu vreau sa trimit un la propriu un mesaj.Imi trebuie acest lucru pentru a updata tabelele mele locale in momentul in care se declanseaza triggerul. Nu este neaparat pentru login.

As vrea ca in momentul in care se executa trigger-ul, SSX sa anunte cumva aplicatia din VFP de eveniment.Sa faca ceva care se poate verifica din VFP cu un timer sau chiar in timp real daca se poate...

 2/1/2009 10:17:45 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: SQL Trigger
 (Romania) Modified By Daniel Buduru  on 2/1/2009 11:22:27 AM)
Am inteles foarte bine ce doresti, iar link-ul pe care ti l-am dat este o solutie pentru, sa zicem, doua treimi din problema.
Incerc sa explic foarte pe scurt cum functioneaza asa ceva:
Sa zicem ca doresti sa cumperi ceva, sa zicem un LCD, si te intereseaza numai un anumit model. Mergi la un magazin specializat, intrebi de el, si afli ca abia s-a vandut ultimul. Dar ca vor mai aproviziona. Acum sunt doua situatii: vanzatorul iti zice "mai treceti, ar trebui sa primim saptamana viitoare, dar se dau repede, asa ca ...", iar tu treci in fiecare zi pe acolo .Metoda asta se numeste "polling", clientul interogheaza periodic serverul. Sau vanzatorul zice: "lasati un numar de telefon si va anunt eu cand primim". Aceasta este metoda cu evenimente, atunci cand se produce evenimentul, serverul difuzeaza un mesaj catre client (clienti).

Prima metoda - polling- este simplu de implementat dar este mare consumatoare de resurse, atat pentru client, cat si pentru server - clientul se tot intereseaza, iar serverul tot face inventarul. daca cererile sunt frecvente si smai sunt si multi clienti, serverul ajunge sa consume mai mult timp cu verificarile de stoc decat cu livrarea ...

Metoda cu evenimente este mult mai econoama cu resursele, dar implica trei lucruri: o intelegere cu serverul - ce anume eveniment si catre cine trebuie comunicat - o cale de transmitere a mesajelor si un ascultator la client, care sa astepte acest comunicat (mesaj) din partea serverului.

Dupa cum ai pus problema, te-ai gandit deja la varianta a doua, cea cu evenimente (trigger-ul). Mai ramane de trimis acest mesaj (iar in link-ul pe care ti l-am dat era o astfel de metoda) si de receptionat mesajul. Metoda din articol foloseste sistemul de mesagerie din reteaua windows,  deci primele doua cerinte sunt realizate. Mai ramane sa receptionezi mesajul, iar pentru asta in windows exista un suport implicit (dar care trebuie configurat, nu este activ by default ...), si sa urmaresti in aplicatia ta evenimentul windows generat de primirea unui mesaj din retea.
Pare complicat, dar e cam singura solutie de acest gen realizabila cu ceea ce exista deja in sistem ...
Exista si solutii dedicate dar, din pacate, sunt comerciale - deci pe bani. Vezi aici una din ele:
http://www.universalthread.com/Report.aspx?Session=4A493171472F30486B4E733D2033684F77696D6A4730364D766A71363533715464634963465776397A4E6D4A56

In ceea ce priveste metoda polling, se poate face cate ceva pentru a reduce incarcarea serverului.
Spre exemplu, se poate lucra cu o tabela de actualizari, care sa contina numele tabelei, tipul ultimei actualizari - insert, update, delete - si data/ora acestei actualizari. Apoi, pe fiecare tabela a carei actualizare este urmarita se pune un after trigger care sa scrie in tabela de actualizari.
In aplicatie, interoghezi periodic tabela de actualizari si o compari cu o copie pe care o tii local.  In cazul in care s-a actualizat una din tabelele care te intereseaza, declansezi procedura necesara la client. Doar sa nu faci interogarea mai des decat este cazul ...
Din capul locului tin sa precizez ca astfel de metode sunt inutile pentru determinarea dinamica a stocului. Daca stocul variaza foarte rapid (numar mare de statii care opereaza sau operare simultana chiar de la putine statii), stocul actualizat pe local poate sa fie perimat chiar in momentul in care este afisat.

Ar trebui sa mentionez aici si Service Brocker din mssql server, cu care se mai poate implementa detectarea evenimentelor si transmiterea de mesaje. O cautare pe Google va da ceva rezultate.



Daniel Buduru
 2/1/2009 2:18:11 PM
User is offlinejohny25
69 posts


Re: SQL Trigger
 (N/A)

Intr-adevar exemplul tau de la http://www.atvsoftware.com/products.php?id=xp_messenger_mssql este interesant.Si era foarte bine daca era free.

Multumesc pentru raspunsuri !

 2/4/2009 9:24:34 AM
User is offlinejohny25
69 posts


Re: SQL Trigger
 (N/A)

Am aflat ca se pot trimite mesaje din SQL Server folosind MSMQ.

Incerc sa folosesc MSMQ pentru a trimite mesaje.Am gasit aici : http://www.codeproject.com/KB/database/SqlMSMQ.aspx un exemplu interesant. Am facut cred ca tot ce scria acolo (de fapt am executat scriptul,am schimbat numele bazei de date si calea catre SqlMSMQ.dll).Scriptul se executa corect,dar cind incerc sa execut functia uspMSMQSend (comanda este tot din script):

EXEC uspMSMQSend 'lap101\private$\iris_anls_order', '<MESSAGE>Mr. Watson, come here, I need you</MESSAGE>'
GO

primesc urmatoarul mesaj de eroare :

Msg 6522, Level 16, State 1, Procedure uspMSMQSend, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "uspMSMQSend":
System.Messaging.MessageQueueException: Invalid queue path name.
System.Messaging.MessageQueueException:
at System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath(String queuePath, Boolean throwException)
at System.Messaging.MessageQueue.get_FormatName()
at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
at System.Messaging.MessageQueue.Send(Object obj)
at WJeziorczak.Sql.SqlMSMQ.Send(SqlString queue, SqlString msg)

Ma poate ajuta cineva sa execut functia uspMSMQSend ?

 

 2/4/2009 10:57:13 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: SQL Trigger
 (Romania)
Mesajul de eroare spune ca nu este corecta calea catre coada de mesaje. Aceasta trebuie creata, inainte de a o apela. Vezi in help MessageQueue.Create
Vezi aici o discutie despre asta. Exista si un un exemplu de functie pentru crearea cozii:
http://www.eggheadcafe.com/forumarchives/msmqprogramming/Nov2005/post24238028.asp

Daniel Buduru
 2/13/2009 10:06:22 PM
User is offlinejohny25
69 posts


Re: SQL Trigger
 (N/A)

Am gasit pe net ca se poate trimite un mesaj catre clienti folosind sp_addmessage.

sp_addmessage @msgnum=70000,@severity=10,@msgtext='mesaj client ',@replace ='replace'

Acum triggerul meu arata asa :

USE DB1;
GO
CREATE TRIGGER modifica_stoc ON MyStocDB
AFTER INSERT
AS
DECLARE @msgtext nvarchar(1024)
raiserror(70000,@msgtext,10,1) with log
GO
 

Cind execut comanda SQL folosind interfata SQL Server Management Studio :

insert MyStocDB(column_stoc) Values ('55')          primesc intr-adevar mesajul "mesaj client" si "(1 row(s) affected)".

Precizez ca pentru conectare la SSX folosesc ODBC.

Cum pot intercepta acest mesaj din aplicatia mea VFP ?

Multumesc !

 2/14/2009 8:21:11 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: SQL Trigger
 (N/A)
 johny25 wrote

Am gasit pe net ca se poate trimite un mesaj catre clienti folosind sp_addmessage.

sp_addmessage @msgnum=70000,@severity=10,@msgtext='mesaj client ',@replace ='replace'

Acum triggerul meu arata asa :

USE DB1;
GO
CREATE TRIGGER modifica_stoc ON MyStocDB
AFTER INSERT
AS
DECLARE @msgtext nvarchar(1024)
raiserror(70000,@msgtext,10,1) with log
GO
 

Cind execut comanda SQL folosind interfata SQL Server Management Studio :

insert MyStocDB(column_stoc) Values ('55')          primesc intr-adevar mesajul "mesaj client" si "(1 row(s) affected)".

Precizez ca pentru conectare la SSX folosesc ODBC.

Cum pot intercepta acest mesaj din aplicatia mea VFP ?

Multumesc !



Exista o deosebire intre mesaj si difuzare ...
Ceea ce ai facut aici este declararea unei erori utilizator .Nu era nevoie de sp_addmesage, mesajul se poate pune direct in comanda RAISEERROR - vezi in help.
Eroarea este returnata utilizatorului care a dat comanda ce a generat eroarea, si numai lui. Functia AERROR executata dupa SQLEXEC pune intr-un vector toate erorile returnate, fie ca provin de la server, fie de la driverul prin care se face conexiunea.
Aceasta metoda nu poate fi utilizata pentru difuzarea unui mesaj catre utilizatori.

Daniel Buduru
 2/15/2009 1:21:40 AM
User is offlinejohny25
69 posts


Re: SQL Trigger
 (N/A)

Domnule Daniel Buduru va multumesc foarte mult pentru raspunsuri !!

Chiar este atit de complicata aceasta problema incit sa nu existe nici un raspuns pentru ea?Dupa cum am spus vreau sa folosesc SQL Express si vreau sa ma limitez la doar la el.Nici nu sint convins ca pot folosi MSMQ si nici nu am reusit sa creez acea coada.

Daca voi pune baza de date intr-o retea cu router-e sau pe internet  nu pot folosi aplicatia SQL Messenger deoarece citez "You must not have routers between the server and the client!".

Deoarece doresc sa primesc acele mesaje in timp real nu vreau sa folosesc nici timer ...

Cu RAISEERROR m-am inselat ...

Sincer nu mai am nici o idee.Dumneavoastra ?

 2/15/2009 9:37:26 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: SQL Trigger
 (N/A)
 johny25 wrote
Chiar este atit de complicata aceasta problema incit sa nu existe nici un raspuns pentru ea?

De unde ai tras concluzia asta? Ai primit un link la o solutie dedicata pentru aceasta problema, utilizabila pe o gama mai mare de servere.

Daca te referi la o solutie free, e altceva. Dupa cum vezi, cei care au rezolvat problema nu sunt dispusi s-o puna la dispozitie gratuit ...

Primul link pe care ti l-am dat, articolul cu utilizarea net send pentru transmiterea de mesaje, este, asa cum am spus, varianta cea mai putin costisitoare pentru a rezolva aceasta problema.


Daniel Buduru
 2/15/2009 12:23:50 PM
User is offlinejohny25
69 posts


Re: SQL Trigger
 (N/A)

Daca voi gasi o solutie pt aceasta problema (fie ea free sau comerciala), va voi anunta.

Inca o data : Va multumesc !

 2/15/2009 12:53:36 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: SQL Trigger
 (N/A) Modified By Daniel Buduru  on 2/15/2009 3:16:11 PM)
 johny25 wrote

Daca voi gasi o solutie pt aceasta problema (fie ea free sau comerciala), va voi anunta.



Mie nu-mi este clar. Aplicatia de aici (http://www.atvsoftware.com/products.php?id=xp_messenger_mssql ) nu este o solutie comerciala a acestei probleme?

Scuze, nu m-am uitat pe link-ul SQL Messenger

Nu stiu nici o aplicatie care sa trimita mesaje de la un server sql express prin internet catre un client vfp care sa le receptioneze.

Daniel Buduru
  Visual FoxPro  Client/Server  SQL Trigger...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement