C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Перенос записей из одной таблицы в другую
Костя
Отправлено: 06.05.2004, 15:08


Не зарегистрирован







Есть такая проблема: таблица отображаются пользователю через DbGrid. У Grid'а стоит свойство MultiSelect=true. Пользователь выбирает записи в Grid'е (произвольно), нажимает на кнопку и отмеченные записи копируются в другую таблицу, из этой удаляются. Как попроще реализовать такую процедуру ?
Gedeon
Отправлено: 06.05.2004, 16:41


Ветеран

Группа: Модератор
Сообщений: 1742



Два запроса первый INSERT в нужную таблицу, второй DROP из первой.
Костя
Отправлено: 07.05.2004, 08:24


Не зарегистрирован







А как с помощью DROP удалить записи ? Насколько я знаю можно удалить таблицу, ещё что-то... а записи как ?
Gedeon
Отправлено: 07.05.2004, 08:46


Ветеран

Группа: Модератор
Сообщений: 1742



C DROP — это я погорячился, это удаление всей таблицы, удалить строки можно с помощью инструкции DELETE
DELETE TableName
WHERE ВашиУсловия.
Также могу посоветовать компонент BatchMove со вкладки BDE.
QUOTE

TBatchMove encapsulates Borland Database Engine (BDE) features that let you to duplicate a dataset, append records from one dataset to another, update records in one dataset with records from another dataset, and delete records from one dataset that match records in another dataset.

Правда это если только вы используете БДЕ.
olegenty
Отправлено: 07.05.2004, 08:54


Ветеран

Группа: Модератор
Сообщений: 2412



и всё это в одной транзакции, без всякого AutoСommit, а то за#####ся потом актуальные данные вычислять при сбоях...
Костя
Отправлено: 11.05.2004, 15:07


Не зарегистрирован







Я использую ADO.
Не думал, что столько проблемм будет. Пока оптимального варианта не нашёл.
Костя
Отправлено: 11.05.2004, 15:09


Не зарегистрирован







Был бы компонент типа BatchMove для ADO, была бы вообще сказка!
olegenty
Отправлено: 11.05.2004, 15:23


Ветеран

Группа: Модератор
Сообщений: 2412



1. Открываешь ОТДЕЛЬНЫЙ коннект. (потому что в ADO транзакции идут на уровне коннекта. 1 транзакция = один коннект, если не брать во внимание вложенность транзакций. а вложенность — это ненужный хлам, поэтому во внимание не беру, поэтому 1 Connection = 1 транзакция)
2. Явно стратуешь транзакцию.
3. Выполняешь вставку, потом удаление.
4. Явно завершаешь транзакцию.
5. Если где-то при вставке/удалении произошла ошибка, откатываешь транзакцию, иначе база переходит в неактуальное состояние и становится даром нафиг никому не нужной.

Вернуться в Работа с базами данных в C++Builder