Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2013, 09:24   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Поиск в интервале времени

Делаю поиск в интервале времени, но не всегда работает
Код:
   ADOQuery1.Active:=false;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Text := 'select * from base where Time_posting BETWEEN :time1 AND :time2';
  t1:=Trunc(DateTimePicker3.Time);
  t2:=Trunc(DateTimePicker4.Time);
  ADOQuery1.Params.ParamByName('time1').Value:=t1;
  ADOQuery1.Params.ParamByName('time2').Value:=t2;
  ADOQuery1.Open;

   if ADOQuery1.RecordCount <> 0 then
  begin
 Beep;
       ADOQuery1.Active:=true;
 ADOQuery1.Refresh;
 Screen.Cursor := crDefault;
   ResultForm.Show;

 end
 else
      begin
      Screen.Cursor := crDefault;
      Beep;
      ShowMessage('По данному запросу ничего не найдено.');
      end;
end;
Aleksandr вне форума Ответить с цитированием
Старый 02.04.2013, 09:50   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
t1:=Trunc(DateTimePicker3.Time);
t2:=Trunc(DateTimePicker4.Time);
Это даст поиск не по интервалу времени, а по интервалу дат
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.04.2013, 09:51   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
ADOQuery1.Active:=true;
ADOQuery1.Refresh;
это что такое?
eval вне форума Ответить с цитированием
Старый 02.04.2013, 10:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен с предыдущими форумчанинами.

Цитата:
Сообщение от Аватар
Это даст поиск не по интервалу времени, а по интервалу дат
теорертически (подчёркиваю, исключительно теоретически) может помочь выбрасывание trunc()
Код:
  ADOQuery1.Params.ParamByName('time1').Value := DateTimePicker3.Time;
  ADOQuery1.Params.ParamByName('time2').Value := DateTimePicker4.Time;
Но, на самом деле, надо смотреть, какого типа поле Time_posting в таблице и что там в поле хранится!


Цитата:
Сообщение от eval
это что такое?
присоединяюсь к вопросу!
Цитата:
Код:
if ADOQuery1.RecordCount <> 0 then если есть записи в наборе данных
  begin
   Beep; {пискнуть}   

   ADOQuery1.Active:=true;   {открыть открытый запрос ещё раз??!!!!}
   ADOQuery1.Refresh;  {и ещё раз! Обновить содержимое набора данных??!!!!}
   ^^^^ ЗАЧЕМ ЭТИ ДВЕ СТРОКИ?!! ЧТО Вы ими добиваетесь?!?!
   

   Screen.Cursor := crDefault;
   ResultForm.Show;

 end
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2013, 10:16   #5
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Код:
procedure TFindForm.Button1Click(Sender: TObject);
var  d1,d2: TDateTime;
s:string;
begin
Screen.Cursor := crHourGlass;
case Rzcombobox1.ItemIndex of
 0: begin
 case Combobox2.ItemIndex of
   0: s:=  ' where Massa= "'+RzEdit1.text+'"';
   1: s:=  ' where Massa<> "'+RzEdit1.text+'"';
   2: s:=  ' where Massa> "'+RzEdit1.text+'"';
   3: s:=  ' where Massa>= "'+RzEdit1.text+'"';
   4: s:=  ' where Massa< "'+RzEdit1.text+'"';
   5: s:=  ' where Massa<= "'+RzEdit1.text+'"';
   6: s:=  ' where Massa "'+RzEdit1.text+'"'+'%';
   7: s:=  ' where Massa Like % "'+RzEdit1.text+'"'+'%';
   8: s:=  ' where Massa BETWEEN '+RzEdit1.text+' and '+RzEdit2.text;
  end;
  end;
  1: begin
 case Combobox2.ItemIndex of
   0: s:=  ' where Massa= "'+RzEdit1.text+'"';
   1: s:=  ' where Massa<> "'+RzEdit1.text+'"';
   2: s:=  ' where Massa> "'+RzEdit1.text+'"';
   3: s:=  ' where Massa>= "'+RzEdit1.text+'"';
   4: s:=  ' where Massa< "'+RzEdit1.text+'"';
   5: s:=  ' where Massa<= "'+RzEdit1.text+'"';
   6: s:=  ' where Massa "'+RzEdit1.text+'"'+'%';
   7: s:=  ' where Massa Like % "'+RzEdit1.text+'"'+'%';
   8: s:=  ' where Massa BETWEEN '+RzEdit1.text+' and '+RzEdit2.text;
  end;
  end;
2: begin
 case Combobox2.ItemIndex of
   0: s:=  ' where Massa= "'+RzEdit1.text+'"'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   1: s:=  ' where Massa<> "'+RzEdit1.text+'"'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   2: s:=  ' where Massa> "'+RzEdit1.text+'"'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   3: s:=  ' where Massa>= "'+RzEdit1.text+'"'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   4: s:=  ' where Massa< "'+RzEdit1.text+'"'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   5: s:=  ' where Massa<= "'+RzEdit1.text+'"'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   6: s:=  ' where Massa "'+RzEdit1.text+'"'+'%'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   7: s:=  ' where Massa Like % "'+RzEdit1.text+'"'+'%'+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
   8: s:=  ' where Massa BETWEEN '+RzEdit1.text+' and '+RzEdit2.text+' AND Date_posting='+'"'+DateToStr(DateTimePicker1.date)+'"';
  end;
  end;
  end;
   if  Combobox1.Text<>'' then
   begin
  memo1.Lines.Clear;
  memo1.Lines.Add('select * from base'+s+ 'AND Organization='+quotedstr(Combobox1.Text)) ;
  end
  else
 begin
  memo1.Lines.Clear;
  memo1.Lines.Add('select * from base'+s) ;
  end ;

 ADOTable1.Refresh;
 ADOQuery1.Active:=false;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Text :=  memo1.Text;
 ADOQuery1.Open;

   if ADOQuery1.RecordCount <> 0 then
  begin
 Beep;
// ADOQuery1.Active:=true;
 //ADOQuery1.Refresh;
 Screen.Cursor := crDefault;
 ResultForm.Show;

 end
 else
      begin
      Screen.Cursor := crDefault;
      Beep;
      ShowMessage('По данному запросу ничего не найдено.');
      end;
   // end;
// end;
end;
Сделал поиск вот таким образом, но не работает поиск по дате, и не могу всунуть сюда поиск в интервале дат.
Код:
ADOQuery1.SQL.Text := 'select * from base' +
    s +quotedstr(RzEdit1.Text)+' AND Date_posting BETWEEN :date1 AND :date2';
   d1:=Trunc(DateTimePicker1.Date);
  d2:=Trunc(DateTimePicker2.Date);
  ADOQuery1.Params.ParamByName('date1').Value:=d1;
  ADOQuery1.Params.ParamByName('date2').Value:=d2;
Aleksandr вне форума Ответить с цитированием
Старый 02.04.2013, 10:20   #6
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

База MYSQL Time_posting типа DateTime хранится время формата hh:mm:ss
Aleksandr вне форума Ответить с цитированием
Старый 02.04.2013, 10:23   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Вы зачем дату и время отделили по разным полям?
eval вне форума Ответить с цитированием
Старый 02.04.2013, 10:27   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Код:
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := 'select * from base where Time_posting BETWEEN :time1 AND :time2';
  ADOQuery1.Params.ParamByName('time1').Value:=DateTimePicker3.Time;
  ADOQuery1.Params.ParamByName('time2').Value:=DateTimePicker4.Time;
  ADOQuery1.Open;
а так не?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 02.04.2013, 10:35   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Выводит что по данному запросу ничего не найдено
Aleksandr вне форума Ответить с цитированием
Старый 02.04.2013, 10:38   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
ADOTable1.Refresh;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := memo1.Text;
ADOQuery1.Open;
читать читать читать ... как завещал маодзедун
вы что так не равнодушны к Refresh-у, спать спокойно не дает?
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается сделать поиск по дате и в интервале дат. Aleksandr БД в Delphi 5 11.03.2013 21:42
WinAPI синхронизация времени с сайтом точного времени. Walker32 Помощь студентам 4 07.06.2012 18:59
Рекурсивный поиск файлов в интервале дат(без времени,только день,месяц и год)) AlexKhol Общие вопросы Delphi 3 04.02.2012 16:15
продифференцировать на интервале IvaniuS Помощь студентам 7 21.04.2011 14:12
ПОИСК В БД .DBF ПО ВРЕМЕНИ И ДАТЕ В ПОЛЕ ТИПА DATETIME ЛисЁНЫШ БД в Delphi 10 05.06.2010 21:02