Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Усечение данных строки справа (число прочтений - 4030 )
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Усечение данных строки справа
10. Августа 2011 :: 06:14
Печать  
Добрый день, при выполниении этого запроса вылетает ошибка, Ыефеу22001, native 0? message [microsoft][ODBC SQL Server Driver] Усечение строки справа.  пробовал сооздавать параметр в реестре  DBC, но ничего не помогает, подскажите что не так в запросе?
Код
Выбрать все
_б	= создатьОбъект("ODBCRecordSet");
	_тз	= "DELETE FROM " + ИмяOlapТаблицыДолгов + " WHERE подразделение = "
		+  _подразделение + " and дата = " + _датаSQL(выбКонПериода);
	_б.Выполнить(_тз);
	_б.Закрыть();

	_б.Подготовить("INSERT INTO " + ИмяOlapТаблицыДолгов + "
	|(подразделение, объект, дата, глубина, долг, просроченно, суммаКредита, сумма1, сумма2, дебитор, сумма3, сумма4, сумма5)
	|VALUES("+_подразделение+", ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
	_б.ВыполнитьSQL_ИзТЗ(тз); 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Усечение данных строки справа
Ответ #1 - 10. Августа 2011 :: 06:22
Печать  
а тз чем заполняешь? Колонки там типизированы ?..
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Усечение данных строки справа
Ответ #2 - 10. Августа 2011 :: 06:35
Печать  
1. sql-параметры определить явно (методом ДобПараметр) в соответствии с sql-типами
2. в _тз либо для строковых колонок определить соотв. длину,
либо туда вставлять уже усеченные методом Лев(), до нужной длины, строки.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Усечение данных строки справа
Ответ #3 - 10. Августа 2011 :: 06:45
Печать  
1.так после
Код
Выбрать все
_б.Закрыть(); 


нельзя выполнять другие запросы по объекту _б

2.вместо _б.Выполнить(_тз); лучше
использовать _б.ВыполнитьСкалярный(_тз);

3.на мой взгляд не имеет смысла делать insert через параметризированный запрос ( тем более надеясь на автоподстановку типов)
  
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #4 - 10. Августа 2011 :: 08:24
Печать  
Ребят всем спасибо, отвечая на посты, да колонки объявляются, и тип и длина, дело в том чо у нас  7 баз, во  всех нормально кроме одной, вообщем драйвер ОДБС переустановил, и все заработало
  
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #5 - 11. Августа 2011 :: 10:08
Печать  
хм.. вообщем, помогло буквально на 1раз, и всё опять навернулось, и опять только в 1 базе, весь код примерно выглядит так
Код
Выбрать все
Процедура Выгрузить()

	_конст			= СоздатьОбъект("константы");
	_подразделение	= число(_конст.получить("идПодразделения"));
	ИмяOlapТаблицыДолгов = СвойстваОбъекта(,"SQL.ИмяOlapТаблицыДолгов");
	Если ПустаяСтрока(ИмяOlapТаблицыДолгов) = 1 Тогда
		ИмяOlapТаблицыДолгов = "dwh..долги2";
	КонецЕсли;

	//мд=создатьОбъект("MetaDataWork");
	тз=создатьОбъект("ТаблицаЗначений");
	тз.новаяКолонка("объект","Строка",9,,,,,);
	тз.новаяКолонка("дата","Дата",,,,,,);
	тз.новаяКолонка("глубина","Число",3,,,,,);
	тз.новаяКолонка("долг","Число",19,2,,,,);
	тз.новаяКолонка("просроченно","Число",19,2,,,,);
	тз.новаяКолонка("суммаКредита","Число",19,2,,,,);
	//тз.новаяКолонка("проценты","Число",19,2,,,,);
	тз.новаяКолонка("сумма1","Число",19,2,,,,);
	тз.новаяКолонка("сумма2","Число",19,2,,,,);
	тз.новаяКолонка("дебитор","Число",1,0,,,,);
	тз.новаяКолонка("сумма3","Число",19,2,,,,);
	тз.новаяКолонка("сумма4","Число",19,2,,,,);
	тз.новаяКолонка("сумма5","Число",19,2,,,,);

	фСтараяВерсия = 1;
	безМинусов = 1;
	толькоПросрочка = 0;
	ставка = 0;
	минимум = 0;
	Если Сформировать(1) > 0 Тогда
		Возврат;
	КонецЕсли;

	_б	= создатьОбъект("ODBCRecordSet");
	_тз	= "DELETE FROM " + ИмяOlapТаблицыДолгов + " WHERE подразделение = "
		+  _подразделение + " and дата = " + _датаSQL(выбКонПериода);
	_б.Выполнить(_тз);
	_б.Закрыть();

	_б.Подготовить("INSERT INTO " + ИмяOlapТаблицыДолгов + "
	|(подразделение, объект, дата, глубина, долг, просроченно, суммаКредита, сумма1, сумма2, дебитор, сумма3, сумма4, сумма5)
	|VALUES("+_подразделение+", ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
	_б.ВыполнитьSQL_ИзТЗ(тз);

КонецПроцедуры 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Усечение данных строки справа
Ответ #6 - 11. Августа 2011 :: 10:15
Печать  
Дык, а тз где у тебя заполняется ?
  
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #7 - 11. Августа 2011 :: 11:02
Печать  
Eprst писал(а) 11. Августа 2011 :: 10:15:
Дык, а тз где у тебя заполняется ?

достаточно любопытный вопрос, нашел в коде вот это
Код
Выбрать все
если _реж = 1 тогда
				тз.новаяСтрока();
				тз.объект=""+_подразделение+_объект.код;
				тз.дата=выбКонПериода;
				тз.глубина=_объект.вГлубина;
				_вал=_объект.валюта;
				тз.долг=глПересчетВалют(_долг,_вал,глРубли,,,выбКонПериода);
				тз.просроченно=глПересчетВалют(_просроченно,_вал,глРубли,,,выбКонПериода);
				да);
				тз.сумма1=глПересчетВалют(_сумма[1],_вал,глРубли,,,выбКонПериода);
				тз.сумма2=глПересчетВалют(_сумма[2],_вал,глРубли,,,выбКонПериода);
				тз.дебитор=?(_долг>0,1,0);
				тз.сумма3=глПересчетВалют(_сумма[3],_вал,глРубли,,,выбКонПериода);
				тз.сумма4=глПересчетВалют(_сумма[4],_вал,глРубли,,,выбКонПериода);
				тз.сумма5=глПересчетВалют(_сумма[5],_вал,глРубли,,,выбКонПериода);
			конецЕсли; 


« Последняя редакция: 11. Августа 2011 :: 12:49 - MixanM »  
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #8 - 12. Августа 2011 :: 03:29
Печать  
может кто то знает, как можно отловить запрос который уходит в 1С ?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Усечение данных строки справа
Ответ #9 - 12. Августа 2011 :: 07:01
Печать  
1.Круто, и в какой проце идёт заполнение ТЗ ? в Сформировать ?
А ТЗ у тебя что, глобальная переменная модуля ?

2.Запрос отловить в профайлере
  
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #10 - 15. Августа 2011 :: 04:11
Печать  
Eprst писал(а) 12. Августа 2011 :: 07:01:
1.Круто, и в какой проце идёт заполнение ТЗ ? в Сформировать ?
А ТЗ у тебя что, глобальная переменная модуля ?

2.Запрос отловить в профайлере

1да, заполненте идет в проце Сформировать, и она глобального модуля
2. не совсем понял как это сделть, зато есть идея , создать временную таблицу, вставить туда строку, сроку вставить в скюль, и так перебором все строки, только вопрос, как мне в цикле енто сделать?
  
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #11 - 15. Августа 2011 :: 06:05
Печать  
вообщем наваял что то вроде вот этого, (таблица "вт" создана там ранее) и заработало :
Код
Выбрать все
пока тз.получитьСтроку() = 1 Цикл
		вт.НоваяСтрока(тз.объект);
		Попытка
		_б.ВыполнитьSQL_ИзТЗ(вт)
		Исключение
		Сообщить(вт.объект);
		КонецПопытки;
	КонецЦикла; 

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Усечение данных строки справа
Ответ #12 - 15. Августа 2011 :: 06:24
Печать  
MixanM писал(а) 15. Августа 2011 :: 06:05:
Код
Выбрать все
пока тз.получитьСтроку() = 1 Цикл
		вт.НоваяСтрока(тз.объект);
		Попытка
		_б.ВыполнитьSQL_ИзТЗ(вт)
		Исключение
		Сообщить(вт.объект);
		КонецПопытки;
	КонецЦикла; 


Ужас
мне одному бредом кажется это?
  

1&&2&&3
Наверх
 
IP записан
 
MixanM
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 10. Августа 2011
Re: Усечение данных строки справа
Ответ #13 - 16. Августа 2011 :: 06:31
Печать  
trad писал(а) 15. Августа 2011 :: 06:24:
MixanM писал(а) 15. Августа 2011 :: 06:05:
Код
Выбрать все
пока тз.получитьСтроку() = 1 Цикл
		вт.НоваяСтрока(тз.объект);
		Попытка
		_б.ВыполнитьSQL_ИзТЗ(вт)
		Исключение
		Сообщить(вт.объект);
		КонецПопытки;
	КонецЦикла; 


Ужас
мне одному бредом кажется это?

мне тоже =))), но ошибка не вылетает, и данные улетают в ОЛАП, ПРОФИТ епт ))
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать