Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
12 / 13 / 6
Регистрация: 13.11.2012
Сообщений: 295
1

Удаление строки с одной базы и перемещение ее в Архив (Таблицу)

23.07.2014, 14:31. Показов 1160. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, Надо с одной таблицы удалить строку как бы и переместить в ее в корзину (в другую таблицу) скажем.
На формах ADOTable1, DataSource1, DBGrid1

Добавлено через 4 часа 2 минуты
????????????????????
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2014, 14:31
Ответы с готовыми решениями:

Перемещение строки из таблицы в таблицу
Доброго времени суток ! Просьба следующая: сделать в Buildere 2 таблицы (3Х3), первую строку...

Как программно скопировать таблицу из одной базы в другую
как программно скопировать таблицу из одной базы в другую? есть 2 базы: 1.mdb и 2.mdb в 1ой базе...

Как в ADO связать таблицу из одной базы в другую?
Как в ADO связать таблицу из одной базы в другую? В DAO такая возмоможность существует. Например:...

Дабавление, изменение удаление записей в таблицу базы данных
Добрый день! Нужно написать программу в универ, столкнулся с проблемой. Есть база данных,...

17
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
23.07.2014, 14:41 2
Стараюсь ни когда не делать функционала удаления данных в своих проектах, вместо этого в таблицу добавляю поле "View". Если поле View равно 1 то данные отображаются, если 0 то не отображаются.
0
12 / 13 / 6
Регистрация: 13.11.2012
Сообщений: 295
23.07.2014, 15:12  [ТС] 3
мне нужно чтобы когда я их удалял, они перемещались в другую таблицу, обычный cutpaste

Добавлено через 1 минуту
Цитата Сообщение от Витальич Посмотреть сообщение
Стараюсь ни когда не делать функционала удаления данных в своих проектах, вместо этого в таблицу добавляю поле "View". Если поле View равно 1 то данные отображаются, если 0 то не отображаются.
мне нужно чтобы когда я их удалял, они перемещались в другую таблицу, обычный cutpaste
0
Модератор
9267 / 6045 / 2380
Регистрация: 21.01.2014
Сообщений: 25,820
Записей в блоге: 3
23.07.2014, 15:31 4
Лучший ответ Сообщение было отмечено names1995 как решение

Решение

Для БД, которые работали с BDE (тот же Paradox) был применим такой хороший компонент как TBatchMove, который позволял это делать очень просто.
Для ADO такого не предусмотрели, поэтому приходится что-то выдумывать, например так, как в примерном проекте (делался на RAD XE3)
Вложения
Тип файла: rar DB_ARCH.rar (97.6 Кб, 9 просмотров)
1
Модератор
9267 / 6045 / 2380
Регистрация: 21.01.2014
Сообщений: 25,820
Записей в блоге: 3
23.07.2014, 15:33 5
Цитата Сообщение от Витальич Посмотреть сообщение
Стараюсь ни когда не делать функционала удаления данных
А как на счет разрастания объемов БД?
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
23.07.2014, 15:36 6
Таблица1 - где удаляем, Таблица 2 - куда записываем.
создали новую запись в таблице 2 записали туда значения, удали запись в таблице 1
1
12 / 13 / 6
Регистрация: 13.11.2012
Сообщений: 295
23.07.2014, 15:45  [ТС] 7
НЕ могу понять что ты там сделал в проекте ?

Добавлено через 1 минуту
ну и как это реализовать?
C++
1
2
3
Form5->ADOTable1->Edit ();
Form5->ADOTable1->Insert();
ADOTable1->Delete ();
а как записать туда значение?

Добавлено через 6 минут
C++
1
2
3
4
Form5->ADOTable1->Edit ();
Form5->ADOTable1->Insert();
ADOTable1=Form5->ADOTable1;
ADOTable1->Delete ();
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
23.07.2014, 16:07 8
Лучший ответ Сообщение было отмечено names1995 как решение

Решение

Цитата Сообщение от D1973 Посмотреть сообщение
А как на счет разрастания объемов БД?
У меня есть мелкосерийный проект на FB (4 инсталляции у заказчика) где базы по 120 и более гигов. Проблем по обработке данных нет. Дисковая подсистема аппаратный рейд пять. Еже секундный инсерт около 800 параметров (правда дискреты пакую в int 32). К чему это я? Да кого сейчас волнует размер БД.

Добавлено через 20 минут
names1995, Вот Выдрал из проекта, в нем есть перенос данных из таблицы в таблицу.

Читаю данные из таблицы (Курсор стоит на выбранной записи:
C++
1
2
3
dataBD->p[0] = DataSourceIn->DataSet->FieldByName("ID")->AsInteger;
dataBD->p[1] = DataSourceIn->DataSet->FieldByName("S")->AsFloat;
dataBD->p[2] = DataSourceIn->DataSet->FieldByName("F")->AsInteger;
Запись(перенос) данных в новую таблицу.
C++
1
2
3
4
5
6
   DataSourceOut->DataSet->Append();
   DataSourceOut->DataSet->FieldByName("ID")->AsInteger = dataBD->p[0];
   DataSourceOut->DataSet->FieldByName("P1")->AsAnsiString = dataBD->p[1];
   DataSourceOut->DataSet->FieldByName("P2")->AsAnsiString = dataBD->p[2];
 
   DataSourceOut->DataSet->Post();
Удаляю в первой таблице
C++
1
DataSourceIn->DataSet->Delete();
Вам можно и напрямую без массива, у мены там дополнительная обработка.
Насчет перенести одной строчкой все столбцы не знаю, ни когда не надо было.
1
Модератор
9267 / 6045 / 2380
Регистрация: 21.01.2014
Сообщений: 25,820
Записей в блоге: 3
23.07.2014, 16:16 9

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
Да кого сейчас волнует размер БД.
Ну это я так... По старинке еще рассуждаю :D



Добавлено через 2 минуты
Цитата Сообщение от names1995 Посмотреть сообщение
НЕ могу понять что ты там сделал в проекте ?
А пытался?
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
23.07.2014, 16:21 10
D1973, у ТС ADOTable Ваш пример он может не понять. Мой вариант тоже не айс, но ближе идеологически.
0
Модератор
9267 / 6045 / 2380
Регистрация: 21.01.2014
Сообщений: 25,820
Записей в блоге: 3
23.07.2014, 16:25 11
Цитата Сообщение от Витальич Посмотреть сообщение
у ТС ADOTable
Дык а у меня что? Тот же Access, те же компоненты TADOTable, TADOQuery, TADOConnection.
А если Вы про
Цитата Сообщение от D1973 Посмотреть сообщение
такой хороший компонент как TBatchMove
, то это я так упомянул, я его всегда поминаю, когда аналогичную задачу делать приходится
2
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
23.07.2014, 16:28 12
D1973, У Вас сделано через TADOQuery, а ТС скорей всего не знает его, по крайней мере он о нем не упоминал в вопросе.
Цитата Сообщение от D1973 Посмотреть сообщение
TBatchMove
ни когда не юзал (не знал), даже в темные времена BDE
1
D1973
23.07.2014, 16:41
  #13

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
ТС скорей всего не знает его
Ну, судя по соседним темам на форуме - знаком хотя бы в общих чертах

0
12 / 13 / 6
Регистрация: 13.11.2012
Сообщений: 295
24.07.2014, 11:35  [ТС] 14
Попытаюсь потом еще раз, спасибо вам ) будут вопросы обращусь

Добавлено через 17 часов 9 минут
Цитата Сообщение от Витальич Посмотреть сообщение
(Курсор стоит на выбранной записи:
как мне курсор на выбранную запись поставить?
C++
1
2
3
4
5
ADOTable1-> ADOTable1->FieldByName("ÔÈÎ")->AsString;
ADOTable1-> = ADOTable1->FieldByName("Íîìåð äîãîâîðà")->AsString;
ADOTable1-> = ADOTable1->FieldByName("Àäðåñ")->AsString;
ADOTable1-> = ADOTable1->FieldByName("Äîìàøíèé òåëåôîí")->AsString;
ADOTable1-> = ADOTable1->FieldByName("Äàòà ïîäêëþ÷åíèÿ")->AsInteger;
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
24.07.2014, 11:43 15
У Вас Grid(таблица) подключен? Если да, то через него и устанавливаете. Для управления из кода, есть методы First(), Next() итд
1
12 / 13 / 6
Регистрация: 13.11.2012
Сообщений: 295
24.07.2014, 11:54  [ТС] 16
да, т.е оно будет как-то вот так.

C++
1
2
3
4
5
ADOTable1->First () = ADOTable1->FieldByName("ФИО")->AsString;
ADOTable1->First () = ADOTable1->FieldByName("Номер договора")->AsString;
ADOTable1->First () = ADOTable1->FieldByName("Адрес")->AsString;
ADOTable1->First () = ADOTable1->FieldByName("Домашний телефон")->AsString;
ADOTable1->First () = ADOTable1->FieldByName("Дата подключения")->AsInteger;
а как я метод буду приравнивать ?
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
24.07.2014, 12:08 17
C++
1
2
3
4
5
6
ADOTable1->First ();  // Перешли к первой записи в таблице 1
ADOTable2->Append(); // Открыли датасет в таблице 2 на вставку новой записи.
ADOTable2->FieldByName("ФИО")->AsString = ADOTable1->FieldByName("ФИО")->AsString;
ADOTable2->FieldByName("Еще поля")->AsString = ADOTable1->FieldByName("Еще поля")->AsString;
ADOTable2->Post(); // Фиксируем данные в таблице 2
ADOTable1->Delete(); // Удаляем данные из таблице 1
Я ни когда не работал с ADO, пример который я привел из своего проекта использует таблицу MIDAS, там я работаю не с самой таблицей, а датасетом
Цитата Сообщение от Витальич Посмотреть сообщение
DataSourceOut->DataSet->Append();
Возможно и в ADO так надо, тогда код для переноса/удаления будет выглядеть так:
C++
1
2
3
4
5
6
ADOTable1->DataSet->First ();  // Перешли к первой записи в таблице 1
ADOTable2->DataSet->Append(); // Открыли датасет в таблице 2 на вставку новой записи.
ADOTable2->DataSet->FieldByName("ФИО")->AsString = ADOTable1->DataSet->FieldByName("ФИО")->AsString;
ADOTable2->DataSet->FieldByName("Еще поля")->AsString = ADOTable1->DataSet->FieldByName("Еще поля")->AsString;
ADOTable2->DataSet->Post(); // Фиксируем данные в таблице 2
ADOTable1->DataSet->Delete(); // Удаляем данные из таблице 1
1
12 / 13 / 6
Регистрация: 13.11.2012
Сообщений: 295
24.07.2014, 12:41  [ТС] 18
Вот так работает, спасибо )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
 
Form5->ADOTable1->Append();
Form5->ADOTable1->FieldByName("ÔÈÎ")->AsString = ADOTable1->FieldByName("ÔÈÎ")->AsString;
Form5->ADOTable1->FieldByName("Íîìåð äîãîâîðà")->AsString = ADOTable1->FieldByName("Íîìåð äîãîâîðà")->AsString;
Form5->ADOTable1->FieldByName("Àäðåñ")->AsString = ADOTable1->FieldByName("Àäðåñ")->AsString;
Form5->ADOTable1->FieldByName("Äîìàøíèé òåëåôîí")->AsString = ADOTable1->FieldByName("Äîìàøíèé òåëåôîí")->AsString;
Form5->ADOTable1->Post();
ADOTable1->Delete();
 
 
 
 
}
0
24.07.2014, 12:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2014, 12:41
Помогаю со студенческими работами здесь

Как запретить удаление строки в DataGridView, если пользователь не выбрал ни одной строки?
Здравствуйте! У меня есть datagridview и кнопка удаления записи на форме. Данные в datagridview...

Перемещение выбранных ячеек на другой лист и после удаление строки
Здравствуйте, подскажите, пожалуйста, как можно усовершенствовать макрос. Сейчас он перемещает из...

Вывод одной строки из базы
Подскажите, как вывести из базы на экран одну строку, id строки известен. Как вывести данные всех...

Удаление строки из базы
while ( ($cat = mysqli_fetch_assoc($result))) { echo '<a href="1190.php?id=' .$cat....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru