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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2009, 10:20   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию Непонятки с DateTimePicker

Добрый день. Не понимаю вот чего. Мне надо выбрать диапозон дат из двух DateTimePicker-ов. Например, я указываю диапозон: 02.09.2005 и 29.09.2005. Должны показаться даты 02.09.2005, 21.09.2005, а показываются так, как изоброажено на таблицес подписью "Неправильно". В чем ошибка?
Код запроса:
Код:
procedure TForm15.BitBtn1Click(Sender: TObject);
begin
 with Form15.Query1 do
 begin
  Form15.Label11.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker1.Date);
  Form15.Label13.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker2.Date);

  Form15.Query1.Active:=False;
  Form15.Query1.SQL.Clear;
  Form15.Query1.SQL.Add('SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5');
  Form15.Query1.SQL.Add('FROM jur');

{Pred_jur}
  Form15.DBGridEh1.Columns[0].Visible:= Form15.CheckBox7.Checked;
{Chetvert}
  Form15.DBGridEh1.Columns[1].Visible:= Form15.CheckBox8.Checked;
{God_jur}
  Form15.DBGridEh1.Columns[2].Visible:= Form15.CheckBox6.Checked;
{Klass}
  Form15.DBGridEh1.Columns[3].Visible:= Form15.CheckBox5.Checked;
{Data}
  Form15.DBGridEh1.Columns[4].Visible:= Form15.CheckBox9.Checked;
{Mark_2}
  Form15.DBGridEh1.Columns[5].Visible:= Form15.CheckBox1.Checked;
{Mark_3}
  Form15.DBGridEh1.Columns[6].Visible:= Form15.CheckBox2.Checked;
{Mark_4}
  Form15.DBGridEh1.Columns[7].Visible:= Form15.CheckBox3.Checked;
{Mark_5}
  Form15.DBGridEh1.Columns[8].Visible:= Form15.CheckBox4.Checked;

  Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+
                          ' AND Imy_jur= '+QuotedStr(Form15.Edit4.Text)+
                          ' AND Otche_jur= '+QuotedStr(Form15.Edit5.Text)+
                          ' AND Data BETWEEN '+QuotedStr(Form15.Edit2.Text)+' AND '+QuotedStr(Form15.Edit6.Text)+
                          ' AND Klass='+QuotedStr(Form15.Edit1.Text)+
                          ' AND God_jur='+QuotedStr(Form15.Edit7.Text)+
                          ' AND Pred_jur='+QuotedStr(Form15.Edit8.Text)+
                          ' AND Chetvert='+QuotedStr(Form15.DBLookupComboboxEh2.Text)+
                          '');
   Form15.Query1.Active:=True;
 end;
end;
Изображения
Тип файла: jpg Безымянный.jpg (6.4 Кб, 155 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.08.2009, 09:30   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

попробуйте это
Код:
BETWEEN '+QuotedStr(Form15.Edit2.Text)+' AND '+QuotedStr(Form15.Edit6.Text)
в скобочки взять так

Код:
Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+
                          ' AND Imy_jur= '+QuotedStr(Form15.Edit4.Text)+
                          ' AND Otche_jur= '+QuotedStr(Form15.Edit5.Text)+
                          ' AND (Data BETWEEN '+QuotedStr(Form15.Edit2.Text)+' AND '+QuotedStr(Form15.Edit6.Text)+
                          ') AND Klass='+QuotedStr(Form15.Edit1.Text)+
                          ' AND God_jur='+QuotedStr(Form15.Edit7.Text)+
                          ' AND Pred_jur='+QuotedStr(Form15.Edit8.Text)+
                          ' AND Chetvert='+QuotedStr(Form15.DBLookupComboboxEh2.Text)+
                          '');
vovk вне форума Ответить с цитированием
Старый 09.08.2009, 15:04   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
vovk
Я попробовал сделать так, как Вы предложили, но ничего не поменялось. Результат такой же. Может еще есть какие идеи?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.08.2009, 15:29   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

традиционный гемор с датами (СУБД понимает ваши строчки с датами СОВСЕМ не так, как Вы их передаёте (день/месяц/год или наоборот месяц/день/год и т.д. и т.п.)

Проще всего сделать параметеризированный запрос (даты в качестве параметров). Тогда всё должно быть нормально.
А СУБД какая?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.08.2009, 17:40   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
А СУБД какая?
BDE. Paradox.
Цитата:
традиционный гемор с датами (СУБД понимает ваши строчки с датами СОВСЕМ не так, как Вы их передаёте (день/месяц/год или наоборот месяц/день/год и т.д. и т.п.)
Получается, что в результате запроса выводятся все даты начиная со 02.09.2005 по 29.09.2005 в возрастающем порядке от 2 до 29. Но почему то не берется в расчет месяц и год, а только день. А как сделать параметризированный запрос?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.08.2009, 09:10   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

artemavd

запрос (там, где between) меняем так:
Код:
...
              ' AND Data BETWEEN :ParamDate1 and :ParamDate2 ' +
...
а задаём параметры так:
Код:
  Form15.Query1.ParamByName('ParamDate1').asDateTime := Form15.DateTimePicker1.Date;
  Form15.Query1.ParamByName('ParamDate2').asDateTime := Form15.DateTimePicker2.Date;
  Form15.Query1.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2009, 12:21   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Serge_Bliznykov
Сделал как Вы сказали, но выдается ошибка: Query1: Parameter 'ParamDate1' not found. Вот мой код:
Код:
procedure TForm15.BitBtn1Click(Sender: TObject);
begin
 with Form15.Query1 do
 begin
  Form15.Label11.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker1.Date);
  Form15.Label13.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker2.Date);

  Form15.Query1.ParamByName('ParamDate1').AsDateTime:=Form15.DateTimePicker1.Date;
  Form15.Query1.ParamByName('ParamDate2').AsDateTime:=Form15.DateTimePicker2.Date;


  Form15.Query1.Active:=False;
  Form15.Query1.SQL.Clear;
  Form15.Query1.SQL.Add('SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5');
  Form15.Query1.SQL.Add('FROM jur');

{Pred_jur}
  Form15.DBGridEh1.Columns[0].Visible:= Form15.CheckBox7.Checked;
{Chetvert}
  Form15.DBGridEh1.Columns[1].Visible:= Form15.CheckBox8.Checked;
{God_jur}
  Form15.DBGridEh1.Columns[2].Visible:= Form15.CheckBox6.Checked;
{Klass}
  Form15.DBGridEh1.Columns[3].Visible:= Form15.CheckBox5.Checked;
{Data}
  Form15.DBGridEh1.Columns[4].Visible:= Form15.CheckBox9.Checked;
{Mark_2}
  Form15.DBGridEh1.Columns[5].Visible:= Form15.CheckBox1.Checked;
{Mark_3}
  Form15.DBGridEh1.Columns[6].Visible:= Form15.CheckBox2.Checked;
{Mark_4}
  Form15.DBGridEh1.Columns[7].Visible:= Form15.CheckBox3.Checked;
{Mark_5}
  Form15.DBGridEh1.Columns[8].Visible:= Form15.CheckBox4.Checked;

  Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+
                          ' AND Imy_jur= '+QuotedStr(Form15.Edit4.Text)+
                          ' AND Otche_jur= '+QuotedStr(Form15.Edit5.Text)+
                          ' AND Data BETWEEN :ParamDate1 AND :ParamDate2'+
                          ' AND Klass='+QuotedStr(Form15.Edit1.Text)+
                          ' AND God_jur='+QuotedStr(Form15.Edit7.Text)+
                          ' AND Pred_jur='+QuotedStr(Form15.Edit8.Text)+
                          ' AND Chetvert='+QuotedStr(Form15.DBLookupComboboxEh2.Text)+
                          '');
   Form15.Query1.Active:=True;
 end;
end;
//------------------------------------------------------------------------------
Что не так?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.08.2009, 13:31   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

думаю, что две строчки задания параметров надо перенести ПОСЛЕ заполнения текста запроса,
непосредственное перед открытием Query:
Код:
 Form15.Query1.ParamByName('ParamDate1').AsDateTime:=Form15.DateTimePicker1.Date;
  Form15.Query1.ParamByName('ParamDate2').AsDateTime:=Form15.DateTimePicker2.Date;
Form15.Query1.Active:=True;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2009, 07:01   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Я забыл сказать, что у меня выбранное значение из DateTimePicker заносится сначала в Edit, а из Edit-a берется дата. Вот, пробовал сделать так:
Код:
procedure TForm15.BitBtn1Click(Sender: TObject);
begin
 with Form15.Query1 do
 begin
  Form15.Label11.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker1.Date);
  Form15.Label13.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker2.Date);

  Form15.Query1.Active:=False;
  Form15.Query1.SQL.Clear;
  Form15.Query1.SQL.Add('SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5');
  Form15.Query1.SQL.Add('FROM jur');

{Pred_jur}
  Form15.DBGridEh1.Columns[0].Visible:= Form15.CheckBox7.Checked;
{Chetvert}
  Form15.DBGridEh1.Columns[1].Visible:= Form15.CheckBox8.Checked;
{God_jur}
  Form15.DBGridEh1.Columns[2].Visible:= Form15.CheckBox6.Checked;
{Klass}
  Form15.DBGridEh1.Columns[3].Visible:= Form15.CheckBox5.Checked;
{Data}
  Form15.DBGridEh1.Columns[4].Visible:= Form15.CheckBox9.Checked;
{Mark_2}
  Form15.DBGridEh1.Columns[5].Visible:= Form15.CheckBox1.Checked;
{Mark_3}
  Form15.DBGridEh1.Columns[6].Visible:= Form15.CheckBox2.Checked;
{Mark_4}
  Form15.DBGridEh1.Columns[7].Visible:= Form15.CheckBox3.Checked;
{Mark_5}
  Form15.DBGridEh1.Columns[8].Visible:= Form15.CheckBox4.Checked;

  Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+
                          ' AND Imy_jur= '+QuotedStr(Form15.Edit4.Text)+
                          ' AND Otche_jur= '+QuotedStr(Form15.Edit5.Text)+
                          ' AND Data BETWEEN :ParamDate1 AND :ParamDate2'+
                          ' AND Klass='+QuotedStr(Form15.Edit1.Text)+
                          ' AND God_jur='+QuotedStr(Form15.Edit7.Text)+
                          ' AND Pred_jur='+QuotedStr(Form15.Edit8.Text)+
                          ' AND Chetvert='+QuotedStr(Form15.DBLookupComboboxEh2.Text)+
                          '');
  Form15.Query1.ParamByName('ParamDate1').AsString:=Form15.Edit2.Text;
  Form15.Query1.ParamByName('ParamDate2').AsString:=Form15.Edit6.Text;
  Form15.Query1.Active:=True;
 end;
end;
Но результат выполнения запроса остается неизменным. Попрежнему выводится не то, что нужно
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.08.2009, 09:05   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

artemavd, ВЫ ВООБЩЕ ЧИТАЕТЕ, ЧТО ВАМ ПИШУТ!?!?!
у Вас не работает именно из-за того, что дата в запрос передаётся в строковом виде и Ваша СУБД (из-за каких-то региональных настроек, или настроек BDE) неверно переводит его у себя внутри в формат даты!

СДЕЛАЙТЕ ТАК, КАК Я СКАЗАЛ.
и тогда опишитесь.

Код:
procedure TForm15.BitBtn1Click(Sender: TObject);
begin
 with Form15.Query1 do
 begin
  Form15.Label11.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker1.Date);
  Form15.Label13.Caption:=FormatDateTime('dd.mm.yy',Form15.DateTimePicker2.Date);

  Form15.Query1.Active:=False;
  Form15.Query1.SQL.Clear;
  Form15.Query1.SQL.Add('SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5');
  Form15.Query1.SQL.Add('FROM jur');

{Pred_jur}
  Form15.DBGridEh1.Columns[0].Visible:= Form15.CheckBox7.Checked;
{Chetvert}
  Form15.DBGridEh1.Columns[1].Visible:= Form15.CheckBox8.Checked;
{God_jur}
  Form15.DBGridEh1.Columns[2].Visible:= Form15.CheckBox6.Checked;
{Klass}
  Form15.DBGridEh1.Columns[3].Visible:= Form15.CheckBox5.Checked;
{Data}
  Form15.DBGridEh1.Columns[4].Visible:= Form15.CheckBox9.Checked;
{Mark_2}
  Form15.DBGridEh1.Columns[5].Visible:= Form15.CheckBox1.Checked;
{Mark_3}
  Form15.DBGridEh1.Columns[6].Visible:= Form15.CheckBox2.Checked;
{Mark_4}
  Form15.DBGridEh1.Columns[7].Visible:= Form15.CheckBox3.Checked;
{Mark_5}
  Form15.DBGridEh1.Columns[8].Visible:= Form15.CheckBox4.Checked;

  Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+
                          ' AND Imy_jur= '+QuotedStr(Form15.Edit4.Text)+
                          ' AND Otche_jur= '+QuotedStr(Form15.Edit5.Text)+
                          ' AND Data BETWEEN :ParamDate1 AND :ParamDate2'+
                          ' AND Klass='+QuotedStr(Form15.Edit1.Text)+
                          ' AND God_jur='+QuotedStr(Form15.Edit7.Text)+
                          ' AND Pred_jur='+QuotedStr(Form15.Edit8.Text)+
                          ' AND Chetvert='+QuotedStr(Form15.DBLookupComboboxEh2.Text)+
                          '');
  Form15.Query1.ParamByName('ParamDate1').AsDateTime:=Form15.DateTimePicker1.Date;
  Form15.Query1.ParamByName('ParamDate2').AsDateTime:=Form15.DateTimePicker2.Date;
  Form15.Query1.Active:=True;
 end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
непонятки со StringGrids в Delphi7 mnejarko Помощь студентам 6 23.07.2009 20:26
Непонятки с рисованием на форме ROD Общие вопросы C/C++ 2 03.02.2009 18:14
Непонятки с кнопками Devoto Общие вопросы Delphi 2 16.11.2008 20:47
Непонятки с сетью! anton14 Компьютерное железо 4 12.11.2008 21:49
непонятки с данными KiSH333 БД в Delphi 5 01.09.2008 08:36