powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Slujbi dla MsSQL na FoxPro.
4 сообщений из 4, страница 1 из 1
Slujbi dla MsSQL na FoxPro.
    #32307772
azz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vopros v tom vozmojno li eto? I esli vozmojno - to kak.
Utocnau problemu. Nujno optimezirovat tablitsu v skladskoj programme.
optimezatsija sostoit iz 2-h castej:
AnfangsbestandSetzen - v forme dla kajdogo novogo artikla, i
MeldebestandOptimieren - Doljna upravlatsa SQL - Serveragentom i vipolnatsa kajduju noc.
Ne podskajete kak eto sdelat ili gde najti literaturu na etu temu.
Zaranie spasibo.
...
Рейтинг: 0 / 0
Slujbi dla MsSQL na FoxPro.
    #32308347
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем проблема?
Пишешь на VFP mtdll для MTS. Регистрируешь ее на сервере.
Создаешь ХП на SQL Server и обращаешься как фоксовому объекту через sp_OACreate...ХП ставишь в job.
У меня например так реализована подкачка курсов валют из интернета...
...
Рейтинг: 0 / 0
Slujbi dla MsSQL na FoxPro.
    #32308606
azz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Esli vozmojno rasskajite popodrobnej ili ukacite mesto v seti gde mojno procest pro opisannij Vami protses. Ja poka esche ocen nacinauschij v etom dele.
...
Рейтинг: 0 / 0
Slujbi dla MsSQL na FoxPro.
    #32308693
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитать можно вот тут
http://vfpdev.narod.ru/docs/mtscom_r.html
Привожу VFP и затем TSQL код. За качество извиняюсь..., потому как на скорую руку на шлепал...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
*/////////////////////////////////////////////////////////////
* coclass downloading exchange rate from CBR 
*/////////////////////////////////////////////////////////////
#DEFINE LOGFILE		 "c:\Temp\Vfpcom.log" 
#DEFINE METHODLEN	 13 
#DEFINE MTXAPPSRV	 "MTxAS.AppServer.1 "

DEFINE CLASS ExchangeRate AS SESSION OLEPUBLIC
	PROTECTED oCtx
	IMPLEMENTS IObjectControl IN  "comsvcs.dll" 
*****************************************************************
	PROTECTED PROCEDURE IObjectControl_Activate() AS VOID;
			HELPSTRING  "Called when this object is Activated" 
*		THIS.GetObjectContext()
*		This.WriteToLog( "Activate()" )
	ENDPROC

	PROTECTED PROCEDURE IObjectControl_Deactivate() AS VOID;
			HELPSTRING  "Called when this object is Deactivated" 
*		This.WriteToLog( "Deactivate()" )
*		THIS.oCtx = NULL
	ENDPROC

	PROTECTED PROCEDURE IObjectControl_CanBePooled() AS Number;
			HELPSTRING  "Called when deactivated to see if this object can be pooled." 
*		This.WriteToLog( "CanBePooled()" )
		RETURN .F.
	ENDPROC

	
************************************************
	PROTECTED FUNCTION GetObjectContext()
		IF VARTYPE(THIS.oCtx) # 'O'
			LOCAL loMtx
			loMtx = CREATEOBJECT(MTXAPPSRV)
			IF VARTYPE(loMtx) = 'O'
				THIS.oCtx = loMtx.GetObjectContext()
			ENDIF
		ENDIF
		RETURN (VARTYPE(THIS.oCtx) = 'O')
	ENDFUNC
****************************************************
	PROTECTED FUNCTION SetComplete(tbResult)
		IF VARTYPE(THIS.oCtx) = 'O'
			IF tbResult
				THIS.oCtx.SetComplete()
			ELSE
				THIS.oCtx.SetAbort()
			ENDIF
			RETURN .T.
		ELSE
			RETURN .F.
		ENDIF
	ENDFUNC
***************************************************
	PROTECTED FUNCTION WriteToLog(tcMethod)
		IF VARTYPE(tcMethod) # 'C'
			tcMethod = '(Unknown)'
		ENDIF
		tcMethod = PADR(tcMethod, METHODLEN)
*
* -- See Q261096 in MSDN
 
		LOCAL lcObjectContextInfo
		IF VARTYPE(THIS.oCtx) = 'O'
			lcObjectContextInfo =  "Yes "  ;
				+ TRANSFORM(THIS.oCtx.ContextInfo.GetContextId())
		ELSE
			lcObjectContextInfo =  "No" 
		ENDIF
		STRTOFILE(TTOC(DATETIME()) ;
			+  " ThreadID: "  + TRANSFORM(THIS.GetThreadID(), '9999') ;
			+  " "  + tcMethod +  " fired! ObjectContext: "  ;
			+ lcObjectContextInfo ;
			+ CHR( 13 ) + CHR( 10 ) , LOGFILE, .T.)
	ENDFUNC


*********************
*** get currency from CBR
	FUNCTION GetRateValueFromRBC(CurrencyCode as String,cYMDDate as String) as String 
		
	    SET DATE TO YMD 
	    SET CENTURY ON 
		lcData =this.ReadUrl([http://cbrates.rbc.ru/tsv/]+;
			ALLTRIM(CurrencyCode)+ "/" +;
			IIF(TYPE( "cYMDDate" ) <> [C],DTOC(DATE()),ALLTRIM(cYMDDate))+ ".tsv" )
		
		LOCAL ARRAY laWords[ 1 ]
		lnaCount = ALINES(laWords,lcData,.T.,CHR( 9 ))

		IF lnaCount <>  2  OR VAL(laWords[ 2 ]) =  0 
			RETURN  "0 " 
		ELSE 
			RETURN TRANSFORM(VAL(laWords[ 2 ])/VAL(laWords[ 1 ])) 
		ENDIF 
	ENDPROC
*********************
*** get currency from CBR
	FUNCTION GetXMLDataFromCBR() as String 
		
	    SET DATE TO BRITISH
	    SET CENTURY ON 
		RETURN STRTRAN(this.ReadUrl(;
			[http://www.cbr.ru/scripts/XML_daily.asp?date_req=]+DTOC(DATE())), "," , "." ) 
	ENDPROC

****************************
	PROTECTED FUNCTION ReadUrl
		LPARAMETERS UrlName

		DECLARE INTEGER InternetOpen IN wininet.DLL STRING sAgent, ;
			INTEGER lAccessType, STRING sProxyName, ;
			STRING sProxyBypass, INTEGER lFlags

		DECLARE INTEGER InternetOpenUrl IN wininet.DLL ;
			INTEGER hInternetSession, STRING sUrl, STRING sHeaders, ;
			INTEGER lHeadersLength, INTEGER lFlags, INTEGER lContext

		DECLARE INTEGER InternetReadFile IN wininet.DLL INTEGER hfile, ;
			STRING @sBuffer, INTEGER lNumberofBytesToRead, INTEGER @lBytesRead

		DECLARE short InternetCloseHandle IN wininet.DLL INTEGER hInst

		#DEFINE INTERNET_OPEN_TYPE_PRECONFIG  0 
		#DEFINE INTERNET_OPEN_TYPE_DIRECT  1 
		#DEFINE INTERNET_OPEN_TYPE_PROXY  3 
		#DEFINE SYNCHRONOUS  0 
		#DEFINE INTERNET_FLAG_RELOAD  2147483648 

		sAgent =  "VFP 8 . 0 "

		hInternetSession = InternetOpen(sAgent, INTERNET_OPEN_TYPE_PRECONFIG, ;
			'', '', SYNCHRONOUS)

		IF hInternetSession =  0 
			RETURN ''
		ENDIF

		hUrlFile = InternetOpenUrl(hInternetSession, UrlName, '', ;
			 0 , INTERNET_FLAG_RELOAD,  0 )


		IF hUrlFile =  0 
			RETURN ''
		ENDIF

		LOCAL lcFile
		lcFile = ""
		DO WHILE .T.
* set aside a big buffer
			sReadBuffer = SPACE( 32767 )
			lBytesRead =  0 
			m.OK = InternetReadFile(hUrlFile, @sReadBuffer, ;
				LEN(sReadBuffer), @lBytesRead)

			
* error trap - either a read failure or read past eof()
			lcFile = lcFile + sReadBuffer
			IF m.OK =  0  OR lBytesRead =  0 
				EXIT
			ENDIF

		ENDDO

* close all the handles we opened
		=InternetCloseHandle(hUrlFile)
		=InternetCloseHandle(hInternetSession)
		RETURN ALLTRIM(lcFile)

	ENDFUNC
*******************
    PROTECTED FUNCTION SystemMessage
    	LPARAMETERS  lcTitle,lcMes
    	DECLARE INTEGER MessageBox IN WIN32API as mgb integer,string,string,integer
		mgb( 0 ,lcTitle,lcMes, 0 )

    ENDFUNC 	
ENDDEFINE


Использование на TSQL

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
ALTER        PROCEDURE dbo.GetCurrencyFromRBC
AS
DECLARE @object int
DECLARE @hr int
declare @nValue varchar( 100 ) 
declare @cDate varchar( 10 ) ,@cCurCode varchar( 10 ),
 @iCurID int

EXEC @hr = sp_OACreate 's_components.exchangerate', @object OUT

if @hr <>  0  
begin
	raiserror  99999  'no creation'
	return 
end	

declare curValut cursor local static
for select ID,Curr_Code from CurrencyMain where Curr_Code != ''

open curValut


while ( 1 =  1 )
begin
fetch next from curValut into @iCurID,@cCurCode

if @@fetch_status <>  0  
	break
set @cDate = convert(varchar( 10 ),getdate()+ 1 , 111 )
EXEC @hr = sp_OAMethod @object, 'GetRateValueFromRBC', @nValue OUT,@cCurCode,@cDate

if @hr <>  0  
begin
	raiserror  99999  'no execution'
	EXEC @hr = sp_OADestroy @object
	return 
end	

set @cDate = convert(varchar( 10 ),getdate()+ 1 , 112 )

if cast(@nValue as numeric( 10 , 4 )) =  0  
        continue 

if   not exists (select * from Currency where Curr_ID = @iCurID  
		and Start_date = @cDate)
  insert Currency( Curr_ID,Start_time,Curr_value) 
  select @iCurID,@cDate,cast(@nValue as numeric( 10 , 4 ))

else 
  Update  Currency 
  set Curr_value = cast(@nValue as numeric( 10 , 4 ))
  where  Curr_ID=@iCurID and Start_date= @cDate

end

EXEC @hr = sp_OADestroy @object
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Slujbi dla MsSQL na FoxPro.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]