Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Ошибка запроса: "Усечение данных строки справа" (число прочтений - 5189 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Ошибка запроса: "Усечение данных строки справа"
31. Июля 2008 :: 14:17
Печать  
Имею элементарный параметризированный запрос:
Код
Выбрать все
|set nocount on
|select
|	tmz.id 	[Номенклатура $Справочник.ТМЦ],
|	rtrim(ltrim(tmz.descr))	[Наименование $Строка],
|	rtrim(ltrim($tmz.КодТНВД))	[КодТНВД $Строка],
|	rtrim(ltrim($tmz.НаименованиеАнгл))	[НаименованиеАнгл $Строка],
|	rtrim(ltrim($tmz.ПолнНаименование))	[НаименованиеПолн $Строка]
|from
|	$Справочник.ТМЦ tmz(nolock)
|where
|	rtrim(ltrim(tmz.descr)) = ? and
|	tmz.isfolder = 2
|	and tmz.ismark = 0
|order by
|	$tmz.КодТНВД desc,
|	$tmz.НаименованиеАнгл desc,
|	$tmz.ПолнНаименование desc 


Длина поля descr 50 символов.
Длина поля КодТНВД 20 символов.
Длина поля НаименованиеАнгл 200 символов.
Длина поля ПолнНаименование 200 символов.

Довольно часто, время от времени запрос выдает ошибку: State 22001, native 0, message [Microsoft][ODBC SQL Server Driver]String data, right truncation
(или по русски: State 22001, native 0, message [Microsoft][ODBC SQL Server Driver]Усечение данных строки справа) и, ессно, на выходе результат нулевой, хотя элемент справочника с таким наименованием и заполненными требуемыми параметрами существует. Ошибка не плавающая, т.е. проявляется для одних и тех же конкретных элементов.

Не окажет ли любезность Великий АЛЛ просвятить в чем может быть проблема?

  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка запроса: "Усечение данных строки справа
Ответ #1 - 31. Июля 2008 :: 14:48
Печать  
Покажи подготовку параметра и длину передаваемой строки.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Ошибка запроса: "Усечение данных строки справа
Ответ #2 - 31. Июля 2008 :: 14:55
Печать  
Подготовка:
Код
Выбрать все
rstmz=СоздатьОбъект("ODBCRecordset");
rstmz.SetQueryTimeout(10);
rstmz.Debug(0);
Если rstmz.Prepare(ТекстЗапросаТМЦ)=0 Тогда
	Сообщить("Не подготовили запрос к справочнику ТМЦ!"+РазделительСтрок+rstmz.GetLastError());
	Возврат;
КонецЕсли;
rstmz.AddParam(1,15,11,0); 


Запрос:
Код
Выбрать все
Функция НайтиЭтементТМЦ(part_no)
	rstmz.SetParam(1,part_no);
	Попытка
		Return rstmz.ВыполнитьИнструкцию();
	Исключение
		Сообщить(ОписаниеОшибки());
		ТЗ=СоздатьОбъект("ТаблицаЗначений");
		Возврат ТЗ;
	КонецПопытки;
КонецФункции 


Длина передаваемой в запрос строки (part_no) - не более 11 символов
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Ошибка запроса: "Усечение данных строки справа
Ответ #3 - 31. Июля 2008 :: 15:04
Печать  
berezdetsky писал(а) 31. Июля 2008 :: 14:48:
Покажи подготовку параметра и длину передаваемой строки.

... ёпрст
Огромное спасибо за намек где собаку порыть. Действительно, поставил rstmz.AddParam(1,15,50,0), т.е. увеличил длину передаваемой строки по размеру длины поля, и ошибка пропала. Видно где-то у меня что-то затесалось в партномеры.

Спасибо!
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Ошибка запроса: "Усечение данных строки справа
Ответ #4 - 01. Августа 2008 :: 04:59
Печать  
where
|      rtrim(ltrim(tmz.descr)) = ?

Я бы еще так написал:

where
|      rtrim(ltrim(tmz.descr)) = rtrim(ltrim(?))

На всякий случай, а то был прецедент ....
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка запроса: "Усечение данных строки справа
Ответ #5 - 01. Августа 2008 :: 05:54
Печать  
Цитата:
where
|      rtrim(ltrim(tmz.descr)) = ?

Я бы еще так написал:

where
|      rtrim(ltrim(tmz.descr)) = rtrim(ltrim(?))

На всякий случай, а то был прецедент ....


Как по мне то лучше обьявить переменную длиной равной наименованию и присвоить ей значение, что избавит сервер от лишних функций по обрезанию пробелова.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать