| 
			
			 | 
		#1 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
			
			
			Не работает Insert_Recordset
			 
			
			Пытаюсь вставить записи из временной таблицы в постоянную с помощью insert_recordset (временная и постоянная таблица созданы мной, полностью идентичны по структуре). 
		
		
		
		
		
		
		
	На выполнении Insert_Recordset Аксапта падает. while_select ... myTable.insert() отрабатывает нормально. Вопрос традиционен: кто виноват (риторически) и что делать(практически)?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В свое время я тоже много возлагал надежд на эту операцию. Но, к сожалению, она их не оправдала :-( В определенных ситуациях при запуске операции Insert_Recordset  я наблюдал, как Axapta поочередно закрывала все свои окна, а потом закрывалась сама. В хелпе  есть замечательное объяснение данному явлению: "INSERT_RECORDSET is a recordset-based operators, which performs operations on multiple records at a time. However, it can fall back to record-by-record operations in a number of situations."   
		
		
		
		
		
		
		
	В итоге я решил ограничиться использованием while_select, а для его ускорения настроил индексы. Так, во всяком случае, надежнее.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано AlexUnik  
В хелпе есть замечательное объяснение данному явлению: "INSERT_RECORDSET is a recordset-based operators, which performs operations on multiple records at a time. However, it can fall back to record-by-record operations in a number of situations."  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
			
			
			Предложение
			 
			
			Господа, если это топик создан для того, чтобы жаловаться на судьбу, то его надо перенести в курилку. А если для решения проблем, то давайте полную информацию о том что и как вы делали.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			"However, it can fall back to record-by-record operations in a number of situations."  
		
		
		
		
		
		
		
	Я так понимаю, в некоторых случаях, операция групповой вставки строк INSERT_RECORDSET откатывается к реализации через курсор (record-by-record) и делается это весьма неоптимизированным способом.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Yprit , поищите по ключевому слову, про INSERT_RECORDSET на форуме много писал simply (и его реинкарнация simply2double 
		
		
		
		
		
		
		
	 )
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано AlexUnik  
Я так понимаю, в некоторых случаях, операция групповой вставки строк INSERT_RECORDSET откатывается к реализации через курсор (record-by-record) и делается это весьма неоптимизированным способом. 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Проблема, видимо, кроется в самой моей таблице, т.к. на других темповых таблицах эта конструкция без проблем отрабатывает. На досуге попробую разобраться детально - сейчас вреени нет, оставил while_select
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 Maxim Gorbunov 
		
		
		
		
		
		
		
	Спасибо, прочитал и не один раз. Если не ошибаюсь, слово YES в таблице указанного абзаца помечает ситуацию, когда метод срабатывает построчно. Маленький вопросик: destination-table обязательно должна быть временной? В моем случае необходимо вставить большой набор записей в строки журнала коммерческих соглашений, но вставка должна производиться из нескольких таблиц - строки прайса в связке со строками журнала коммерческих соглашений.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			insert_recordset во временную таблицу записи НЕ ВСТАВЛЯЕТ... доказано эмпирически... возможно этому есть научное объяснение, заложенное в самом механизме работы аксапты со временными таблицами... но факт остается фактом... при попытке вставить аксапта валится.... 
		
		
		
		
		
		
		
	и еще одна проблнема... которую зачастую забываешь, при использовании insert_recordset: нужно аккуратно повторять филдлист... особенно в случаи вставки записей из объединения таблиц... иначе все то же падение... а в остальном все работает нормально... PS Ко всему прочему наглядно создается впечатление пакетной обработки, которое так греет душу, ибо с детства привита неприязнь к команде fetch ))) хотя опять же... не знаю механизма исполнения данной команды... Аксаптой...  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2  simply2double  
		
		
		
		
		
		
		
	Спасибо за подтверждение моих подозрений :-) Я по-разному пробовал уговорить работать insert_recordset , но у меня не получилось. Быть может, я еще что-то не предусмотрел? Ниже кусок из неработающего кода: { PriceDiscAdmTrans PDA; PriceDiscAdmTrans PDAI; PriceDiscTable PDT; ttsbegin; insert_recordset PDAI(JournalNum, ItemName, PriceDiscTableRef, ItemCode, AccountCode, ItemRelation, AccountRelation, Amount, Currency, SearchAgain, relation, UnitId, Module, InventDimId, fromDate, toDate) select JournalNum, ItemName from PDA where PDA.JournalNum==JournalNum join RecId, ItemCode, AccountCode, ItemRelation, AccountRelation, Amount, Currency, SearchAgain, relation, UnitId, Module, InventDimId, fromDate, ToDate from PDT where PDA.ItemRelation==PDT.ItemRelation && PDA.AccountRelation==PDT.AccountRelation && PDA.Module==PDT.Module && PDA.Relation==PDT.Relation && PDA.UnitId==PDT.UnitId && PDA.Currency==PDT.Currency && PDT.ToDate==STR2DATE('',123); ttscommit; }  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а сам селект.. если его запустить возвращает записи???  если да... посмотри что он возвращает...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2  simply2double  
		
		
		
		
		
		
		
	Вот так селект работает отлично, но, к с ожалению, через while: ttsbegin; while select JournalNum, ItemName from PDA where PDA.JournalNum==JournalNum join RecId, ItemCode, AccountCode, ItemRelation, AccountRelation, Amount, Currency, SearchAgain, relation, UnitId, Module, InventDimId, fromDate from PDT index PriceDiscAdmIdx where PDA.Module==PDT.Module && PDA.Relation==PDT.Relation && PDA.AccountRelation==PDT.AccountRelation && PDA.ItemRelation==PDT.ItemRelation && PDA.UnitId==PDT.UnitId && PDA.Currency==PDT.Currency && PDT.ToDate==STR2DATE('',123) { PDAI.PriceDiscTableRef = PDT.RecId; PDAI.ItemCode = PDT.ItemCode; PDAI.AccountCode = PDT.AccountCode; PDAI.ItemRelation = PDT.ItemRelation; PDAI.AccountRelation = PDT.AccountRelation; PDAI.Amount = PDT.Amount; PDAI.QuantityAmount = PDT.QuantityAmount; PDAI.Currency = PDT.Currency; PDAI.SearchAgain = PDT.SearchAgain; PDAI.relation = PDT.relation; PDAI.UnitId = PDT.UnitId; PDAI.Module = PDT.Module; PDAI.InventDimId = PDT.InventDimId; PDAI.FromDate = PDT.fromDate; PDAI.ToDate = FROMDATE-1; PDAI.JournalNum = PDA.JournalNum; PDAI.ItemName = PDA.ItemName; PDAI.doInsert(); } ttscommit;  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано simply2double  
insert_recordset во временную таблицу записи НЕ ВСТАВЛЯЕТ... доказано эмпирически... PHP код: 
	
			
	
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано AlexUnik  
Маленький вопросик: destination-table обязательно должна быть временной? 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Maxim Gorbunov  
Неправда. Вот работающий пример: 1. Создал копию custTable 2. Для чистоты эксперимента удалил из нее индексы 3. Попробывал вставлять в нее из обединения таблиц custTable и CustTrans Результат все тот же... когда таблица не временная все встатвляется нормально... когда временная ... все то же падение... может я чего-то не понимаю.. или чего0то не вижу ??? Вот код: PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 Maxim Gorbunov 
		
		
		
		
		
		
		
	Спасибо. Получается, что для временных таблиц использовать insert_recordset не имеет большого смысла.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			кстати оттрасированные команды сикуэла при исполнении приведенного выше примера для реальной таблицы: 
		
		
		
		
		
		
		
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 simply2double  
		
		
		
		
		
		
		
	Вот-вот! У меня сиквельный профайлер последней тоже зафиксировал эту команду, но я-то вставлял в постоянную таблицу...  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			еще знаешь какой трабл может быть... в таблице может быть перекрыт метод insert... и предпринимая вставку.. ты нарушаешь какие-то условия...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 |