Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дата??? [D6, Access]


Alina ©   (2004-05-06 14:39:00) 

Привет Всем!
У меня такая проблема:
На форме находится 2 MaskEdit'а


_sulent   (2004-05-07 09:57:00) [1]

Можно было сделать и проще, все делать на уровне строк:

str_filter := 'select * from query_meet where (place_meet<=datevalue('''+MaskEdit1.Text+'''))and(place_meet>=datevalue('''+MaskEdit2.Text+'''))';


Alina   (2004-05-07 09:09:00) [2]

Всем за помощь огромное спасибо!!!
Параметризованный запрос к счастью не понадобился, все оказалось проще:

  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;

Еще раз всем спсб, и огромной удачи :-)


sniknik   (2004-05-06 16:33:00) [3]

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"#))'
> Что мне делать, как преобразовать ее, что ли?
напиши правильно, а не свои вариации, и обе даты как показывал.


Мунька   (2004-05-06 15:40:00) [4]

Алина, сделайте параметризованный запрос, так, как показано в коде. В этом запросе не Вы заботитесь о преобразовании данных, поэтому Вам там не надо никаких StrToDate и  "'+maskedit_date1.text+'"'
ParamByName(WideString("DTEB"))->Value = BDT - этим все сказано
Только! ГРАМОТНО преобразуйте текст из эдитов в дату ОТДЕЛЬНОЙ ПРОЦЕДУРОЙ, которая вам запишет эти даты в переменные TDateTime, ну что непонятного?


Alina   (2004-05-06 15:33:00) [5]

Не знаю, что-то не получается.
Он все время говорит, что DataType mismatch in expression, не панимаю это несовпадение типов. Пробовала сделать StrToDate, все равно не помогает...


Мунька   (2004-05-06 15:22:00) [6]

Параметризованный запрос, и проблем нет, пример

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. Не обращай внимания на синтаксис Билдера - суть неизменна.


Erik   (2004-05-06 15:12:00) [7]

sniknik
Да кажется действительно перепутал не '-' а '/' должен быть. На Oracle 3 года сижу, вот уже и забывать стал.

TAdoStoredProc повторное присвоение параметров непроходит.

Голова она по умолчанию нужна, но ее нескачаеш.


Alina   (2004-05-06 15:10:00) [8]

Я раньше с этим работала, но там база была 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"#))'
Что мне делать, как преобразовать ее, что ли?


sniknik   (2004-05-06 15:00:00) [9]

> Строкоый формат даты в MsAccess всегда Американский и заключается в #. Пример: #12-25-2003#
ты не в курсе, выполни запросик для примера
SELECT #12-25-2003#, #25-12-2003#

> Но в ADO компонентах Delphi есть глюк.
в какой версии дельфей в какой поставке в каком месте? не втречал...

> Или использовать, чтото другое не ADO.
голову в первую очередь, справку, доки, ...
ADO ни при чем.


Erik   (2004-05-06 14:54:00) [10]

Строкоый формат даты в MsAccess всегда Американский и заключается в #. Пример: #12-25-2003#
А еще лучше сделать в MsAccess переметрический SQL и в него загружать пареметры, после запустить его. Но в ADO компонентах Delphi есть глюк. При повторном присвоении переметра он необновляет SQL даже если сделвть Close Open. Это легко исправляется присвоением одной переменой, но надо лезть в VCL :(
Или использовать, чтото другое не ADO.


sniknik   (2004-05-06 14:54:00) [11]

дату в фильтре обрамлять ## вроде этого #06/05/2004# и не наворачивай фильтр черезчур сложный модет не понять (с вложенными в скоби могут быть проблемы)
тогда событие onFilterRecord обрабатывай, там любая сложность пройдет.


Alina   (2004-05-06 14:47:00) [12]

Ну прям, лиж бы поиздеваться. Я просто не дописала.
Если знаете что делать, жду ваших ответов и предложений!!!!!


Alina   (2004-05-06 14:46:00) [13]

Так вот. Эти 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 плз.


Johnmen   (2004-05-06 14:43:00) [14]

Убери один.


Соловьев   (2004-05-06 14:42:00) [15]


> Alina   (06.05.04 14:39)  

это не проблема :)


sniknik   (2004-05-06 14:42:00) [16]

ужас какой! ;о) аж целых два MaskEdit'а не позавидуеш. но не волнуйся это не тараканы они не разводятся, как было 2 так и останется.


Наверх

Титульная страница Поиск, карта сайта Написать письмо