Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Хранимые процедуры SQL / 21 сообщений из 21, страница 1 из 1
04.12.2003, 10:53
    #32343011
zone51
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Вызываю процедуру SQL сервера из фокса командой SQLEXEC(), передавая при этом параметры. Процедура выполняется нормально, но выходные параметры в фокс не возвращаются (а должны). Процедура не моя, мож в ней чего подправить нужно? (в Interbase, например, нужно было suspend ставить)
...
Рейтинг: 0 / 0
04.12.2003, 11:10
    #32343047
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
код в студию! ;))
...
Рейтинг: 0 / 0
04.12.2003, 13:16
    #32343339
oleg_km
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Код процедуры имеется ввиду
...
Рейтинг: 0 / 0
04.12.2003, 13:18
    #32343344
zone51
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Это часть SQL-процедуры (начало и конец):

create procedure GET_ART_STRUCTURE (
@ProjectAID INTEGER,
@Expand INTEGER,
@UserID INTEGER,
@Differents INTEGER,
@HidingON INTEGER,
@ManualLinks INTEGER,

@SelectID INTEGER OUTPUT,
@ResultID INTEGER OUTPUT,
@RecordCount INTEGER OUTPUT)
as

DECLARE @resVariants CHAR
DECLARE @IsHidden INTEGER

DECLARE @c1rec_PART_AID INTEGER
DECLARE @c1rec_VARIANTS CHAR
DECLARE @h1rec_PART_AID INTEGER
DECLARE @return_status INTEGER
..................................................
SelectID, ResultID - этим переменным задаются значения и их необходимо вернуть в Visual Fox.
..................................................
SET @RecordCount = (SELECT COUNT(*) FROM ARTSTRU WHERE SELECT_ID = @ResultID)

GO

.............................
Вызов из VF осуществляется командой
SqlExec(descriptor, 'EXEC GET_ART_STRUCTURE 3367,1,0,0,1,1,
@SelectID output, @ResultID output,@RecordCount output')
По идее, должен вернуться курсор с тремя переменными
...
Рейтинг: 0 / 0
04.12.2003, 13:20
    #32343349
andrew_Pr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Этот вопрос уже обсуждался не однократно. Посмотри здесь например.\r
/topic/56793
...
Рейтинг: 0 / 0
04.12.2003, 13:25
    #32343356
andrew_Pr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
А надо бы так

Код: plaintext
1.
2.
3.
4.
@SelectID = 0 
@ResultID = 0 
@RecordCount  =  0 
SqlExec(descriptor, 'EXEC GET_ART_STRUCTURE 3367,1,0,0,1,1, 
?@SelectID output, ?@ResultID output,?@RecordCount output') 
...
Рейтинг: 0 / 0
04.12.2003, 13:31
    #32343366
andrew_Pr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Ой, очепятка!
Код: plaintext
1.
2.
3.
4.
SelectID = 0 
ResultID = 0 
RecordCount  =  0 
SqlExec(descriptor, 'EXEC GET_ART_STRUCTURE 3367,1,0,0,1,1, 
?@SelectID output, ?@ResultID output,?@RecordCount output') 


Ну, вобщем, смысл в том, что перед вызовом SQLexec(), нужно проинициализировать в fox-е переменные, в которые ты собсвенно собираешься получить результат.
...
Рейтинг: 0 / 0
04.12.2003, 14:40
    #32343533
Voevoda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
andrew_Pr , а ты пробовал?
Это не помогает.
Ведь sqlexec() передает на server только символьную строку, а получает временную таблицу(курсор) с полями, какие должны быть переменные возвращены (по крайней мере так работает с InterBase). А то что SQL-server должен возвратить значения прямо в переменные VFP - это, по моему, фигня.
...
Рейтинг: 0 / 0
04.12.2003, 14:51
    #32343570
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Код: plaintext
1.
SqlExec(descriptor, 'EXEC GET_ART_STRUCTURE 3367,1,0,0,1,1, 
?SelectID, ?ResultID,?RecordCount') 
...
Рейтинг: 0 / 0
04.12.2003, 14:53
    #32343576
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
ЗЫ до этого ессно три переменные сначала определить как у andrew_Pr
...
Рейтинг: 0 / 0
04.12.2003, 14:59
    #32343596
Voevoda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Hel!Riser, sqlexec работает, процедура на сервере выполняется - все хорошо,
НО параметры в VFP НЕ возвращает.
...
Рейтинг: 0 / 0
04.12.2003, 15:03
    #32343611
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
2 Hel!Riser

Не именно так как написал andrew_Pr

?@SelectID, ?@ResultID,?@RecordCount

Т.е. кроме вопросительного знака еще и символ "@"

2 Voevoda

Небольшое уточнение:

Фоксовая переменная должна иметь имя, содержащее более 1 символа. Если будет только один символ, то этот код не пройдет.

local cID, a
cID=''
a=''

* Этот код не сработает
=SQLEXEC(nHandler, "EXEC MyProc ?@a")

* А вот это пройдет
=SQLEXEC(nHandler, "EXEC MyProc ?@cID")

И вообще-то обмен между FoxPro и сервером несколько больше чем: передал строку - получил курсор. Просто одномоментно FoxPro может прочитать только один курсор. Но есть еще набор методов, позволяющих прочитать больше одного курсора полученных от сервера именно за один раз.
...
Рейтинг: 0 / 0
04.12.2003, 15:14
    #32343657
Voevoda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
ВладимирМ, thanks. Все работает
...
Рейтинг: 0 / 0
04.12.2003, 15:17
    #32343665
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
4 ВладимирМ

Точна! :) Припарил. Если чтоб вернуть, собака нужна. не нужна если просто передать параметр
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.04.2005, 13:40
    #33042809
Guestttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
2 ВладимирМ

Код: plaintext
Просто одномоментно FoxPro может прочитать только один курсор. Но есть еще набор методов, позволяющих прочитать больше одного курсора полученных от сервера именно за один раз.

Есть процедура, в которой 2 селекта, тогда вызов:
SQLEXEC(,"EXEC sp_myProc","MyAlias1")
возвращает две таблицы MyAlias1 и RESULT1,
как сделать, чтоб явно получить MyAlias1 и MyAlias2

Thanks!
...
Рейтинг: 0 / 0
29.04.2005, 13:41
    #33042811
Guestttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
2 ВладимирМ

Код: plaintext
Просто одномоментно FoxPro может прочитать только один курсор. Но есть еще набор методов, позволяющих прочитать больше одного курсора полученных от сервера именно за один раз.

Есть процедура, в которой 2 селекта, тогда вызов:
SQLEXEC(,"EXEC sp_myProc","MyAlias1")
возвращает две таблицы MyAlias1 и RESULT1,
как сделать, чтоб явно получить MyAlias1 и MyAlias2

Thanks!
...
Рейтинг: 0 / 0
29.04.2005, 13:46
    #33042827
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
Читай описание команды SQLMoreResult(). В описании этой команды дан пример ее использования.
...
Рейтинг: 0 / 0
29.04.2005, 14:16
    #33042921
Guestttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
2 ВладимирМ

Это понятно, открываются 2 рабочие области, и я переключаюсь между ними.
Но я хочу именить ALIAS второй области с SQLResult1 на нужный мне,
чтоб потом обращаться типа
Код: plaintext
Tab2.name
...
Рейтинг: 0 / 0
29.04.2005, 14:18
    #33042927
Guestttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
2 ВладимирМ

Это понятно, открываются 2 рабочие области, и я переключаюсь между ними.
Но я хочу именить ALIAS второй области с SQLResult1 на нужный мне,
чтоб потом обращаться типа
Код: plaintext
Tab2.name
...
Рейтинг: 0 / 0
29.04.2005, 14:44
    #33043008
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
В VFP9 в команде SQLMoreResults() можно указывать имя алиаса. А вообще-то, можно переоткрыть полученный курсор в другой рабочей области с нужным алиасом

Код: plaintext
1.
USE (DBF("SQLResult")) IN  0  AGAIN ALIAS NewResult
USE IN SQLResult

Переоткрытие курсора - это практически мгновенная операция. Никаких дополнительных обращений к серверу нет.
...
Рейтинг: 0 / 0
29.04.2005, 15:36
    #33043133
Guestttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры SQL
СПАСИБО !!! Так и сделаю.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Хранимые процедуры SQL / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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