Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2008, 18:57   #1
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию Множественное перемещение в двух таблицах

Помогите пожалуйста разобраться вот с какой проблемой: Имеется две таблицы, связанные по ID. В первой таблице есть список футбольных команд и их номера, по которым связываются футболисты из другой таблицы. Соответственно футболисты могу перемещаться из одной команды в другую. Подскажите как сделать одновременное перемещение сразу нескольких футболистов из одной команды в другую, у меня не получается что-то. Использую ADOQuery и DBGrid.
Заранее спасибо
Arteom вне форума Ответить с цитированием
Старый 15.07.2008, 22:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пусть в таблице Football_men есть поле FootBall_command_Id - ссылка на команду, в которую футболист входит и, например, возраст футболиста в MEN_AGE, тогда перенести всех футболистов моложе 25 лет из всех команд в новую команду (у которой ID = NewCommand_ID ):

Код:
update Football_men
  set FootBall_command_Id = NewCommand_ID
   where Men_Age < 25
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.07.2008, 00:08   #3
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию

спасибо, но это не совсем то о чем я спрашивал. Как сделать если у меня в одной команде много футболистов, у них общий FootBall_command_Id, но у всех разные имена и нет больше никаких общих признаков, типа возраста? Да и как организовать множественную выборку в DBGrid тоже не очень понятно
Arteom вне форума Ответить с цитированием
Старый 16.07.2008, 10:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Arteom
Как сделать если у меня в одной команде много футболистов, у них общий FootBall_command_Id, но у всех разные имена и нет больше никаких общих признаков
Угу... кажется я начинаю понимаю - у Вас проблема в том, что Вы не понимаете что и как надо сделать? Или просто не можете выразить свою мысль и донести до нас?...

смотрите. в таблице футболисты у Вас есть записи.
Пусть в команде 1 (id = 1) у Вас 35 человек. Все с разными именами. Так?
Вопрос - кого (сколько человек) нужно перенести в команду 2 ??? Вот если бы Вам сказали переведи несколько человек из команды 1 в команду 2 - Вы бы спросили - сколько человек надо перевезти, по какому признаку их отобрать (по алфавиту, например, или просто хаотично - случайным образом...)

и ещё. предвидя следущий Ваш вопрос - сразу укажите какую СУБД (включая версию) Вы используете - потому что начнуться нюансы - в каждой СУБД есть свои тонкости в SQL/DML диалектах...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.07.2008, 10:17   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Кстати, если всех из команды 1 надо перебросить в команду 2 то это проще паренной репы:
Код:
update Football_men
  set FootBall_command_Id = 2
   where FootBall_command_Id = 1;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.07.2008, 12:09   #6
ЛомиК
Пользователь
 
Регистрация: 09.07.2008
Сообщений: 66
По умолчанию

Помоему вот то, что вам нужно -
http://www.delphisources.ru/pages/so...cy-dbgrid.html
Полюбому вам нужно както указывать имена тех, кого нужно переместить, иначе никак. А уже выделеннных перемещать куда укажите.
Тоесть одновременно открыть две таблицы или более название таблиц соответствует названию команд, а в полях таблицы списки игроков с чекбоксами против каждого. Еще можно поставить радиокнопку против названия команды с возможностью одиночного выбора а внизу кнопку переместить.
Расставляем галочки против имен игроков, указываем команду, куда переместить, давим кнопку - переместить, кто может быстро написать обработчики, пожалуйста, мне самому интересно.

Или если это все отображать в одной таблице, то в первой строке указывать название команды, а в остальных имена игроков, первой строке установить запреты на перемещение и на редактирование и в ней же чекбокс выбора команды, разумеется с одиночным выбором среди всех команд(столбцов таблицы).

Кстати при такой организации игроков можно чекбоксить в разных столбцах(с разных команд) и перенаправлять в одну из выбранных. И еще потребуется кнопка многоуровневой отмены с привязкой по дате перемещения, заодно будете знать, когда кто и куда перемещался, ведь если что-то быстро и легко делается, возрастает вероятность ошибки пользователя.

Последний раз редактировалось ЛомиК; 16.07.2008 в 12:30. Причина: Добавление
ЛомиК вне форума Ответить с цитированием
Старый 16.07.2008, 12:58   #7
ЛомиК
Пользователь
 
Регистрация: 09.07.2008
Сообщений: 66
По умолчанию

Интересен был бы еще один вариант, только как такое реализовать я вообще незнаю.
Назначить клавишу, при удержании которой онеклик мыши будет выделять нужные ячейки и перемещать их содержимое в промежуточную таблицу, а после процедуры такого выделения нажав другую гарячую кнопку, указать мышой на нужный столбец, куда переписать содержимое этой промежуточной таблицы или нечто в этом роде с использованием буфера обмена, помоему это был-бы самый быстрый вариант таких операций.
ЛомиК вне форума Ответить с цитированием
Старый 16.07.2008, 16:59   #8
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию

ЛомиК, спасибо за советы и за ссылку, очень интересный там компонент, обязательно им как-нибудь воспользуюсь.
Serge_Bliznykov, вы правы, я не совсем понимал как сделать то, что задумал отсюда и некорректно сформулированный вопрос.
В общем сделал так: У DBGridа поставил dgMultiSelect = true, что позволило выделять несколько записей для перемещения. Проблема была как раз в том, чтобы получить список значений всех выбранных записей.

Код:

for i:=0 to Men_Table.SelectedRows.Count-1 do
begin
Men_Table.DataSourse.DataSet.GoToBo okmark(pointer(Men_Table.SelectedRo ws[i]));
str := 'Update Men_Table SET Command_ID = newCommandID WHERE Men_ID = '''+Men_Table.Columns.Items[2].Field.AsString+'''';
ADOConnection1.Execute(str);
end;

Еще раз всем спасибо за помощь
Arteom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цветовая гамма в таблицах ГЫнок Помощь студентам 6 28.10.2008 10:55
Поиск изменений в Таблицах Pabelu Microsoft Office Excel 3 26.04.2008 17:57
Регистр в таблицах БД Alexij БД в Delphi 3 17.04.2008 13:38
Удаление в связаных таблицах ADO Alexsandr БД в Delphi 7 18.02.2008 23:15