![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не работает запрос при использовании параметров в ADO [D7, MSSQL]
Dysan © (2004-12-28 14:01:00)Почему запрос вот такой работает на ура
GetBaza('Select * From BazaPred Where Time_bg>='+ku+'2003-12-09'+ku+' AND Time_end<='+ku+'2003-12-09'+ku);
А такой не отрабатывает и возвращает пустой результата!
ADOQ.Parameters.Clear;
ADOQ.Parameters.AddParameter.Name:='VD1';
ADOQ.Parameters.ParamByName('VD1').Value:=StrToDate('2004-12-09');
GetBaza('Select * From BazaPred Where Time_bg>=:VD1 AND Time_end<=:VD1');
Хотя суть их одна и таже! Но мне нужно чтобы работал второй вариант запроса!
Dysan (2004-12-28 15:43:00) [1]спасибо! вроде заработало!
Ольга (2004-12-28 15:41:00) [2]У вас поля Time_bg, Time_end время, отличное от 00:00:00 содержат? Если да, то нужно переформировать условие Time_end < @d1+1
Stanislav (2004-12-28 15:26:00) [3]Плохиш © (28.12.04 15:17) [16]
Правильно !
Можно так:
Declare @d1 datetime
Set @d1 = :VD1
'Select * From BazaPred Where Time_bg>=@d1 AND Time_end<=@d1');
Плохиш (2004-12-28 15:17:00) [4]
'Select * From BazaPred Where Time_bg>= :VD1AND Time_end<= :VD1');
это два разных параметра! Соответственно инициализировать надо оба.
Stanislav (2004-12-28 15:07:00) [5]К стати если в тип параметра ftDateTime, то дату можно записывать в привычном формате mm.dd.yy
Dysan (2004-12-28 15:04:00) [6]нет. бодяга не из за GetBaza. я уже все в одном месте пишу. всё тоже.
Dysan (2004-12-28 14:58:00) [7]собственно в хелпе написано что дата не целое число а
type TDate = TDateTime;
type TDateTime = type Double;
пока так у меня ничего не получилось.
не пробовал разве что только воспользоваться SET DATEFORMAT
только правда потому что никогда еще им не пользовался.
может будут еще идеи почему так проиходить и что поробовать?
Stanislav (2004-12-28 14:57:00) [8]Дату можно передать в стандарте ISO: '20041231'
Строка без всяких разделителей, и MSSQL это поймет !
Sergey13 (2004-12-28 14:55:00) [9]А мне кажется (я с АДО не работал), что тут бодяга из-за GetBaza. Такое ощущение, что параметр задается в одном месте, а запрос выполняется в другом, с нуловым параметром.
Соловьев (2004-12-28 14:51:00) [10]но ведь я подуаю ее в формате просто real !
1. дата - целое число.
2. разницу чувствуешь - 2001-03-04 и 2001-04-03?
Stanislav (2004-12-28 14:50:00) [11]Эта строчка здесь лишняя
ADOQ.Parameters.AddParameter.Name:='VD1';
Dysan (2004-12-28 14:50:00) [12]строкой я дату тут написал для примера
передаю я ее сразу в формате TDateTime
Dysan (2004-12-28 14:48:00) [13]т.е. вы хотите сказать что я просто не в том формате подаю дату?
но ведь я подуаю ее в формате просто real ! а уже там на той стороне (я правда не знаю где конкретно) эти цифорки должны перекодироваться в нужный формат? или я не прав?
Ольга (2004-12-28 14:46:00) [14]Так если дата передается жесткой строкой '2004-12-09' значит это кому-нибудь нужно... Впрочем полностью согласна с г.Соловьевым
Соловьев (2004-12-28 14:39:00) [15]StrToDate('2004-12-31');
Зачем? Нужно нормальные компоненты юзать DateTimePicker хотя-бы
И не надо будет делать формат на сервере
Ольга (2004-12-28 14:31:00) [16]А вы уверены, что Delphi правильно интерпритирует формат даты.
Попробуйте
ADOQ.Parameters.ParamByName('VD1').Value:=StrToDate('2004-12-31');
Нужно сделать SET DATEFORMAT
Александр Иванов (2004-12-28 14:20:00) [17]Вот так попробуй:
ADOC.Open;
ADOQ.SQL.Clear;
ADOQ.SQL.Add(query);
ADOQ.Parameters.ParamByName('VD1').Value:=StrToDate('2004-12-09');
ADOQ.Open;
Dysan (2004-12-28 14:06:00) [18]эээ
да не важно там происходит обычное подключение и выполнение запроса
ADOC.Open;
ADOQ.SQL.Clear;
ADOQ.SQL.Add(query);
ADOQ.Open;
ничего особенного.
Александр Иванов (2004-12-28 14:04:00) [19]А что за процедура GetBaza?