Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
Есть хранимка в SQL 2005

Create PROCEDURE [dbo].[sp_lsost_Isperiod] 
	 @ddateBegin datetime  
	, @ddateEnd datetime = @ddateBegin
	,@retVal int = 5 output 
as
BEGIN
	IF EXISTS(SELECT [lsost].[lsostid] FROM lsost WHERE lsost.ddate BETWEEN @ddateBegin AND @ddateEnd )
		begin 
			select @retVal = 0
		end 
	ELSE 
		begin 
			select @retVal = 1
		end
END

в манаджмент студио все нормально отрабатывает и возвращает все нормально...

Вызываю ее из фокса

nlIsperiod = 5
clExec= " EXECUTE ?@nlIsperiod = [dbo].[sp_lsost_Isperiod] ?dlCalcDate  " 
nlExec = SQLExec(this.dbconnhandle, clExec , "crIsPerSQL")

в результате nlIsperiod
не изменяется .

в чем может быть баг? не могу найти.
9 авг 06, 14:04    [2982374]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
упс

Вызываю ее из фокса

nlIsperiod = 5
clExec= " EXECUTE ?@nlIsperiod = [dbo].[sp_lsost_Isperiod] ?dlCalcDate  " 
nlExec = SQLExec(this.dbconnhandle, clExec , "crIsPerSQL")


Странный вызов... Я пишу что-то навроде такого:

clExec= " EXEC [dbo].[sp_lsost_Isperiod]  ?ldBeginDate, ?ldEndDate, ?@lnResult" 
9 авг 06, 14:18    [2982529]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
так тоже самое, :
в результате nlIsperiod
не изменяется .
9 авг 06, 14:23    [2982587]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Ну я бы попробовал изменить SP:
Create PROCEDURE [dbo].[sp_lsost_Isperiod] 
	 @ddateBegin datetime , 
	 @ddateEnd datetime,
	 @retVal int =1 output 
as
SELECT [lsost].[lsostid] FROM lsost WHERE lsost.ddate BETWEEN @ddateBegin AND @ddateEnd 
IF @@ROWCOUNT>0
  set @retVal = 0
ELSE 
  set @retVal = 1
9 авг 06, 14:30    [2982639]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
если данные есть и их много то такая хранимка будет все их отбирать.
а значит будет дольше работать.
нужно только знать есть они или нет.
9 авг 06, 14:35    [2982679]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
Sergey Ch
Ну я бы попробовал изменить SP:
Create PROCEDURE [dbo].[sp_lsost_Isperiod] 
	 @ddateBegin datetime , 
	 @ddateEnd datetime,
	 @retVal int =1 output 
as
SELECT [lsost].[lsostid] FROM lsost WHERE lsost.ddate BETWEEN @ddateBegin AND @ddateEnd 
IF @@ROWCOUNT>0
  set @retVal = 0
ELSE 
  set @retVal = 1


на сервере это все отрабатывает и значение возвращает....
в фоксе получить не могу....
9 авг 06, 14:46    [2982775]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
alex11100
Guest
1 в селект дополнительно top 1 - меньше тарабанить будет
2 последней строкой select @retVal
9 авг 06, 15:08    [2982945]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
не помогает, курсор тоже не возвращает....
не понимаю почему може быть дело в каких то настройках?
другие храники нормально работают с этой такая фигня
9 авг 06, 15:20    [2983066]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
упс
...другие храники нормально работают с этой такая фигня

А если для проверки создать абсолютно новую процедуру (то есть с новым именем) и попробовать с ней?

А права у Вас все есть к этой процедуре и она в правильной базе данных?
9 авг 06, 15:34    [2983203]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
прав не меньше чем к остальным,
к томуже на сервере то все отрабатывает (в смысле в манаджмент студии) так как надо
9 авг 06, 15:45    [2983289]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
Странно
вот сделал тестовую процу
create  procedure test_proc
@inVal int =1,
@retVal int =1 output 
as
select @retVal = @inVal
return 0

в фоксе

PUBLIC ret
ret=0
sqlexec(1,'exec test_proc 2,?@ret')
? ret
У меня все работает - а что даст этот вариант у вас ?
9 авг 06, 15:48    [2983319]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
это отрабатывает
9 авг 06, 17:04    [2983949]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
упс
другие храники нормально работают с этой такая фигня

1.эти хранимки тоже с output'ом ?
2. sqlexec при выполнении что возвращает -может ошибку ?
3. как объявлена переменная nlIsperiod - если локальная-попробуйте привате или паблик
ну и неплохо-бы посмотреть профалером что происходит при выполнении
9 авг 06, 17:13    [2984029]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
проанализировал,
в общем видимо дело в следующем:

sqlexec вызывается из другого класса,
в качестве эксперимента обьявил переменную в том методе где sqlexec вызывается - тогда переменная меняется,
а обьявленную из другого метода Public переменную не меняет....

что делать?
9 авг 06, 18:13    [2984448]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
нужно навести порядок с переменными.
где-то происходит перекрытие.
как вариант
-обьявить паблик в ините или лоаде если это форма, и больше нигде ее не переобъявлять.
-Если это невизуальный класс - объявление сделат перед созданием.
9 авг 06, 18:41    [2984594]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
переменную обьявил public в ините все заработало.
может кто нибудь обьяснить почему именно так все работает.
разве не все равно, public он и есть public ?
10 авг 06, 09:16    [2985955]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
а вы уверены что метод в котором переменная у вас обьявляется выполняется раньше, чем тот в котором выполняется SQL ?
скорее всего вы сначала выполняете SQL фокс создает переменную, а потом в другом методе вы ее переопределяете - вот и косяк.
С пабликами нужно быть осторожнее.
Если уж они вам нужны - обьявляйте на самом "верхнем " уровне. А лучше вообще от них отказаться.
10 авг 06, 10:34    [2986316]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
а как бы так написать чтобы отказаться....
переменную то надо вернуть из хранимки
10 авг 06, 11:52    [2986869]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
Ну да ради бога - если уж нужно , то нужно .
У самого есть Паблики.
Просто стараюсь их объявление вынести "повыше".
например я их объявляю в главной проге.

незнаю в чем состоит задача,
но в данном конкретном случае из ХП вы получите курсор
SELECT [lsost].[lsostid] FROM lsost WHERE lsost.ddate BETWEEN @ddateBegin AND @ddateEnd
и собственно уже на клиенте можно проверить reccount() и использовать для работы
10 авг 06, 12:25    [2987111]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура SQL 2005 возвратить параметр ?  [new]
упс
Guest
просто процедурка на сервере используется,
и долго работать ей не желательно, потомучто не знаю точно где еще она может использоваться, да и имхо она оптимально написана.
подумаю может еще до чего додумаюсь...
10 авг 06, 14:42    [2988011]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить