Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Дата???   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
3-1083765179
Dimedrol
2004-05-05 17:52
2004.05.30
Компонент типа DBTreeView


3-1083503907
dilp
2004-05-02 17:18
2004.05.30
ошибка при создании ADO компоненты - setFileSecurity не найдена


4-1081323245
juiceman
2004-04-07 11:34
2004.05.30
Как узнать "хуковое") окно ???


1-1084948578
Bizons
2004-05-19 10:36
2004.05.30
Interface+TControl


1-1084869046
evvcom
2004-05-18 12:30
2004.05.30
Вопрос по редактору кода