Текущий архив: 2002.10.14;
Скачать: CL | DM;
Вниз
Борюсь с запросом в ADOQuery - проблема с датой Найти похожие ветки
← →
RDA (2002-09-21 10:55) [0]procedure TfmFilter.SetFilter;
const
Text="SELECT N_PLAT, NOMER, DATA, NAZV_P, RRAX_P, NAZV_O, RRAX_O, SUMA, PRIZN FROM PLAT WHERE (P_PRED=";
var
Str:String;
begin
with DM do
begin
QueryFilter.Active:=False;
QueryFilter.SQL.Clear;
if ENazv_P.Text<>"" then Str:=Str+" AND (NAZV_P="""+ENazv_P.Text+""")";
if ERRax_P.Text<>"" then Str:=Str+" AND (RRAX_P="""+ERRax_P.Text+""")";
if ENazv_O.Text<>"" then Str:=Str+" AND (NAZV_O="""+ENazv_O.Text+""")";
if ERRax_O.Text<>"" then Str:=Str+" AND (RRAX_O="""+ERRax_O.Text+""")";
//Ошибка
if Start_D.Text<>"" then Str:=Str+" AND (DATA>="+Start_D.Text+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA<="+Stopt_D.Text+")";
QueryFilter.SQL.Add(Text+PREDN_PRED.AsString+")"+Str);
QueryFilter.Active:=True;
end;
end;
Пробовал так
if Start_D.Text<>"" then Str:=Str+" AND (DATA>="+"#"+Start_D.Text+"#"+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA<="+"#"+Stopt_D.Text+"#"+")";
Ошибок нет но записи соответствующие условию не отбираються
Так ошибка
if Start_D.Text<>"" then Str:=Str+" AND (DATA>="+"#"+FormatDateTime("mm.dd.yyyy",Start_D.Date)+"#"+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA<="+"#"+FormatDateTime("mm.dd.yyyy",Stopt_D.Date)+"#"+")";
← →
Balu (2002-09-21 11:20) [1]Попробуй так:
FormatDateTime(" yyyymmdd hh:mm", Start_D.Date)
или так
FormatDateTime(" #mm/dd/yyyy hh:mm#", Start_D.Date)
Если время не нужно то без hh:mm.
← →
RDA (2002-09-21 11:52) [2]>> пробовал - не помогает.
Кстати от чего зависит формат даты - не от региональных ли установок. Смотрел в Аксесе - дата в поле храниться нормально в соответствии с моими рег. установками "dd.mm.yyyy" - или она может только показывется в соответствии с установками - а храниться в другом формате?
← →
sniknik (2002-09-21 12:18) [3]Access принимает два формата dd.mm.yyyy и mm.dd.yyyy без всяких установок на свое усмотрение. короче определенности нет.
завязывай боротся переходи на
Syntax
DateSerial(year, month, day)
The DateSerial function syntax has these named arguments:
пример
select DateSerial(1990 - 10, 8 - 2, 1 - 1)
← →
RDA (2002-09-21 13:32) [4]>> sniknik - не разобрался.
Дошел вот до чего
if Start_D.Text<>"" then Str:=Str+" AND (DATA>="+FormatDateTime("#dd.mm.yy#",Start_D.Date)+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA<="+FormatDateTime("#mm.mm.yy#",Stopt_D.Date)+")";
Если ввести только стартовую дату - фильтрует.
Если только конечную или обе - не фильтрует, но и ошибок не выдает.
← →
RDA (2002-09-21 13:39) [5]Ошибся
if Start_D.Text<>"" then Str:=Str+" AND (DATA>="+FormatDateTime("#dd.mm.yy#",Start_D.Date)+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA<="+FormatDateTime("#dd.mm.yy#",Stopt_D.Date)+")";
← →
sniknik (2002-09-21 18:37) [6]ты сначала без формата простой запрос тестируй, а после переменные задавай а то непонятно
пример с аксесом работает
SELECT * FROM Billing WHERE Log = #29/03/1996 1:38:52#
сдесь и время т.к в этой базе лог одного дня (мне так видно что отбор идет)
но основное западло, если написать
SELECT * FROM Billing WHERE Log = #03/29/1996 1:38:52#
то в выборку попадут те же записи (по мне лутше бы в одном случае ошибка была)
т.е. 03/04 можно интерпретировать по разному, согласен?
выбрать промежуток
SELECT * FROM Billing WHERE Log BETWEEN #03/29/1996 1:38:52# AND #03/29/1996 1:39:29#
а вот тут если в одном условии написать 03/04 то выбор будет однозначен т.к. второе задает 03/29, 29 явно день месяцем быть не может. короче запутатся легко.
← →
RDA (2002-09-21 18:59) [7]>>sniknik - устал. Сил нет с этим запросом.
SELECT * FROM PLAT WHERE DATA >= #18.09.02# AND DATA <= #20.09.02# - не работает.
SELECT * FROM PLAT WHERE DATA >= #18.09.02# - работает.
В базе всего две записи - обе с датой 19.09.02
Пробовал через промежуток с BETWEEN - не работает.
← →
RDA (2002-09-21 19:11) [8]Хуже того
SELECT * FROM PLAT WHERE DATA=#19.09.02# - не отбирает записи, а они есть.
← →
aus (2002-09-21 22:38) [9]Рабочий вариант:
select * from Table1 where Data = DateValue("01.01.02")
← →
sniknik (2002-09-21 23:10) [10]А так?
SELECT * FROM PLAT WHERE DATA >= #18/09/2002# AND DATA <= #20/09/2002#
← →
sniknik (2002-09-21 23:13) [11]когда делаеш равенство смотри на время. если забито в таблице то и в условии должно быть.
← →
RDA (2002-09-22 09:39) [12]Всем спасибо. Три дня мучений закончились. Особенную благодарсность выражаю sniknik - спасибо.
Рабочий вариант оказался таким:
procedure TfmFilter.SetFilter;
const
Text="SELECT N_PLAT, NOMER, DATA, NAZV_P, RRAX_P, NAZV_O, RRAX_O, SUMA, PRIZN FROM PLAT WHERE (P_PRED=";
var
Str:String;
begin
DateSeparator:="/";
with DM do
begin
QueryFilter.Active:=False;
QueryFilter.SQL.Clear;
if ENazv_P.Text<>"" then Str:=Str+" AND (NAZV_P="""+ENazv_P.Text+""")";
if ERRax_P.Text<>"" then Str:=Str+" AND (RRAX_P="""+ERRax_P.Text+""")";
if ENazv_O.Text<>"" then Str:=Str+" AND (NAZV_O="""+ENazv_O.Text+""")";
if ERRax_O.Text<>"" then Str:=Str+" AND (RRAX_O="""+ERRax_O.Text+""")";
if Start_D.Text<>"" then Str:=Str+" AND (DATA >= "+FormatDateTime("#dd/mm/yyyy#",Start_D.Date)+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA <= "+FormatDateTime("#dd/mm/yyyy#",Stopt_D.Date)+")";
QueryFilter.SQL.Add(Text+PREDN_PRED.AsString+")"+Str);
QueryFilter.Active:=True;
end;
DateSeparator:="."; // Не уверен что в этой строчке есть необходимость, ну да более мудрые товарищи подскажут - если захотят.
end;
>> aus А что это за функция DataValue
← →
sniknik (2002-09-22 12:04) [13]запусти Access сделай любой модуль (зайдеш в бейсик) и нажми F1, если в этот момент курсор будет стоять на имени функции то сразу получиш спровку типа этой. не будет стоять :-) поищеш в справочнике.
DateValue(date)
The required date argument is normally a string expression representing a date from January 1, 100 through December 31, 9999. However, date can also be any expression that can represent a date, a time, or both a date and time, in that range.
посмотри еще DateSerial, удобно составлять дату можно делать операции с датами непосредственно не через DateAdd.
DateSeparator- системная переменая разделитель даты, не уверен что в ней есть необходимость в данном случае, Jet по моему на нее внимания не обращает.
видел гдето в хелпе ссылку типа "установите этот параметр чтобы действовали системные настройки" но где не помню и по умолчанию это не действует.
Страницы: 1 вся ветка
Текущий архив: 2002.10.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.007 c