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

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

Динамический отбор по дате в базе данных [D5, Paradox]


Страницы:   1 2

Виктор ©   (2010-05-12 09:45:00) 

При параметрическом запросе:
procedure TForm3.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.Open;

end;
всё работает отлично!

при попытке динамического отбора по дате в выражении:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('WHERE Дата1:=StrToDate like '''+ (Edit3.Text + '%'''));
Query1.Open;
возникает ошибка. Подскажите, пожалуйста, где ошибка.


Sergey13   (2010-05-13 17:54:00) [21]

> [18] Виктор   (13.05.10 17:50)

Ну так неправильная дата. Что есть DateEdit1?


Виктор   (2010-05-13 17:50:00) [22]

Разместил на форме 3 DateEdit1 (соответственно: DateEdit1, DateEdit2, DateEdit3), Query1, DataSource1, Button1.
Пишу для Query1.SQL
Select*
From Istorii.DB
Where (:prm1 is null or Дата1=: prm1)
and (:prm2 is null or Дата2=: prm2)
and (:prm3 is null or Дата3=: prm3)
Для Button1
Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.ParamByName('prm3').AsDate:=StrToDate(DateEdit3.Text);
Query1.Open;
Не работает – ошибка
Project Data.exe raised exception class EConvertError with message”..’is not a valid date’


Sergey13   (2010-05-13 16:20:00) [23]

> [16] Виктор   (13.05.10 16:03)

Запрос может содержать примерно такие конструкции
where
(:par1 is null or Data=:par1)
and (:par2 is null or FIO=:par2)
and (:par3 is null or Polis=:par3)

т.е. управляя "нуловостью" параметра запрос работает с разными полями


Виктор   (2010-05-13 16:03:00) [24]

Query1.SQL.Add('WHERE Дата1 containing '+ quotedstr(Edit3.Text)); - не получается.
Хорошо, я успокоился, пусть будет так как было, т.е. на отдельной форме:

Query1.Close;
Query1.ParamByName('prm1').AsDate:=StrToDate(DateEdit1.Text);
Query1.ParamByName('prm2').AsDate:=StrToDate(DateEdit2.Text);
Query1.Open;

Видимо не судьба мне решить проблему. Спасибо за участие всем.


Anatoly Podgoretsky   (2010-05-13 11:55:00) [25]

> Sergey13  (13.05.2010 10:06:13)  [13]

А нафига их набирать то, при наличии компьютера?


ixen   (2010-05-13 11:08:00) [26]


> Query1.SQL.Add('From Istorii_full.DB');
тут мне кажется нужно писать имя таблицы, а не имя файла таблицы, по крайней мере в фаерберде так..

> Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text
> + '%'''));

попробуй так:
Query1.SQL.Add('WHERE pole_name containing '+ quotedstr(Edit3.Text));


Sergey13   (2010-05-13 10:06:00) [27]

> [11] Виктор   (12.05.10 21:57)
> Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты

Зачитался! Какой слог! Прямо пестня! 8-)

Но про что пестня - я, увы, не понял. 8-(


Плохиш   (2010-05-12 23:17:00) [28]


> но это у меня на отдельной форме с DateEdit1 и DateEdit2,
>  а хотелось бы все иметь на одной форме

Злобный насяльника запретил?


Виктор   (2010-05-12 21:57:00) [29]

Есть на форме Edit1, Edit2 Edit3 и т.д. для динамических запросов по разным параметрам, например по ФИО, улице, страховому полису и т.д. Если поле имеет строковый параметр, то проблем никаких не возникает (или использовать параметрический запрос как написано выше). Но для быстроты работы, в конце рабочего дня, подводя итог сделанному, я набираю цифры сегодняшней даты (к примеру: 12.05) и всё отбирается. Не сложно, конечно и с параметрическим запросом по дате, но это у меня на отдельной форме с DateEdit1 и DateEdit2, а хотелось бы все иметь на одной форме (и поиск, и запросы на выборку данных, и вывод информации на печать).


Anatoly Podgoretsky   (2010-05-12 11:40:00) [30]


> Виктор   (12.05.10 10:37) [4]

Какой смысл в like? в данном случае?


Плохиш   (2010-05-12 11:25:00) [31]


> Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text
> + '%'''));
>


> Query1.SQL.Add('Дата1.DateToStr (DateEdit3.Text)');
>

Спасибо, повеселил.


Sergey13   (2010-05-12 11:25:00) [32]

> [0] Виктор   (12.05.10 09:45)
> При параметрическом запросе:
> всё работает отлично!

Тогда какой смысл от него отказываться?


Dennis I. Komarov   (2010-05-12 11:13:00) [33]

Правда???

TDataSet(Any).Text:=(... from tablename where anyfield = ''' + DateToStr(AnyDate) + '''...


Виктор   (2010-05-12 11:04:00) [34]

ни
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('WHERE Дата1.DateToStr like '''+ (Edit3.Text + '%'''));
Query1.Open;
ни
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('Дата1.DateToStr (DateEdit3.Text)');
Query1.Open;
не работает???


Dennis I. Komarov   (2010-05-12 10:42:00) [35]

DateToStr...


Виктор   (2010-05-12 10:37:00) [36]

даже если так:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select*');
Query1.SQL.Add('From Istorii_full.DB');
Query1.SQL.Add('WHERE Дата1 like '''+ (Edit3.Text + '%'''));
Query1.Open;
возникает ошибка. Понятно, что Дата1 надо перевести в строковый параметр, но как это сделать в динамическом запросе?


Anatoly Podgoretsky   (2010-05-12 10:09:00) [37]

> Виктор  (12.05.2010 09:45:00)  [0]

Ты где такой синтаксис выкопал, какое еще :=


Медвежонок Пятачок   (2010-05-12 10:03:00) [38]

и про ":=" тоже ничего не знают


Медвежонок Пятачок   (2010-05-12 10:02:00) [39]

парадокс и бде ничего не знают про StrToDate


Страницы:   1 2

Наверх

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