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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2014, 12:04   #1
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию Фильтрация много раз повторяющихся строк в DBGrid в Delphi

Доброе время суток! Функцией FormCreate в DBGrid SQL-запросом выводятся данные: Фамилия, Имя, Отчество, Номер телефона. Некоторые люди имеют несколько номеров телефона. Если я напишу так: 'select DISTINCT Фамилия, Имя, Отчество from Сотрудники', то одно повторение Фамилия, Имя, Отчество исчезнет, а остальные останутся.
Есть вопрос: как исключить повторение всех строк Фамилия, Имя, Отчество.

Например:

Было:
Иванов Иван Иванович 77070
Иванов Иван Иванович 73030
Иванов Иван Иванович 75050
Петров Петр Петрович 78080

Пишу:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.ADOQuery1.Close;
  Form1.ADOQuery1.SQL.Clear;
  Form1.ADOQuery1.SQL.Text:='select DISTINCT Фамилия, Имя, Отчество  from Сотрудники';
  Form1.ADOQuery1.Active:=true;
  Form1.ADOQuery1.Open;
end;
Выйдет:
Иванов Иван Иванович
Иванов Иван Иванович
Петров Петр Петрович

Должно быть:
Иванов Иван Иванович
Петров Петр Петрович



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Train-GT; 21.09.2014 в 06:12.
Train-GT вне форума Ответить с цитированием
Старый 20.09.2014, 12:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, если Вам нужны только фамилия, имя, отчество, без телефонов, то попробуйте такой код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add(' select Фамилия, Имя, Отчество  from Сотрудники ');
  ADOQuery1.SQL.Add('   group by Фамилия, Имя, Отчество ');
  ADOQuery1.SQL.Add('   order bt Фамилия, Имя, Отчество ');
  ADOQuery1.Open;
end;
во-вторых, учтите, что выполнять Form1.ADOQuery1.Active:=true; и Form1.ADOQuery1.Open; вместе не надо, это ОДНО и то же.
это всё равно, что два раза подряд написать
Form1.ADOQuery1.Open;
Form1.ADOQuery1.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2014, 06:16   #3
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию

Спасибо, работает! Только у вас там опечатка: order bt, а надо order by.
А еще вопрос: как автоматически подогнать колонки по ширине в DBGrid?
Train-GT вне форума Ответить с цитированием
Старый 21.09.2014, 10:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А попробуй так: http://delphiworld.narod.ru/base/res...d_columns.html
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2014, 11:00   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А еще вопрос: как автоматически подогнать колонки по ширине в DBGrid?
не уверен, что в DBGrid это есть...

но можно реализовать "ручками" - нужно пройтись по всем записям, найти по каждом столбцу максимальную длину поля, потом эту длину пересчитать в длину столбца (вычислить коэффициент самостоятельно в зависимости от шрифта).

Последний раз редактировалось Stilet; 21.09.2014 в 11:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2014, 06:17   #6
Train-GT
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 26
По умолчанию

Ну вы замудрили:
Код:
DBGrid1.Columns.Items[0].Width:=80;
Train-GT вне форума Ответить с цитированием
Старый 22.09.2014, 07:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Ну вы замудрили
А вопрос как стоял: как автоматически подогнать колонки по ширине. Не вижу в твоем решении ни автоматики, ни подгонки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
constructor вызывается много раз CeHTuJI Общие вопросы Delphi 10 26.08.2013 02:45
удалить много строк из listbox delphi SonicBob Помощь студентам 3 19.09.2011 10:46
Фильтрация повторяющихся записей euronymous SQL, базы данных 3 04.02.2010 15:17
фильтрация повторяющихся ячеек в DBGrid Evgenii БД в Delphi 1 02.08.2009 20:40
Открываеца форма много раз! KingSize Общие вопросы Delphi 8 18.05.2009 13:12