Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BatchMove [D6, Paradox]


REA ©   (2002-09-11 16:52:00) 

Задача: скопировать часть таблицы без ключевых полей на диск (файл либо парадокс таблица) и загрузить с диска, заполнив значения ключевых полей сгенерированными (некими текущими).
Очевидно для сохранения можно применить BatchMove.
Вопрос: нельзя ли использовать BatchMove для второй операции (загрузки) и, если можно, то как вмешаться в процесс и генерировать недостающие ключевые поля?


VAleksey   (2002-09-13 13:28:00) [1]

В самом запросе можно делать все что угодо. Только СashedUpdates = true.


REA   (2002-09-13 10:57:00) [2]

>Можно, конечно, и утром стулья, а вечером деньги. Т.е. дал запрос, получил НД, модифицировал в нем все, что надо (если он (BDE) даст это сделать), а потом сохранил в tmpTable (BatchMove), затем уже оттуда его впихнуть назад в базовую таблу, предварительно удалив из нее то, что уже не надо

(если он (BDE) даст это сделать) - не даст вроде, если не TClientDataSet.
А зачем в TmpTable? Я думал с диска в TQuery, добавить значения полей (долго и нудно. а как новые поля создать? - никак) и BatchMove в основную таблицу.

Я имел ввиду запрос: Select Fld1, Fld2 from SavedTable, при этом set Fld3 = 25 например.


MsGuns   (2002-09-12 13:03:00) [3]

>REA (12.09.02 10:25)
>Чем через временную таблицу, проще уж рукам перебрать, если записей немного...

Можно, конечно, но вместо 4 строчек кода для BatchMove, надо писать цикл с перебором всех полей, да и работать такой "ручной" вариант будет на пару порядков медленнее

>Как вариант: можно ли написать SQL запрос, который загрузит таблицу, а недостающие поля одновременно установит в заданное значение и из него уже сделать BatchMove?


Можно, конечно, и утром стулья, а вечером деньги. Т.е. дал запрос, получил НД, модифицировал в нем все, что надо (если он (BDE) даст это сделать), а потом сохранил в tmpTable (BatchMove), затем уже оттуда его впихнуть назад в базовую таблу, предварительно удалив из нее то, что уже не надо

Но я не вижу разницы..


REA   (2002-09-12 11:30:00) [4]

С копированием на диск проблем нет (см. вопрос). Проблема с загрузкой и заменой не полей, а их значений на известные константы.
Как вариант: можно ли написать SQL запрос, который загрузит таблицу, а недостающие поля одновременно установит в заданное значение и из него уже сделать BatchMove?


Mike Kouzmine   (2002-09-12 11:13:00) [5]

Просто в map TBatchMove указывай какие поля из исходной таблицы (NAME) будут копироваться в поля результирующей таблицы


REA   (2002-09-12 10:25:00) [6]

Чем через временную таблицу, проще уж рукам перебрать, если записей немного...


MsGuns   (2002-09-11 18:37:00) [7]

Схема манипулирования пачками (Batch - от англ. "Пакет", "Пачка")
такова.
1. С рабочей таблы снимается запросом часть записей (SELECT *)
2. С использованием TBatchMove (Mode:=batCopy) рез.НД сохраняется во временной таблице xxTemp (если такая табла уже физ.существует, лучше ее убить)
3. С таблой xxTemp выполняется все что надо
4. Этим же TBatchMove записи из xxTemp добавляются или заменяют старые или и то и другое в рабочую.
5. Если нет уверенности, что все записи пропишутся в раб.таб, надо кинуть 2 TTable и сослаться на них в св-вах ChangedTableName и KeyViolTableName. Ну и потом их анализировать..


Наверх

Титульная страница Поиск, карта сайта Написать письмо