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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 15:47   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Выбор записей в DBGrid-e

У меня сделана связь, что когда выбираю запись в главной таблице, то в дочерних отображаются соответствующие строки. А как сделать, чтобы я осуществлял например множественный выбор и значения в дочерних копировались бы в DBGrid? С помощью флажков? А как? Можете что-нибудь предложить?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.05.2009, 16:06   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

SQL запрос + Union вам поможет
vovk вне форума Ответить с цитированием
Старый 16.05.2009, 16:09   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

vovk, а можно пример такого запроса плиз?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.05.2009, 16:18   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Если не ошибаюсь примерно так
Код:
Select * from ownertable ow left join childtable chl on ow.id=chl.id_owner
where ow.id=<ид записи1>
union
Select * from ownertable own left join childtable chld on own.id=chld.id_owner
where own.id=<ид записи2>
это если правильно вас понял

аа только таблицы не лефт а райт соеденить и ессно список требуемых полей для вывода написать иначе состав из 2 таблиц выйдет

Последний раз редактировалось vovk; 16.05.2009 в 16:29.
vovk вне форума Ответить с цитированием
Старый 16.05.2009, 16:44   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вот, нашел на этом форуме код, который Михалыч показал. Переделал под себя:
Код:
procedure TForm2.Button8Click(Sender: TObject);
var
 i,j:integer;
 s: string;
begin
 if DBGrid7.SelectedRows.Count > 0 then
  with DBGrid7.DataSource.DataSet do
  for i:=0 to DBGrid7.SelectedRows.Count - 1 do
     begin
      GotoBookmark(Pointer(DBGrid7.SelectedRows.Items[i]));
      for j:=0 to FieldCount - 1 do
       begin
        if (j > 0) then
         s:=s + '  |  ';
         s:=s + Fields[j].AsString;
       end;
     Form2.ListBox1.Items.Add(s);
     s:='';
     end;
end;
Этот код позволяет делать множественный выбор записей и добавление их в ListBox. А как его подправить, чтобы я выбирал записи в главной таблице, а в ListBox заносилась бы запись из дочерней таблицы?
P.S. Запрос попробую. Спасибо. А что на счет кода?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.05.2009, 16:58   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

извените конечно но листбокс и дбгрид это совершенно разный подход нужен, 1 содержит то что в него загрузят, второй то что в датасет есть. Сказали просто стринггрид дак там можно много всякого написать. Задача то ваша определитесь как нужно..
ЗЫ на счёт лист бокса сек через полчасика буду подправлю
vovk вне форума Ответить с цитированием
Старый 16.05.2009, 17:08   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Коллега, объясняю задачу поконкретнее . Есть таблица infa и таблица rezult. Они между собой связаны. Цель: выбрав запись в главной таблице infa, я получаю либо в ListBox, StringGrid строку, которая бы бралась из дочерней таблицы rezult, т.к. таблицы связаны. Также нужно, чтобы применяя код, приведенный мной выше, работал так, чтобы я мог выбирать разные записи из главной таблицы, а из дочерних бы брались соответствующие строки.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.05.2009, 18:23   #8
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
var
 i,j,y:integer;
 s: string;
begin
 if DBGrid7.SelectedRows.Count > 0 then
  //with DBGrid7.DataSource.DataSet do //это не про вас
  for i:=0 to DBGrid7.SelectedRows.Count - 1 do
     begin
      GotoBookmark(Pointer(DBGrid7.SelectedRows.Items[i]));
      datasetchild.filter:='id_owner='+DBGrid7.DataSource.DataSet.fieldbyname('id').asstring;
datasetchild.filtered:=true;
for y:=1 to   datasetchild.recordcount do 
  begin 
for j:=0 to datasetchild.FieldCount - 1 do 
       begin
        if (j > 0) then
         s:=s + '  |  ';
         s:=s + datasetchild.Fields[j].AsString;
       end;
     Form2.ListBox1.Items.Add(s);//form1 или 2 или 10 яж не знаю
     s:='';
  end;  
 end;
вот чтото типо этого. но имхо извращение... мож стоит подход к задаче изменить, записывать там в листчекбокс с главной счто нужно, а по ид строить список. Кстати всёже мож запрос проще динамически построить.
ЗЫ Помогло бы знание с какой БД работаем, и ессно компоненты, то есть что для доступа пользуем
(писал всё тут мог гдето ошибится)

Последний раз редактировалось vovk; 16.05.2009 в 18:39.
vovk вне форума Ответить с цитированием
Старый 16.05.2009, 18:50   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от vovk
записывать там в листчекбокс
ээ...чет не могу понять про какой компонент Вы говорите. Напишите название по-английски?
Цитата:
Сообщение от vovk
Помогло бы знание с какой БД работаем, и ессно компоненты, то есть что для доступа пользуем
БД Paradox. Компоненты Table, DataSource, DBGrid.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.05.2009, 18:54   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Извеняюсь не листчекбокс а чеклистбокс TCheckListBox
кстати с парадоксом в запросах много нужного не работает
vovk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Выбор колонок в dbgrid artemavd БД в Delphi 20 21.04.2009 08:55
Обработка записей C++ Mart Общие вопросы C/C++ 3 25.09.2008 22:41
Сохранение нескольких записей из DbGrid в базу Canadec БД в Delphi 5 06.09.2007 14:26