| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			update_recordset и конкатенация строк
			 
			
			Всем привет! 
		
		
		
		
		
		
		
	Столкнулся с такой проблемой: X++: //Работает update_recordset myTable_1 setting ErrorTxt = "AAAAA " + myTable_1.Field_str /*+ " BBB "*/; //НЕ Работает update_recordset myTable_1 setting ErrorTxt = "AAAAA " + myTable_1.Field_str + " BBB "; Ax2009 kernel 5.0.1500.2116 клиент тот же. БД SQL 2008 Текст который указывается после поля таблицы, в SQL Profiler воспринимается как bigint. Кто нибудь сталкивался с подобной проблемой?  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: lev (5), S.Kuskov (5). | |
| 
			
			 | 
		#2 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			с такой проблемой не сталкивался... но мне кажется в таком виде делать присвоение, как то не красиво что ль... лучше заполнить переменную нужным значением заранее, и потом её присвоить.  
		
		
		
		
		
		
			Что то, типа: X++: ErrorTxt errorTxt; ; errorTxt = "AAAAA " + myTable_1.Field_str + " BBB "; update_recordset myTable_1 setting ErrorTxt = errorTxt; 
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 lev: тк update_recordset массово обновляет строки, а топикстартеру надо обновить значение одного поля на основании другого, то предложенный вами способ не пойдет
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если вам надо обновить пол миллиарда строк в таблице? 
		
		
		
		
		
		
		
	И переменная эта для каждой строки своя!  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
 
		
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если всё выражение или его часть взять в скобки?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да все так же.  
		
		
		
		
		
		
		
	P.S. Так не хочется делать циклы.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте использовать strfmt("AAAAA %1  BBB ", myTable_1.Field_str), возможно поможет
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Пробовал, компилятор ругается.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а если выполнить этот апдейт в самом SQL в таком виде, тоже обругается? 
		
		
		
		
		
		
			Я клоню к тому, что может сформировать текст запроса в аксапте и отправить его на исполнение через Statement.executeUpdate(sqlTxt)? 
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Если условия позволяют, то обновляйте в два этапа сначала X++: update_recordset myTable_1 setting ErrorTxt = "AAAAA " + myTable_1.Field_str; X++: update_recordset myTable_1 setting ErrorTxt = myTable_1.Field_str + " BBB ";  
		 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не очень понял про сложности... 
		
		
		
		
		
		
			Человеку нужно из аксапты обновить много записей в таблице. использовать существующий синтаксис аксапты не получается из-за бага, поэтому я предлагаю обойти существующий синтаксис и отправить выполнение запроса на SQL. Причем тут менеджмент студио? Не будет же человек каждый раз в ручную запускать этот запрос из менеджмент студио? Для проверки конечно же надо использовать её   (если Вы про это)
		
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
только на втором этапе надо будет прибавлять к ErrorTxt, а не к Field_str 
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (1). | |
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от lev
			 
 
			Не очень понял про сложности... 
		
	Человеку нужно из аксапты обновить много записей в таблице. использовать существующий синтаксис аксапты не получается из-за бага, поэтому я предлагаю обойти существующий синтаксис и отправить выполнение запроса на SQL. Причем тут менеджмент студио? Не будет же человек каждый раз в ручную запускать этот запрос из менеджмент студио? Для проверки конечно же надо использовать её   (если Вы про это) , я подумал что операция апдейта в полмиллиарда записей разовая и ее лучше сделать, чтоб обойти все сложности, напрямую в менеджментстудио. если же эта операция частая, то чтото не правильно в архитектуре 
		Последний раз редактировалось ice; 18.10.2011 в 15:25.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В общем я бы пошел по следующему пути (если бизнес логика из метода update() таблицы не нужна) : 
		
		
		
		
		
		
			1. Если нужно разово выполнить обновление какого то поля, во всей таблице, то выполнил был это обновление напрямую в SQL. 2. Если это какая то периодическая операция, которая раз в месяц (неделю, квартал, год) должна выполняться кем то из аксапты, то сформировал бы SQL запрос и выполнил его напрямую в SQL из аксапты (как это сделать я писал в предыдущих сообщениях). P.S. если конечно сам SQL нормально переваривает такого вида запрос  
		
				__________________ 
		
		
		
		
		
			"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 18.10.2011 в 15:49. Причина: добавил P.S.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: update_recordset myTable_1 setting ErrorTxt = myTable_1.ErrorTxt + "CCC" + myTable_1.Field10_str + " DDD "; Цитата: 
	
		
			зачем такие сложности, можно в менеджментстудио
		
	 
Хотелось бы избежать SQLStatement'ов и с Аксаптовой таблицей работать приятнее и проще. З.Ы. Пол миллиарда как пример привел.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от lev
			 
 
			В общем я бы пошел по следующему пути: 
		
	2. Если это какая то периодическая операция, которая раз в месяц (неделю, квартал, год) должна выполняться кем то из аксапты, то сформировал бы SQL запрос и выполнил его напрямую в SQL из аксапты (как это сделать я писал в предыдущих сообщениях). P.S. если конечно сам SQL нормально переваривает такого вида запрос ![]()  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По хорошему сообщить бы в Майкрософт об этом баге...  
		
		
		
		
		
		
			Может они его исправят или хотя бы как то прокомментируют... 
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 |