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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.04.2013, 08:24   #1
SuicideVodka
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 17
Восклицание Запрос по дате через Datatimepicker

Доброего времени суток! такая проблема: у меня есть база данных в ней поле Дата_приема типа дата/время, и 2 datatimepicker и adoQuery и вот такой код:

Код:
DataModule3.qry1.Active:= False;
DataModule3.qry1.SQL.Clear;
dataModule3.qry1.Parameters.ParseSQL(dataModule3.qry1.SQL.Text, true);
DataModule3.qry1.Parameters[0].Value:=dtp1.DateTime;
DataModule3.qry1.Parameters[1].Value:=dtp2.DateTime;
DataModule3.qry1.Active:= True;

сижу уже больше 3 дней, весь форум перерыл многое пробывал и то ошибка то вообще ничего не происходит!
в AdoQuery я сделал параметры и сам запрос происходит в SQL:
Код:
SELECT * FROM Основ WHERE [Дата_приема] between :d1 and :d2
Помогите! это мой дипломный проект!



переделал вот так:
Код:
begin
DataModule3.qry1.Active:= False;
DataModule3.qry1.SQL.Clear;
DataModule3.qry1.SQL.Text:='SELECT * FROM Основ WHERE [Дата_приема] between :d1 and :d2';
dataModule3.qry1.Parameters.ParseSQL(dataModule3.qry1.SQL.Text, true);
DataModule3.qry1.Parameters[0].Value:=dtp1.DateTime;
DataModule3.qry1.Parameters[1].Value:=dtp2.DateTime;
DataModule3.qry1.Active:= True;
end;
но теперть ошбики нету, но и поиск не исполняется! ПОМОГИТЕ!!!

From Stilet: Чтоб смайлов не было оформляй код по правилам тегом CODE по кнопке # на панели инструментов редактора поста.

Последний раз редактировалось Stilet; 21.04.2013 в 09:38.
SuicideVodka вне форума
Старый 21.04.2013, 09:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то ошибка то вообще ничего не происходит!
Ошибка я так понимаю verbotten?
Насчет "ничего не происходит": нет таких диапазонов дат в твоей таблице.
I'm learning to live...
Stilet вне форума
Старый 21.04.2013, 10:38   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

datatimepicker кроме даты еще и время возвращает. Возможно из-за этого. Время убрать можно так
Код:
var dt: TDateTime;

dt:=Trunc(dtp1.DateTime);
DataModule3.qry1.Parameters[0].Value:=dt;
dt:=Trunc(dtp2.DateTime);
DataModule3.qry1.Parameters[1].Value:=dt;
PS и я не был бы так сильно уверен, что Parameters[0] именно то, что нужно. Лучше ParamByName
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.04.2013 в 10:41.
Аватар вне форума
Старый 21.04.2013, 13:13   #4
SuicideVodka
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
datatimepicker кроме даты еще и время возвращает. Возможно из-за этого. Время убрать можно так
Код:
var dt: TDateTime;

dt:=Trunc(dtp1.DateTime);
DataModule3.qry1.Parameters[0].Value:=dt;
dt:=Trunc(dtp2.DateTime);
DataModule3.qry1.Parameters[1].Value:=dt;
PS и я не был бы так сильно уверен, что Parameters[0] именно то, что нужно. Лучше ParamByName
Увы но все тоже самое что и было!

а как понять что нет таких диапозонов! у меня вот сейчас начало выводить но почему то некоректно! например диапозон в 2 года с 2011 по 13 а не ишет ничего! а сделаю поменьше ищет но некорректно потом!

еще заметил что когда ставлю 01.02.2012 он выводит все а когда 11.02.2012 вообще ничего как будто он не понимает число больше 9!

Последний раз редактировалось Stilet; 21.04.2013 в 13:32.
SuicideVodka вне форума
Старый 21.04.2013, 13:34   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как понять что нет таких диапозонов!
Посмотреть в таблице. Есть ли записи у которых даты между указанными тобой в таймпикерах.
Возможно попробовать заменить between на
Код:
[Дата_приема]>=:d1 and [Дата_приема]<=:d2'
I'm learning to live...
Stilet вне форума
Старый 21.04.2013, 13:39   #6
SuicideVodka
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 17
По умолчанию

нет тоже не получается я уже думал сделать просто отчеты за год и за месяц отдельно но не помню как это сделать может у кого код завалялся????
SuicideVodka вне форума
Старый 21.04.2013, 13:47   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
может у кого код завалялся?
У каждого своя схема отчетов.
Цитата:
тоже не получается
Значит нет такой даты. Как вариант для более точной проверки:
Код:
begin
DataModule3.qry1.Active:= False;
DataModule3.qry1.SQL.Clear;
DataModule3.qry1.SQL.Text:='SELECT * FROM Основ WHERE [Дата_приема] between '
+QuotedStr(formatdatetime('yyyy-mm-hh',dtp1.DateTime))+' and '
+QuotedStr(formatdatetime('yyyy-mm-hh',dtp2.DateTime))+';

DataModule3.qry1.Active:= True;
end;
Если и тут облом значит ищи проблему в своей БД. Набери подобный запрос в программе, которая твоей БД умеет управлять графически (Toad, MS Manager, Server Studio...)
I'm learning to live...
Stilet вне форума
Старый 21.04.2013, 15:28   #8
SuicideVodka
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 17
По умолчанию

Оно работает но показывает только ближайщие даты! но а если делать диапазон больше то пусто!

Я помню просто делал запрос какой то! что там чисто отчеты были за месяц и за год а как сделать не помню!

Кстати а может ли быть такое что у мея параметры d1 и d2 формата tdatatime а вот tdata никак не ставится!

И еще через что лучше осуществлять внесение диапазона через editmack или же datatimepicker?

Последний раз редактировалось Stilet; 21.04.2013 в 15:57.
SuicideVodka вне форума
Старый 21.04.2013, 15:59   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но а если делать диапазон больше то пусто!
Значит нет таких дат в табилце.
Цитата:
там чисто отчеты были за месяц и за год а как сделать не помню!
СУБД какая?
Цитата:
а может ли быть такое
В твоем случае врядли. Я бы даже сказал твердое НЕТ.
Цитата:
через что лучше осуществлять внесение диапазона через editmack или же datatimepicker?
Не имеет значения.
I'm learning to live...
Stilet вне форума
Старый 21.04.2013, 16:04   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

чую диплом накроется тазиком медным

что за субд, где видно что не работает, где данные ?
где это все я вас спрашиваю?
eval вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по дате через запрос The_Immortal C++ Builder 3 05.05.2012 21:34
Запрос по дате VTA0215 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 31.01.2012 17:00
Запрос по дате Explosion БД в Delphi 3 02.06.2010 18:22
Запрос по дате DaMadQuest SQL, базы данных 0 06.04.2010 17:37
Запрос по дате ННС Помощь студентам 4 20.04.2009 19:30