|  04.10.2004, 20:32 | #1 | 
| Злыдни | Не работает Insert_Recordset 
			
			Пытаюсь вставить записи из временной таблицы в постоянную с помощью insert_recordset (временная и постоянная таблица созданы мной, полностью идентичны по структуре). На выполнении Insert_Recordset Аксапта падает. while_select ... myTable.insert() отрабатывает нормально. Вопрос традиционен: кто виноват (риторически) и что делать(практически)? | 
|  | 
|  05.10.2004, 09:40 | #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, а для его ускорения настроил индексы. Так, во всяком случае, надежнее. | 
|  | 
|  05.10.2004, 09:47 | #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." | 
|  | 
|  05.10.2004, 10:01 | #4 | 
| ---------------- | Предложение 
			
			Господа, если это топик создан для того, чтобы жаловаться на судьбу, то его надо перенести в курилку. А если для решения проблем, то давайте полную информацию о том что и как вы делали.
		 | 
|  | 
|  05.10.2004, 10:19 | #5 | 
| Участник | 
			
			"However, it can fall back to record-by-record operations in a number of situations."  Я так понимаю, в некоторых случаях, операция групповой вставки строк INSERT_RECORDSET откатывается к реализации через курсор (record-by-record) и делается это весьма неоптимизированным способом. | 
|  | 
|  05.10.2004, 10:21 | #6 | 
| Участник | 
			
			Yprit , поищите по ключевому слову, про INSERT_RECORDSET на форуме много писал simply (и его реинкарнация simply2double  ) | 
|  | 
|  05.10.2004, 14:49 | #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 | 
|  | 
|  05.10.2004, 15:10 | #8 | 
| Злыдни | 
			
			Проблема, видимо, кроется в самой моей таблице, т.к. на других темповых таблицах эта конструкция без проблем отрабатывает. На досуге попробую разобраться детально - сейчас вреени нет, оставил while_select
		 | 
|  | 
|  05.10.2004, 16:44 | #9 | 
| Участник | 
			
			2 Maxim Gorbunov Спасибо, прочитал и не один раз. Если не ошибаюсь, слово YES в таблице указанного абзаца помечает ситуацию, когда метод срабатывает построчно. Маленький вопросик: destination-table обязательно должна быть временной? В моем случае необходимо вставить большой набор записей в строки журнала коммерческих соглашений, но вставка должна производиться из нескольких таблиц - строки прайса в связке со строками журнала коммерческих соглашений. | 
|  | 
|  05.10.2004, 17:08 | #10 | 
| Участник | 
			
			insert_recordset во временную таблицу записи НЕ ВСТАВЛЯЕТ... доказано эмпирически... возможно этому есть научное объяснение, заложенное в самом механизме работы аксапты со временными таблицами... но факт остается фактом... при попытке вставить аксапта валится.... и еще одна проблнема... которую зачастую забываешь, при использовании insert_recordset: нужно аккуратно повторять филдлист... особенно в случаи вставки записей из объединения таблиц... иначе все то же падение... а в остальном все работает нормально... PS Ко всему прочему наглядно создается впечатление пакетной обработки, которое так греет душу, ибо с детства привита неприязнь к команде fetch ))) хотя опять же... не знаю механизма исполнения данной команды... Аксаптой... | 
|  | 
|  05.10.2004, 17:20 | #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; } | 
|  | 
|  05.10.2004, 17:43 | #12 | 
| Участник | 
			
			а сам селект.. если его запустить возвращает записи???  если да... посмотри что он возвращает...
		 | 
|  | 
|  05.10.2004, 17:49 | #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; | 
|  | 
|  05.10.2004, 19:56 | #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 | 
|  | 
|  05.10.2004, 19:59 | #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 | 
|  | 
|  06.10.2004, 10:04 | #16 | 
| Участник | Цитата: 
		
			Изначально опубликовано Maxim Gorbunov  Неправда. Вот работающий пример: 1. Создал копию custTable 2. Для чистоты эксперимента удалил из нее индексы 3. Попробывал вставлять в нее из обединения таблиц custTable и CustTrans Результат все тот же... когда таблица не временная все встатвляется нормально... когда временная ... все то же падение... может я чего-то не понимаю.. или чего0то не вижу ??? Вот код: PHP код: 
			 | 
|  | 
|  06.10.2004, 10:07 | #17 | 
| Участник | 
			
			2 Maxim Gorbunov Спасибо. Получается, что для временных таблиц использовать insert_recordset не имеет большого смысла. | 
|  | 
|  06.10.2004, 10:25 | #18 | 
| Участник | 
			
			кстати оттрасированные команды сикуэла при исполнении приведенного выше примера для реальной таблицы: PHP код: 
			 | 
|  | 
|  06.10.2004, 10:31 | #19 | 
| Злыдни | 
			
			2 simply2double  Вот-вот! У меня сиквельный профайлер последней тоже зафиксировал эту команду, но я-то вставлял в постоянную таблицу... | 
|  | 
|  06.10.2004, 11:27 | #20 | 
| Участник | 
			
			еще знаешь какой трабл может быть... в таблице может быть перекрыт метод insert... и предпринимая вставку.. ты нарушаешь какие-то условия...
		 | 
|  |