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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 15:21   #1
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию SQL фильтр и сравнение двух дат

Есть таблица EXcel к которой подключаюсь через ADO. В таблице есть поля "Дата прихода" и "ФИО Консультанта"
Нужно отобрать все приходы которые соответствуют сегодняшнему дню, или были до сегодняшнего дна, а также приходы конкретного консультанта.
Пытаюсь сделать выборку по дате таким образом:
Код:
try
ADOConnection2.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Mode=Read;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"';
ADOConnection2.Connected:=true;
ADOQuery2.Active:=False;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:='SELECT * FROM [Result$] WHERE [Дата прихода]<=:MyDate';
ADOQuery2.Parameters.ParamByName('MyDate').Value:=Date();
ADOQuery2.Open;
ADOQuery1.Active:=True;
except
on e:Exception do
end;
Даты выбираются но некорректно.
Например сегодня 17.12.2013, а выбираются все даты которые меньше или равны 17. Тоесть может быть и 16.01.2014 и 15.02.2014 и т.д.
Помогите решить проблему. Что не так делаю.
И второй вопрос как построить запрос, что бы одновременно выполнялось условие
Код:
'SELECT * FROM [Result$] WHERE [Дата прихода]<=:MyDate';
и
Код:
'SELECT * FROM [Result$] WHERE [ФИО Консультанта]=:'Иванов В. П.'';
Зарание благодарен.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 17.12.2013, 15:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Например сегодня 17.12.2013, а выбираются все даты которые меньше или равны 17.
и
Цитата:
Нужно отобрать все приходы которые соответствуют сегодняшнему дню, или были до сегодняшнего дна
Что-то меня в этих двух фразах смущает - ты же как раз то что хочешь получаешь, или как?
Цитата:
что бы одновременно выполнялось условие
Код:
SELECT * FROM [Result$] WHERE [Дата прихода]<=:MyDate and [ФИО Консультанта]='Иванов В. П.'
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2013, 15:33   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Есть таблица EXcel
поле (столбец) в Excel имеет формат(тип) строка, а не дата.
а для строк такое сравнение имеет место быть.
Цитата:
Например сегодня 17.12.2013, а выбираются все даты которые меньше или равны 17. Тоесть может быть и 16.01.2014 и 15.02.2014 и т.д.
Цитата:
что бы одновременно выполнялось условие
Код:
where <условие 1> and <условие 2> or <условие 3> ....
P.S. может помочь принудительный перевод строка ->дата при формировании запроса, но как это реализовать в ADO +Excel не знаю.
или же преобразование исходного файла (тип колонки до нужного типа)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.12.2013 в 15:39.
evg_m вне форума Ответить с цитированием
Старый 17.12.2013, 20:09   #4
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Преобразование исходного файла не помогло.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 17.12.2013, 20:20   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Цитата:
поле (столбец) в Excel имеет формат(тип) строка, а не дата.
это если формат не указать
eval вне форума Ответить с цитированием
Старый 17.12.2013, 21:23   #6
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
это если формат не указать
Как указать формат в запросе? В самом Excel формат "Дата" не помогает.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 24.12.2013, 19:53   #7
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Люди помогите пожалуйста. Никак не могу разобраться. Нашел статью как перевести строковый тип в дату
sql.az/index.php?option=com_content&view=a rticle&id=74&lang=ru
Пробую так
Код:
SELECT * FROM [Result$] WHERE to_date ([Дата прихода],''dd.mm.yyyy'')<=:MyDate and [ФИО Консультанта]='Иванов В. П.'
Выходит ошибка "Не определенная функция TO_DATE в выражении"
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 25.12.2013, 14:04   #8
SunnyCrash
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 45
Смущение думаю все понятно

procedure TForm1.Button3Click(Sender: TObject);
var s:integer;
i:integer;
begin
try
with ADOQuery3 do
begin
SQL.Clear;
SQL.Add('SELECT* FROM Таблица WHERE (Дата>=:D1) and (Дата<=:D2)');
Parameters.ParamByName('D1').Value: =FormatDateTime('dd.mm.yyyy',DateTi mePicker1.Date);
Parameters.ParamByName('D2').Value: =FormatDateTime('dd.mm.yyyy',DateTi mePicker2.Date);
Active:=True;
//ADOTable3.Active := false;
DataSource3.DataSet := ADOQuery3;
ADOQuery3.Connection := Self.ADOConnection1;
ADOQuery3.Active:=true;
ADOQuery3.ExecSQL;
end;
finally
begin
s:=0;
for i:=0 to ADOQuery3.RecordCount-1 do
s:=s+1;
ShowMessage('Название таблицы: '+ADOTable3.TableName+#13+'Количест во записей: '+IntToStr(s));

end;
end;
end;

Последний раз редактировалось SunnyCrash; 25.12.2013 в 14:07.
SunnyCrash вне форума Ответить с цитированием
Старый 25.12.2013, 14:35   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Нормально фильтруется
Код:
SELECT F1,F2 FROM [Лист1$] WHERE F1>#11/25/2013#
В таблице первая колонка в формате дата дд.мм.гггг

SunnyCrash, ваш код для Excel годится? Не смешите
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.12.2013 в 14:40.
Аватар вне форума Ответить с цитированием
Старый 26.12.2013, 15:14   #10
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Нормально фильтруется
Код:
SELECT F1,F2 FROM [Лист1$] WHERE F1>#11/25/2013#
В таблице первая колонка в формате дата дд.мм.гггг

SunnyCrash, ваш код для Excel годится? Не смешите
В том то и дело что в Excel колонка не в формате дата а в строковом формате. Мне нужно при выборке самому эту колонку в дату перевести и тогда уже сравнивать.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение дат Praud Помощь студентам 22 22.11.2013 14:06
Фильтр по неравенству дат, в чем ошибка? Avalon_Albio Помощь студентам 4 27.06.2013 07:43
Сравнение дат! RSmile БД в Delphi 0 28.04.2010 20:40
Сравнение дат DimOn4Ik БД в Delphi 5 27.04.2010 19:30
C#: Сравнение дат Veiron Общие вопросы .NET 1 08.06.2009 23:32