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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2012, 12:19   #1
Xakand_2009
Пользователь
 
Регистрация: 09.01.2010
Сообщений: 23
Восклицание Объединение двух запросов

Здравствуйте.

Имеется 2 запроса к одному набору данных в БД MS Access, с фильтром по сотруднику:

Код:
  SQL.Add('SELECT Анкета.Фамилия, Анкета.Имя, Анкета.Отчество, Анкета.[Дата занесения]');
  SQL.Add('[Места работы].[Дата поступления], [Места работы].[Место работы], [Места работы].[Дата увольнения], [Места работы].[Причина увольнения]');
  SQL.Add('FROM Анкета INNER JOIN [Места работы]');
  SQL.Add('ON Анкета.КодАнкеты=[Места работы].КодАнкеты');
  SQL.Add('Where Анкета.Фамилия Like '+QuotedStr(ListBox1.Items[ListBox1.ItemIndex]+'%'));
... и по дате занесения в базу:

Код:
  SQL.Add('SELECT Анкета.Фамилия, Анкета.Имя, Анкета.Отчество, Анкета.[Дата занесения]');
  SQL.Add('[Места работы].[Дата поступления], [Места работы].[Место работы], [Места работы].[Дата увольнения], [Места работы].[Причина увольнения]');
  SQL.Add('FROM Анкета INNER JOIN [Места работы]');
  SQL.Add('WHERE Анкета.[Дата занесения] between :first_date and  :last_date');
  Parameters.ParamByName('first_date').DataType:=ftDateTime;
  Parameters.ParamByName('last_date').DataType:=ftDateTime;
  Parameters.ParamByName('first_date').Value:=DateTimePicker1.DateTime;
  Parameters.ParamByName('last_date').Value:=DateTimePicker2.DateTime;
Каким образом можно объединить эти запросы, чтобы фильтр осуществлялся сразу по двум параметрам? Спасибо.
Разницы нет, когда не-с-чем сравнить!

Последний раз редактировалось Xakand_2009; 10.07.2012 в 12:24.
Xakand_2009 вне форума Ответить с цитированием
Старый 10.07.2012, 12:33   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
  SQL.Add('SELECT Анкета.Фамилия, Анкета.Имя, Анкета.Отчество, Анкета.[Дата занесения]');
  SQL.Add('[Места работы].[Дата поступления], [Места работы].[Место работы],);
  SQL.Add('[Места работы].[Дата увольнения], [Места работы].[Причина увольнения]');
  SQL.Add('FROM Анкета INNER JOIN [Места работы]');
  SQL.Add('ON Анкета.КодАнкеты=[Места работы].КодАнкеты');
  SQL.Add('Where Анкета.Фамилия Like '+QuotedStr(ListBox1.Items[ListBox1.ItemIndex]+'%'));
  SQL.Add('and Анкета.[Дата занесения] between :first_date and  :last_date');
Прик вне форума Ответить с цитированием
Старый 10.07.2012, 14:09   #3
Xakand_2009
Пользователь
 
Регистрация: 09.01.2010
Сообщений: 23
Восклицание

Цитата:
Сообщение от Прик Посмотреть сообщение
Код:
  ...
  SQL.Add('Where Анкета.Фамилия Like '+QuotedStr(ListBox1.Items[ListBox1.ItemIndex]+'%'));
  SQL.Add('and Анкета.[Дата занесения] between :first_date and  :last_date');
Совсем забыл про "and" Но исправленный вариант:

Код:
with ADOQuery1 do
 begin
  Active:=False;
  SQL.Clear;
  SQL.Add('SELECT Анкета.Фамилия, Анкета.Имя, Анкета.Отчество, Анкета.[Дата занесения]');
  SQL.Add('[Места работы].[Дата поступления], [Места работы].[Место работы],);
  SQL.Add('[Места работы].[Дата увольнения], [Места работы].[Причина увольнения]');
  SQL.Add('FROM Анкета INNER JOIN [Места работы]');
  SQL.Add('ON Анкета.КодАнкеты=[Места работы].КодАнкеты');
  SQL.Add('Where Анкета.Фамилия Like '+QuotedStr(ListBox1.Items[ListBox1.ItemIndex]+'%'));
  SQL.Add('and where Анкета.[Дата занесения] between :first_date and :last_date');
  Parameters.ParamByName('first_date').DataType:=ftDateTime;
  Parameters.ParamByName('last_date').DataType:=ftDateTime;
  Parameters.ParamByName('first_date').Value:=DateTimePicker1.DateTime;
  Parameters.ParamByName('last_date').Value:=DateTimePicker2.DateTime;
  Active:=True;
 end
выдаёт такую ошибку:


Как устранить данную ошибку? Спасибо.
Разницы нет, когда не-с-чем сравнить!
Xakand_2009 вне форума Ответить с цитированием
Старый 10.07.2012, 14:33   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Два WHERE зачем там?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.07.2012, 15:05   #5
Xakand_2009
Пользователь
 
Регистрация: 09.01.2010
Сообщений: 23
Хорошо

Цитата:
Сообщение от Аватар Посмотреть сообщение
Два WHERE зачем там?
Действительно! Удалил второе и всё заработало. Спасибо.
Разницы нет, когда не-с-чем сравнить!
Xakand_2009 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение запросов с группировкой KamillaKat Microsoft Office Access 2 24.08.2011 00:44
Объединение двух запросов KBO БД в Delphi 0 27.07.2011 02:25
объединение SCQ запросов mad_dog4 БД в Delphi 4 06.12.2010 14:13
Связка двух запросов shefus SQL, базы данных 1 11.11.2010 19:56
Объединение 2-х запросов SlavaSH БД в Delphi 6 28.12.2009 10:08