| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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
используй Date_Format |
| Автор: skyboy 20.6.2006, 13:18 | ||
comtat, кажись, ты хотел написать так:
|
| Автор: 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 comtat, skyboy вам тоже полезно будет почитать |
| Автор: skyboy 20.6.2006, 15:20 |
| Alex, я понял намёк |
| Автор: Falkon 20.6.2006, 15:26 |
| база написана в Аксесе |
| Автор: comtat 21.6.2006, 07:52 |
| skyboy, спасибо за поправку я это и имел в виду. Alex, я опирался на функции MySql'я. Пример даты в студию |
| Автор: Alex 21.6.2006, 08:17 |
| comtat, skyboy вам тоже полезно будет почитать. После ваших ответов я бы сказал обязательно к прочтению Falkon, я думаю ответ на свой вопрос вы нашли по приведенным ссылкам выше, если нет, то скажите какими компонентами доступа пользуетесь. |
| Автор: bas 21.6.2006, 08:37 |
Насколько помню дата в нем заключаеться в ## |
| Автор: 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 22.6.2006, 11:30 |
| Если задаешь в инспекторе, тогда понятно почему первый раз работает. ADOQuery.SQL.Clear убивает параметр! Присваивай ему значение после присвоения текста запроса |