Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вызвать хранимую процедуру на сервере не создавая вьюшки? / 9 сообщений из 9, страница 1 из 1
26.01.2006, 08:49
    #33503930
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
Привет.

На сервере БД есть хранимая процедура foxtest() мне нужно вызвать ее из фокса. Мне это получилось сделать следующим не очень красивым способом:
Код: plaintext
1.
2.
3.
4.
5.
6.
OPEN DATABASE data1 
	CREATE SQL VIEW foxtest_view;
	CONNECTION Connect1;
	AS SELECT foxtest()
	DROP VIEW foxtest_view;
CLOSE DATABASES

Можно ли обойтись без создания вьюшки foxtest_view или это обязательно?

Спасибо.
...
Рейтинг: 0 / 0
26.01.2006, 09:09
    #33503980
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
можно использовать SQLCONNECT()/SQLSTRINGCONNECT() и SQLEXEC()
...
Рейтинг: 0 / 0
26.01.2006, 09:25
    #33504010
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
Код: 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.
ConnectString = ;
	"driver={SQL Server};" ;
	+ "server=MyServer;" ;
	+ "uid=MyUserName;" ;
	+ "pwd=MyPassword;"

SQLSETPROP( 0 , "DispLogin",  3 ) && Не будем отображать диалог подключения

hConn = SQLSTRINGCONNECT(ConnectString, .T.)
IF hConn <  0 
	DIMENSION aErrors( 1 )
	nNumErrors = AERROR(aErrors)
	ErrorString = "Не могу соединиться"
	FOR i =  1  TO nNumErrors
		ErrorString = ErrorString + CHR( 13 ) ;
			+ STR(NVL(aErrors[i, 1 ],  0 )) + ": " ;
			+ STR(NVL(aErrors[i, 5 ],  0 )) + " - " ;
			+ aErrors[i, 2 ]
	ENDFOR
	MESSAGEBOX(ErrorString)
	RETURN
ENDIF

WAIT WINDOW "Соединились!" TIMEOUT  1 

MyParam = "My String Value"

SQLString = "exec MyProc(?MyParam)"

IF ExecString(SQLString) >  0 
	WAIT WINDOW "ОК" TIMEOUT  1 
ELSE
	DIMENSION aErrors( 1 )
	nNumErrors = AERROR(aErrors)
	ErrorString = "Не получается исполнить ХП"
	FOR i =  1  TO nNumErrors
		ErrorString = ErrorString + CHR( 13 ) ;
			+ STR(NVL(aErrors[i, 1 ],  0 )) + ": " ;
			+ STR(NVL(aErrors[i, 5 ],  0 )) + " - " ;
			+ aErrors[i, 2 ]
	ENDFOR
	MESSAGEBOX(ErrorString)
ENDIF

TRY
	SQLDISCONNECT(hConn)
CATCH
ENDTRY

RETURN

*-----------------------------------------

FUNCTION ExecString
LPARAMETERS SQLString, CursorName
PRIVATE res, e
IF TYPE("CursorName") = "C"
	res = SQLEXEC(hConn, SQLString, CursorName)
ELSE
	res = SQLEXEC(hConn, SQLString)
ENDIF
IF res !=  1 
	MESSAGEBOX(MESSAGE(),  16 )
ENDIF
RETURN res
...
Рейтинг: 0 / 0
26.01.2006, 09:41
    #33504044
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
Ого, круто! Спасибо. Пробую разобраться.

А если рассмотреть вариант с вьюшкой, то как можно получить из него возвращенное значение?
...
Рейтинг: 0 / 0
26.01.2006, 09:52
    #33504065
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
DDTОго, круто! Спасибо. Пробую разобраться.

А если рассмотреть вариант с вьюшкой, то как можно получить из него возвращенное значение?
При работе с сервером баз данных из VFP есть два принципиально разных способа - Remote Views (удаленные представления) и сквозной запрос (pass-through). Обычно (но не обязательно) разработчик клиента на VFP использует какой-то один способ. Подробнее об этом можно почитать в HELP по VFP или тут: http://www.caws.atnet.ru/vfox/sql.html
С уважением, Алексей.
...
Рейтинг: 0 / 0
26.01.2006, 09:58
    #33504075
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
DDTА если рассмотреть вариант с вьюшкой, то как можно получить из него возвращенное значение?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE SQL VIEW foxtest_view;
	CONNECTION Connect1;
	AS SELECT foxtest() myfield
use foxtest_view in  0 
go top in foxtest_view
myvalue = foxtest_view.myfield
use in foxtest_view
drop view foxtest_view
...
Рейтинг: 0 / 0
26.01.2006, 10:07
    #33504111
DDT
DDT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
Спасибо --Eugene-- и Aleksey-K за советы. Буду читать и пробовать.
...
Рейтинг: 0 / 0
26.01.2006, 10:10
    #33504122
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
Aleksey-KПодробнее об этом можно почитать в HELP по VFP или тут: http://www.caws.atnet.ru/vfox/sql.html :

SQLEXEC()
Функция возвращает 0 - если команды выполнилась без ошибки, или код ошибки - если она имела место быть.
Это не так:

SQLEXEC( ) returns the number of result sets if there is more than one. SQLEXEC( ) returns 0 if it is still executing and returns 1 when it has finished executing. SQLEXEC( ) returns –1 if a connection level error occurs.
...
Рейтинг: 0 / 0
26.01.2006, 10:12
    #33504127
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать хранимую процедуру на сервере не создавая вьюшки?
ой, покорнейше прошу прощения...

надо было мне внимательнее читать
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вызвать хранимую процедуру на сервере не создавая вьюшки? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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