Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1084322881
SPeller
2004-05-12 04:48
2004.05.30
PE Viewer 1.1


14-1084192118
Курдль
2004-05-10 16:28
2004.05.30
К алгоритмическим полиглотам - вопрос о переходе на C#.


1-1084850912
IrBisoff
2004-05-18 07:28
2004.05.30
TImageList в RunTime


11-1073898845
avakss
2004-01-12 12:14
2004.05.30
QueryEndSession


6-1081330846
Ozone
2004-04-07 13:40
2004.05.30
TIdTCPClient





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский