Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MSsql Aerror() / 22 сообщений из 22, страница 1 из 1
05.07.2006, 11:13
    #33832101
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
при обработки данных (таблички) формируется команда серверу
и посылается в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  IF this.dbconnhandle >  0 
		* посылаю ее на сервер
		IF TYPE("cl_SQLcursor")=="C"
			nlExec = SQLExec(this.dbconnhandle,lcStringSQL,cl_SQLcursor)
		ELSE 
			nlExec = SQLExec(this.dbconnhandle,lcStringSQL)
		ENDIF 
		IF nlExec < 0 
			 AERROR(laSQLerror)
			FOR nlk1= 1  TO ALEN( laSQLerror, 1 )
				this.cerror = this.cerror + ;
								  TRANSFORM(laSQLerror( nlk1, 1  )) + CHR( 13 ) ;
								+ TRANSFORM(laSQLerror( nlk1, 2  )) + CHR( 13 ) ;
								+ TRANSFORM(laSQLerror( nlk1, 3  )) + CHR( 13 ) ;
								+ TRANSFORM(laSQLerror( nlk1, 4  )) + CHR( 13 ) ;
								+ TRANSFORM(laSQLerror( nlk1, 5  )) + CHR( 13 ) 
			ENDFOR 
		ENDIF
	ELSE 
		this.cerror="Соединение с БД еще не установлено"
	ENDIF   

в результате обработки таблички Некоторые записи вызывают ошибку,
aError
1526
Connectivity error: Unable to retrieve specific error information. Driver is probably out of resources
.NULL.
.NULL.
.NULL.

при этом сама строчка exec-а сохраняется в курсорчике для проверки,
когда ее копирую потом и выполняю в манаджмент студио все проходит.

в чем может быть дело и как получить ошибку с сервера в момент выполнения?

PS. VFP 8 + MS SQL 2005 express
...
Рейтинг: 0 / 0
05.07.2006, 11:25
    #33832159
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Где команда сервера, в ней проблема.
...
Рейтинг: 0 / 0
05.07.2006, 11:45
    #33832253
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Так бывает, когда сама команда lcStringSQL является выражением NULL !
Проверьте, как вы ее формируете. NULL все поглащает.
С уважением, Алексей
...
Рейтинг: 0 / 0
05.07.2006, 12:19
    #33832391
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Код: 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.
 DECLARE @lsID int
 DECLARE @lsobtypeId int 
 DECLARE @ddate smalldatetime 
 DECLARE @nObRKr numeric ( 18 , 2 ) 
 DECLARE @nObRDb numeric ( 18 , 2 ) 
 DECLARE @nObVKr numeric ( 18 , 2 ) 
 DECLARE @nObVDb numeric ( 18 , 2 ) 
 DECLARE @cSchet char( 20 ) 
 DECLARE @cObType char( 15 ) 

 select @lsID =  0 
 select @lsobtypeId =  0 
 select @ddate =  CAST ('29.05.2006' AS smalldatetime ) 
 select @nObRKr =  CAST ('50000000' AS numeric ( 18 , 2 ) ) 
 select @nObRDb =  CAST ('0' AS numeric ( 18 , 2 ) ) 
 select @nObVKr =  CAST ('50000000' AS numeric ( 18 , 2 ) ) 
 select @nObVDb =  CAST ('0' AS numeric ( 18 , 2 ) ) 
 select @cSchet = '52304810400000000168'
 select @cObType = 'За день        '

 EXECUTE sp_lsob_upd
   @lsID 
   ,@lsobtypeId 
   ,@ddate 
   ,@nObRKr 
   ,@nObRDb 
   ,@nObVKr 
   ,@nObVDb 
   ,@cSchet 
   ,@cObType 
...
Рейтинг: 0 / 0
05.07.2006, 12:36
    #33832461
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Это что ты привел, код в строке lcStringSQL ? Если да то тогда лови 9 селектов на клиенте. Нужен код формирования строки lcStringSQL
...
Рейтинг: 0 / 0
05.07.2006, 12:41
    #33832488
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
понял ....

сделал к виду
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
EXECUTE sp_lsob_upd   ?lsID 
   ,?lsobtypeId 
   ,?ddate 
   ,?nObRKr 
   ,?nObRDb 
   ,?nObVKr 
   ,?nObVDb 
   ,?cSchet 
   ,?cObType 

aerror стал заполнятся,
спасибо

в общем думал что или вернет последнюю ошибку или в массиве,
оказалось ничего,
ведь ошибка в последней команде

______________________________________
Strong
...
Рейтинг: 0 / 0
05.07.2006, 12:48
    #33832514
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
PaulWist...Если да то тогда лови 9 селектов на клиенте....
Выражением вида select @cObType =... FROM .... не генерит ROWSET и , соответственно, курсор на клиенте :)
С уважением, Алексей.
...
Рейтинг: 0 / 0
05.07.2006, 12:49
    #33832517
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Ну и вот эти select-ы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 select @lsID =  0 
 select @lsobtypeId =  0 
 select @ddate =  CAST ('29.05.2006' AS smalldatetime ) 
 select @nObRKr =  CAST ('50000000' AS numeric ( 18 , 2 ) ) 
 select @nObRDb =  CAST ('0' AS numeric ( 18 , 2 ) ) 
 select @nObVKr =  CAST ('50000000' AS numeric ( 18 , 2 ) ) 
 select @nObVDb =  CAST ('0' AS numeric ( 18 , 2 ) ) 
 select @cSchet = '52304810400000000168'
 select @cObType = 'За день        '

замени на set
...
Рейтинг: 0 / 0
05.07.2006, 12:56
    #33832550
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
PaulWistНу и вот эти select-ы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 select @lsID =  0 
 select @lsobtypeId =  0 
 select @ddate =  CAST ('29.05.2006' AS smalldatetime ) 
 select @nObRKr =  CAST ('50000000' AS numeric ( 18 , 2 ) ) 
 select @nObRDb =  CAST ('0' AS numeric ( 18 , 2 ) ) 
 select @nObVKr =  CAST ('50000000' AS numeric ( 18 , 2 ) ) 
 select @nObVDb =  CAST ('0' AS numeric ( 18 , 2 ) ) 
 select @cSchet = '52304810400000000168'
 select @cObType = 'За день        '

замени на set
И что изменится ? Это же T-SQL, а не VFP !
С уважением, Алексей.
...
Рейтинг: 0 / 0
05.07.2006, 13:04
    #33832583
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
с set -ами то же самое - настоящую ошибку не дает пишет то же что и в первом посте.
он же понимает что ошибка произошла. Почему же не может ее вернуть?



______________________________________
Strong
...
Рейтинг: 0 / 0
05.07.2006, 13:06
    #33832590
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Вот это что такое

Код: plaintext
 select @ddate =  CAST ('29.05.2006' AS smalldatetime ) 

перепиши

Код: plaintext
 select @ddate =  CAST ('20060529' AS smalldatetime ) 
...
Рейтинг: 0 / 0
05.07.2006, 13:07
    #33832595
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Aleksey-K PaulWist...Если да то тогда лови 9 селектов на клиенте....
Выражением вида select @cObType =... FROM .... не генерит ROWSET и , соответственно, курсор на клиенте :)
С уважением, Алексей.

Ну да , не посмотрел до "конца"
...
Рейтинг: 0 / 0
05.07.2006, 13:08
    #33832601
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Strongс set -ами то же самое - настоящую ошибку не дает пишет то же что и в первом посте.
он же понимает что ошибка произошла. Почему же не может ее вернуть?
______________________________________
Strong
Ну что вы нам все приводите код сервера !!!
Поставьте SET STEP перед SQLEXEC и приведите значение переменной lcStringSQL
С уважением, Алексей.
...
Рейтинг: 0 / 0
05.07.2006, 13:20
    #33832647
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Aleksey-K
Ну что вы нам все приводите код сервера !!!
Поставьте SET STEP перед SQLEXEC и приведите значение переменной lcStringSQL
С уважением, Алексей.

это оно и есть
...
Рейтинг: 0 / 0
05.07.2006, 13:31
    #33832682
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Это имеено то, что в переменной lcStringSQL или, что должно там быть?
С уважением, Алексей
...
Рейтинг: 0 / 0
05.07.2006, 13:36
    #33832700
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
А если так:
Код: plaintext
1.
2.
m.lcStringSQL = [sp_lsob_upd  0 ,  0 , '2006.05.29',  50000000 ,  0 ,  50000000 ,  0 , '52304810400000000168', 'За день']
nlExec = SQLExec(this.dbconnhandle, m.lcStringSQL,cl_SQLcursor)
...
Тоже ошибка выскакивает?

С уважением, Алексей
...
Рейтинг: 0 / 0
05.07.2006, 13:39
    #33832710
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Aleksey-KЭто имеено то, что в переменной lcStringSQL или, что должно там быть?
С уважением, Алексей

да это именно то

Aleksey-KА если так:
Код: plaintext
1.
2.
m.lcStringSQL = [sp_lsob_upd  0 ,  0 , '2006.05.29',  50000000 ,  0 ,  50000000 ,  0 , '52304810400000000168', 'За день']
nlExec = SQLExec(this.dbconnhandle, m.lcStringSQL,cl_SQLcursor)
...
Тоже ошибка выскакивает?

С уважением, Алексей

в этом случае ошибка в Aerror попадает
...
Рейтинг: 0 / 0
05.07.2006, 13:40
    #33832714
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
да это именно то что в переменной
...
Рейтинг: 0 / 0
05.07.2006, 13:51
    #33832749
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Может имеет смысл при возникновении ошибки при обработки генерить RAISERROR самому ?

С уважением, Алексей
...
Рейтинг: 0 / 0
05.07.2006, 14:09
    #33832808
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Aleksey-KМожет имеет смысл при возникновении ошибки при обработки генерить RAISERROR самому ?

С уважением, Алексей

а смысл? ошибка есть ошибка если он ее так не берет то не возьмет и при RAISERROR
...
Рейтинг: 0 / 0
07.07.2006, 00:26
    #33837059
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Hi Strong!

Поиском воспользуйся - обсуждалась как-то проблема некоректной работы VFP8 с
ODBC - как раз в плане правильной интерпретации ошибок и как раз при
исполнении батчей (т.е. не одиночной команды, а набора команд)... Видимо
придётся всё-же ограничиваться "единичными" командами...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
07.07.2006, 07:53
    #33837164
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSsql Aerror()
Я думаю, что стоит попробавать один из двух вариантов:
1. Каков смысл такого вызова хранимой процедуры?
Может все-таки имеет смысл вызывать ее не из Batch, а прямым вызовом через m.lcStringSQL = [sp_lsob_upd ] +...
2. Возвращайте флаг ошибки из хранимой процедуры и по его анализу генерите свою через RAISERROR:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
...
DECLARE @RET_FLAG INT
...
EXECUTE @RET_FLAG = sp_lsob_upd
   @lsID 
   ,@lsobtypeId 
...
IF @RET_FLAG <  0 
      RAISERROR ('.......')

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


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