Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизДата??? Найти похожие ветки
← →
Alina (2004-05-06 14:39) [0]Привет Всем!
У меня такая проблема:
На форме находится 2 MaskEdit"а
← →
Соловьев © (2004-05-06 14:42) [1]
> Alina (06.05.04 14:39)
это не проблема :)
← →
sniknik © (2004-05-06 14:42) [2]ужас какой! ;о) аж целых два MaskEdit"а не позавидуеш. но не волнуйся это не тараканы они не разводятся, как было 2 так и останется.
← →
Johnmen © (2004-05-06 14:43) [3]Убери один.
← →
Alina (2004-05-06 14:46) [4]Так вот. Эти MaskEdit"ы с маской ввода даты: " . . ". И выглядят так: Дата: с ..... по .....
В таблице Access есть поле "Дата встречи" в кратком формате даты.
Проблема состоит в том, что при создании фильтра по дате не получается распознать дату.
Вот код, пожалуйста помогите!procedure TForm_meetings.CheckBox_filterClick(Sender: TObject);
var
p1,p2,per_date_s,per_date_m,str_filter:string;
per_sum:integer;
begin
if CheckBox_filter.Checked=false then
begin
ADO_filter.Active:=false;
ADO_filter.SQL.Text:="select * from query_meet";
ADO_filter.Active:=true;
DBGrid1.DataSource:=DS_filter;
end
else
begin
if edit_place.Text<>"" then
str_filter:="select * from query_meet WHERE place_meet=""+edit_place.text+"""
else
str_filter:="select * from query_meet where place_meet<>" " ";
{if (maskedit_date1.Text<>" . . ") and (maskedit_date1.Text<>"__.__.__") then
str_filter:=str_filter+ " and (date_meet> StrToDate(""+maskedit_date1.text+"")) " ;
if (maskedit_date2.Text<>" . . ") and (maskedit_date2.Text<>"__.__.__") then
str_filter:=str_filter+ " and (date_meet< StrToDateTime(maskedit_date2.text)) " ; }
{if (maskedit_date1.Text<>" . . ") and (maskedit_date1.Text<>"__.__.__") and (maskedit_date2.Text<>" . . ") and (maskedit_date2.Text<>"__.__.__") then
begin
p1:=maskedit_date1.Text;
p2:=maskedit_date2.Text;
str_filter:=str_filter+ " and ("+""""+p1+"""<=Date_meet ) AND ("+""""+p2+""">=Date_meet ) " ;
end;}
if edit_group.Text<>"" then
str_filter:=str_filter+ "and (group=""+Edit_group.Text+"") ";
if edit_name_firm.Text<>"" then
str_filter:=str_filter+ "and (name_firm=""+edit_name_firm.text+"")";
if edit_manager.Text<>"" then
str_filter:=str_filter+ "and (fio=""+edit_manager.text+"")";
ADO_filter.Active:=false;
ADO_filter.SQL.Text:=str_filter;
DBGrid1.DataSource:=DS_filter;
ADO_filter.Active:=true;
end;
ADO_filter.FieldByName("id_meet").Visible:=false;
ADO_filter.FieldByName("note_meet").Visible:=false;
ADO_filter.FieldByName("note_other").Visible:=false;
end;
Что я только не делала (поэтому все в комментариях) ничего не получается.
help плз.
← →
Alina (2004-05-06 14:47) [5]Ну прям, лиж бы поиздеваться. Я просто не дописала.
Если знаете что делать, жду ваших ответов и предложений!!!!!
← →
Erik © (2004-05-06 14:54) [6]Строкоый формат даты в MsAccess всегда Американский и заключается в #. Пример: #12-25-2003#
А еще лучше сделать в MsAccess переметрический SQL и в него загружать пареметры, после запустить его. Но в ADO компонентах Delphi есть глюк. При повторном присвоении переметра он необновляет SQL даже если сделвть Close Open. Это легко исправляется присвоением одной переменой, но надо лезть в VCL :(
Или использовать, чтото другое не ADO.
← →
sniknik © (2004-05-06 14:54) [7]дату в фильтре обрамлять ## вроде этого #06/05/2004# и не наворачивай фильтр черезчур сложный модет не понять (с вложенными в скоби могут быть проблемы)
тогда событие onFilterRecord обрабатывай, там любая сложность пройдет.
← →
sniknik © (2004-05-06 15:00) [8]> Строкоый формат даты в MsAccess всегда Американский и заключается в #. Пример: #12-25-2003#
ты не в курсе, выполни запросик для примера
SELECT #12-25-2003#, #25-12-2003#
> Но в ADO компонентах Delphi есть глюк.
в какой версии дельфей в какой поставке в каком месте? не втречал...
> Или использовать, чтото другое не ADO.
голову в первую очередь, справку, доки, ...
ADO ни при чем.
← →
Alina (2004-05-06 15:10) [9]Я раньше с этим работала, но там база была Paradox"овская и вот это работало
"select * from query_meet where date_meet< ""+maskedit_date1.text+"""
А сейчас вообще не хочет. Даже с этим ## говорит, чтоSyntax Error in date in query expression "(place_meet<>"") and (date_meet>"12.12.03") and (date_meet<#"12.12.04"#))"
Что мне делать, как преобразовать ее, что ли?
← →
Erik © (2004-05-06 15:12) [10]sniknik
Да кажется действительно перепутал не "-" а "/" должен быть. На Oracle 3 года сижу, вот уже и забывать стал.
TAdoStoredProc повторное присвоение параметров непроходит.
Голова она по умолчанию нужна, но ее нескачаеш.
← →
Мунька (2004-05-06 15:22) [11]Параметризованный запрос, и проблем нет, пример
TDateTime BDT, EDT;
//Типа фильтр по дате sql_txt - строка запроса на удаление (можно на извлечение, как угодно)
if(CB_DateTime->Checked)
{
if( FormDateTimeInterval(BDT, EDT))
sqltxt += " AND (DateTimeEvent BETWEEN :DTEB AND :DTEE) ";
}
//DTEB, DTEE - это параметры запроса, FormDateTimeInterval(BDT, EDT) - процедура, которая формирует переменные типа TDateTime, причем должна формировать грамотно, так, чтобы BDT<=EDT, у меня дата берется из пикеров, ты возьми из своих эдитов.
ADODelHist->SQL->Clear();
ADODelHist->SQL->Add(sqltxt);
try
{
......................................
if(CB_DateTime->Checked)//здесь вообще можно число параметров запроса проверять или еще критерий найти
{
ADODelHist->Parameters->ParamByName(WideString("DTEB"))->Value = BDT;
ADODelHist->Parameters->ParamByName(WideString("DTEE"))->Value = EDT;
}
.....................................
if (!ADODelHist->Prepared)
ADODelHist->Prepared = true;
ADODelHist->ExecSQL() ;
// ADOConnectionDel->Connected = false;
}
catch(...)
{
ModalResult = mrCancel;
return;
}
P.S. Не обращай внимания на синтаксис Билдера - суть неизменна.
← →
Alina (2004-05-06 15:33) [12]Не знаю, что-то не получается.
Он все время говорит, что DataType mismatch in expression, не панимаю это несовпадение типов. Пробовала сделать StrToDate, все равно не помогает...
← →
Мунька (2004-05-06 15:40) [13]Алина, сделайте параметризованный запрос, так, как показано в коде. В этом запросе не Вы заботитесь о преобразовании данных, поэтому Вам там не надо никаких StrToDate и ""+maskedit_date1.text+"""
ParamByName(WideString("DTEB"))->Value = BDT - этим все сказано
Только! ГРАМОТНО преобразуйте текст из эдитов в дату ОТДЕЛЬНОЙ ПРОЦЕДУРОЙ, которая вам запишет эти даты в переменные TDateTime, ну что непонятного?
← →
sniknik © (2004-05-06 16:33) [14]Erik © (06.05.04 15:12) [10]
> sniknik
> Да кажется действительно перепутал не "-" а "/" должен быть. На Oracle 3 года сижу, вот уже и забывать стал.
да не синтаксс правильный, access/jet почти всеядный в этом случае, разделителями что угодно принимает.
я про даду в американском формате, ты сравни их в запросе и что аксесс вернет.
> А сейчас вообще не хочет. Даже с этим ## говорит, что
> Syntax Error in date in query expression "(place_meet<>"") and (date_meet>"12.12.03") and (date_meet<#"12.12.04"#))"
> Что мне делать, как преобразовать ее, что ли?
напиши правильно, а не свои вариации, и обе даты как показывал.
← →
Alina (2004-05-07 09:09) [15]Всем за помощь огромное спасибо!!!
Параметризованный запрос к счастью не понадобился, все оказалось проще:
if (maskedit_date1.Text<>" . . ") and (maskedit_date2.Text<>" . . ") then
begin
str1:=MaskEdit_date1.Text;
str1:=FormatDateTime("mm"+""/""+"dd"+""/""+"yyyy",(strtodate(str1)));//преобразуем в строку с датой и применяем переменную str в запросе.
str2:=MaskEdit_date2.Text;
str2:=FormatDateTime("mm"+""/""+"dd"+""/""+"yyyy",(strtodate(str2)));//преобразуем в строку с датой и применяем переменную str в запросе.
edit_date1.Text:=str1;
edit_date2.Text:=str2;
str_filter:=str_filter+ " and (date_meet Between #"+edit_date1.text+"# And #"+edit_date2.text+"#)" ;
end;
Еще раз всем спсб, и огромной удачи :-)
← →
_sulent © (2004-05-07 09:57) [16]Можно было сделать и проще, все делать на уровне строк:
str_filter := "select * from query_meet where (place_meet<=datevalue("""+MaskEdit1.Text+"""))and(place_meet>=datevalue("""+MaskEdit2.Text+"""))";
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c