Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Выборка SQL по полю даты


Автор: Falkon 20.6.2006, 12:14
Кто нибудь может мне показать как выбрать записи по полю типа DateTime. по текстовым и числовым полям у меня нормально выбирает записи, а по дате не хочет пишет либо ошибка синтаксиса если я пишу так: 20.06.2006, а если я пишу:20/06/2006 то запрос выполняется, но данных не находит, хотя у меня несколька полей подходящих условию. Пишу запрос: SELECT * FROM MyBase WHERE Dt=20.06.2006 я вот незнаю может там необходимо указать параметр какойто или ещё чо 

Автор: comtat 20.6.2006, 12:21
А у тебя в таблице данные как выглядят так 20/08/2006 или так 20.08.2006??
Обычно как мне встречалась всегда 2006.08.20

Код

SELECT * FROM MyBase WHERE Dt=Date_Format('2006.08.20', '%y-%m-%d');
   

используй Date_Format  

Автор: skyboy 20.6.2006, 13:18
comtat, кажись, ты хотел написать так:
Код

SELECT * FROM MyBase WHERE Dt=Date_Format('2006.08.20', '%y.%m.%d');

smile 

Автор: bas 20.6.2006, 14:35
А что за БД? 

Автор: Alex 20.6.2006, 14:59
http://vingrad.ru/DELPHI-DLP-001473
http://vingrad.ru/DELPHI-DLP-001424
http://vingrad.ru/DELPHI-DLP-002580
comtatskyboy вам тоже полезно будет почитать  

Автор: skyboy 20.6.2006, 15:20
Alex, я понял намёк smile Но в данном случае функция Date_Format  - это SQL функция, выполняемая на стороне сервера(я, например, на MySQL ориентировался; о каком СУБД думал comtat, я не знаю), которая парсит строку в соотвествии с шаблоном и преобразует результат в DataTime-тип. Правда, я попутал. В MySQL такая функция называется "Str_to_Date" и имеет всё те же два агрумента: строка и формат.  

Автор: Falkon 20.6.2006, 15:26
база написана в Аксесе 

Автор: comtat 21.6.2006, 07:52
skyboy, спасибо за поправку я это и имел в виду.
Alex, я опирался на функции MySql'я.

Пример даты в студию  smile 
  

Автор: Alex 21.6.2006, 08:17
comtat, skyboy вам тоже полезно будет почитать. После ваших ответов я бы сказал обязательно к прочтению
Falkon, я думаю ответ на свой вопрос вы нашли по приведенным ссылкам выше, если нет, то скажите какими компонентами доступа пользуетесь. 

Автор: bas 21.6.2006, 08:37
Цитата(Falkon @  20.6.2006,  15:26 Найти цитируемый пост)
база написана в Аксесе  

Насколько помню дата в нем заключаеться в ## 

Автор: Falkon 21.6.2006, 09:00
все у меня получилось, но... этот запрос выполняется один раз. Я создал параметр в ADOQuery с типом DateTime и к его значению Value присваиваю переменную с датой, а потом в запросе пишу имя параметра как переменную. этот запрос отлично выполняется ровно один раз, потом либо выводит пустую таблицу либо выдает ошибку, она звучит примерно так: "ненайден параметр par1 (у меня так параметр называется)" 

Автор: comtat 21.6.2006, 09:36
Запрос в студию  

Автор: Savek 21.6.2006, 09:44
А лучше все манипуляции с ADOQuery в студию 

Автор: Falkon 21.6.2006, 10:27
да пожалуйста
strSQL:='SELECT Fam, Im, Otch, Gr, Dt, NomZad, TipZad, Oper, Zad, Popitka, Itog FROM MyBase WHERE ';
Формирование запроса:
case vib of
 1:strPole:='fam';
 2:strPole:='Gr';
 3:strPole:='Dt';
end;
strKrit:=edFilter2.Text;
ser.Q.Close;
if vib <> 3 then
 strSQL:=strSQL+strPole+'='+''''+strKrit+''''+' and '
else
begin
 q.Parameters.ParamByName('par1').Value:=StrToDate(strKrit);
 strSQL:=strSQL+strPole+'=:par1 and ';

запуск запроса:
ser.Q.Close;
ser.Q.SQL.Clear;
strSQL:=copy(strSQL,1,length(strSQL)-5);
ser.Q.SQL.Append(strSQL);
ser.Q.Open;
strSQL:='SELECT Fam, Im, Otch, Gr, Dt, NomZad, TipZad, Oper, Zad, Popitka, Itog FROM MyBase WHERE '; 

Автор: Savek 21.6.2006, 13:32
Не понятно почему он первый раз работает...
Насколько я помню порядок должен быть такой

With AdoQuery1 do begin
    SQL.Clear;
    SQL.Text:='что то с параметром';
    Parameters.ParamByName('par1').Value:=Value;
    Open;
end;

А у тебя значение параметра присваивается до того как он создан,
поэтому он и не найден

PS Куда подвалась кнопка Kod 

Автор: Falkon 22.6.2006, 10:15
Цитата(Savek @ 21.6.2006,  13:32)
Не понятно почему он первый раз работает...
Насколько я помню порядок должен быть такой

With AdoQuery1 do begin
    SQL.Clear;
    SQL.Text:='что то с параметром';
    Parameters.ParamByName('par1').Value:=Value;
    Open;
end;

А у тебя значение параметра присваивается до того как он создан,
поэтому он и не найден

PS Куда подвалась кнопка Kod

я параметр задаю не в процесе выполнения программы, а в процессе разработки, т.е. я его задаю не кодом, а в инспекторе 

Автор: Savek 22.6.2006, 11:30
Если задаешь в инспекторе, тогда понятно почему первый раз работает. 
ADOQuery.SQL.Clear убивает параметр!
Присваивай ему значение после присвоения текста запроса 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)