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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 20:36   #1
CRASH040
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 12
Восклицание Как убрать ненужные строки в запросе!

Здраствуйте проблема такая при запросе выводит каждую строку почему то аж по два раза! Как это исправить?

Код:

Procedure TForm1.CheckListBox5Click(Sender: TObject);
var
s:STRING;
i,k:integer;
begin
with Form1.ADOQuery2 do begin close;
k:=0;
SQL.Clear;
SQL.Add ('SELECT Вуз.[Вид обучения],[Дополнительная информация].Область,Город, Вуз.[Название вуза], Вуз.[Название специальности],Вуз.[Конкурс прошлого года], Вуз.[Плата за обучение],Вуз.[Форма обучения]');
SQL.Add (' FROM [Дополнительная информация], Вуз ');
s:='';
for i:=0 to CheckListBox5.Items.Count - 1 do
if CheckListBox5.Checked[i] then
begin
if k=0 then
s:=s+(' [вид обучения] ="'+CheckListBox5.Items[i]+'"')
ELSE
s:=s+(' OR [вид обучения] ="'+CheckListBox5.Items[i]+'"');
k:=1;
END;
if s<>'' then
SQL.Add(' where '+s+';');
Open;
Datasource1.dataset:=AdoQuery2;
end;
end;

Последний раз редактировалось CRASH040; 31.05.2011 в 20:41.
CRASH040 вне форума Ответить с цитированием
Старый 31.05.2011, 20:43   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

У вас записей в таблице [Дополнительная информация] видимо 3, а поскольку условие связи между таблицами [Вуз] и [Дополнительная информация] не задано, то и записи троятся. Условие задать во WHERE, а потом, если условие на вид обучения есть, то AND и в скобках условие на вид обучения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.05.2011, 20:54   #3
CRASH040
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
У вас записей в таблице [Дополнительная информация] видимо 3, а поскольку условие связи между таблицами [Вуз] и [Дополнительная информация] не задано, то и записи троятся. Условие задать во WHERE, а потом, если условие на вид обучения есть, то AND и в скобках условие на вид обучения
Нее там все нормально по одной записи! Когда вывожу через ADOQUERY то почему то их становится по две одинаковых а то и по три, а если по одной таблице то всё замечательно работает!
CRASH040 вне форума Ответить с цитированием
Старый 31.05.2011, 21:00   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от CRASH040 Посмотреть сообщение
Нее там все нормально по одной записи! Когда вывожу через ADOQUERY то почему то их становится по две одинаковых а то и по три, а если по одной таблице то всё замечательно работает!
Записей может и по одной, но всего их три и все они цепляются к каждой записи вуза
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.05.2011, 21:13   #5
CRASH040
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 12
По умолчанию

Напищи пожалуйста хоть примерно как это там прописать,а то я с запросами не очень разбираюсь!
CRASH040 вне форума Ответить с цитированием
Старый 31.05.2011, 21:22   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я не знаю как у вас связка осуществляется. Предположим это поле [Название вуза]. Поле с таким содержанием и, как правило для удобства пользования, с таким же названием должно быть и в таблице [Дополнительная информация]. Тогда запрос будет примерно такой
Код:
SELECT ...
  FROM [Дополнительная информация],Вуз
  WHERE Вуз.[Название вуза]=[Дополнительная информация].[Название вуза]
     AND (Вуз.[вид обучения]='блабла1' or Вуз.[вид обучения]='блабла2' OR ...)
Последняя строчка нужна только при наличии условия на вид обучения

PS Если в [Дополнительная информация] по одной записи, зачем вообще в отдельную таблицу выносить?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.05.2011 в 21:29.
Аватар вне форума Ответить с цитированием
Старый 31.05.2011, 21:48   #7
CRASH040
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 12
По умолчанию

Теперь такая фигня в этом месте и в select пишет пропущен оператор

WHERE Вуз.[Название вуза]=[Дополнительная информация].[Название вуза] в этом месте

Последний раз редактировалось CRASH040; 31.05.2011 в 22:01.
CRASH040 вне форума Ответить с цитированием
Старый 01.06.2011, 21:27   #8
CRASH040
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 12
Вопрос Checklistbox как убрать повторяющиеся строки

Здраствуйте! с этим всем я разобрался подскажите пожалуйста как сделать следующее: при запросе вывожу информацию из поля таблицы в checklistbox в items там у меня выводит одинаковые названия как сделать чтоб было по одному и не было повторений.

Вот код:

Код:
procedure TForm1.CheckListBox3Enter(Sender: TObject);
begin
  checklistbox3.items.clear;
  adoquery2.first;
  while not adoquery2.eof do
  begin
    checklistbox3.items.add(adoquery2.fieldbyname('Область').asstring);
    adoquery2.next;
  end;
end


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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.06.2011 в 22:02.
CRASH040 вне форума Ответить с цитированием
Старый 01.06.2011, 22:08   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) подобная задача на форуме решалась.. думаю, что поиском найдёте её.

2) вкратце, есть два подхода. 1-й - простой, правильный, понятный, эффективный - использовать в запросе группировку, чтобы устранить повторы (кстати, там же и сортировку можно приладить, в случае необходимости...)
это так:
Код:
  checklistbox3.items.clear;
  adoquery2.Close;
  adoquery2.SQL.Text := 'Select Область from ВашаТаблица group by Область';
  adoquery2.Open;
  // после Open мы и так не первой записи... adoquery2.first;
  while not adoquery2.eof do
...
 дальше всё как у вас
и 2-й подход. Если запрос по какой-то причине нельзя менять, тогда перед добавлением просто проверять, есть ли такая запись в checklistbox3.items....
примерно так:
Код:
  while not adoquery2.eof do
  begin
    if checklistbox3.items.IndexOf(adoquery2.fieldbyname('Область').asString)<0 then
        checklistbox3.items.add(adoquery2.fieldbyname('Область').asString);
    adoquery2.next;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2011, 22:29   #10
CRASH040
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 12
Хорошо

Serge_Bliznykov

Благодарю за помощь))
CRASH040 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в комбобоксе скрыть ненужные строки. voverrr Общие вопросы Delphi 8 08.03.2011 18:03
Как убрать мусор до строки Alyonka_v Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.09.2009 13:28
как из строки ТМемо удалить ненужные символы MixanMM Общие вопросы Delphi 3 10.06.2009 13:49
Как убрать перевод строки? Biowulf86 Помощь студентам 2 25.03.2008 11:05