Topic: Скрипт и Sql

Здравствуйте!
Появилось несколько вопросов по работе с программой:
1) Какие строки нужно прописать в скрипте, чтобы сбросить checkbox и dateTimePicker?
2) Есть sql запрос, который выводит записи с истекающей датой в этом месяце.

select
organizations.record_count
,organizations.partner
,periods.period
,strftime('%d.%m.%Y',organizations.date_connection)as date_connection
,strftime('%d.%m.%Y',organizations.expiration_date)as expiration_date
,organizations.fio
,posts.post
,organizations.phone1
,organizations.phone2
from organizations
,periods
,posts
where strftime('%m.%Y',organizations.expiration_date)= strftime('%m.%Y',{DateTimePicker1})

order by expiration_date

Выводятся записи из трех таблиц, но если добавить в запрос еще две таблицы (хотя они ничем от posts.post и periods.period не отличаются. Обе отвечают за выпадающие списки), то ничего не выводится. В чем может быть причина?
Заранее благодарен.

Re: Скрипт и Sql

Приветствую,

1.

Form1.CheckBox1.Checked := False;
Form1.DateTimePicker1.Checked := False;

с CheckBox есть один нюанс, помимо двух состояний (True и False) может иметь и третье (Grayed)
позволяющий например исключить CheckBox из поиска задав ему неизвестное значение.
сделать это можно так:

Form1.CheckBox1.State := cbGrayed;

2.
Необходимо правильно связать таблицы с помощью конструкции LEFT OUTER JOIN и внешних ключей

SELECT
organizations.record_count
,organizations.partner
,periods.period
,strftime('%d.%m.%Y',organizations.date_connection)as date_connection
,strftime('%d.%m.%Y',organizations.expiration_date)as expiration_date
,organizations.fio
,posts.post
,organizations.phone1
,organizations.phone2

FROM organizations

LEFT OUTER JOIN periods ON periods.id=organizations.id_periods
LEFT OUTER JOIN posts ON posts.id=organizations.id_posts


WHERE strftime('%m.%Y',organizations.expiration_date)= strftime('%m.%Y',{DateTimePicker1})

ORDER BY expiration_date

тоже самое можно сделать без использования SQL запроса, достаточно настроить кнопку с действием "Поиск"
и для компонента DateTimePicker установить свойство Kind=MonthYear

Dmitry.

Re: Скрипт и Sql

Дмитрий, большое Вам спасибо за помощь, все работает.

Re: Скрипт и Sql

Дмитрий, скажите, пожалуйста, как нужно изменить эту строку, чтобы вывести записи за 2 месяца до даты окончания?

WHERE strftime('%m.%Y',organizations.expiration_date)= strftime('%m.%Y',{DateTimePicker1})

Re: Скрипт и Sql

попробуйте так:

WHERE 

date(organizations.expiration_date)  > date({DateTimePicker1}, '-2 months')  AND 
date(organizations.expiration_date) < date({DateTimePicker1})
Dmitry.

Re: Скрипт и Sql

Не получается, теперь записи выводятся не в месяц окончания, а в следующем.

Re: Скрипт и Sql

Приложите пожалуйста ваш проект (zip файл без exe и dll)
Необходимо вывести записи с датой окончания за 2 месяца указанной в компоненте DateTimePicker?

Dmitry.

8 (edited by domains.light 2015-08-25 19:26:47)

Re: Скрипт и Sql

DriveSoft wrote:

Приложите пожалуйста ваш проект (zip файл без exe и dll)
Необходимо вывести записи с датой окончания за 2 месяца указанной в компоненте DateTimePicker?

В expirationsGrid должны выводиться записи  с датой окончания за 2 месяца (checkexpiration_date).
Button1 - Sql запрос

Post's attachments

Attachment icon V1.zip 12.32 kb, 371 downloads since 2015-08-25 

Re: Скрипт и Sql

domains.light wrote:

В expirationsGrid должны выводиться записи  с датой окончания за 2 месяца (checkexpiration_date).
Button1 - Sql запрос

что принимать за дату окончания? текущую дату? или дату в DateTimePicker ?
другими словами, что с чем сравнивать?

Dmitry.

Re: Скрипт и Sql

за дату окончания принимать  checkexpiration_date, указанную при добавлении записи.

при таком запросе выводятся  записи истекающие в текущем месяце:

WHERE strftime('%m.%Y',organizations.expiration_date)= strftime('%m.%Y',{DateTimePicker1})

мне же нужно чтобы истекающие записи отображались за 2 месяца до окончания

Re: Скрипт и Sql

попробуйте так

WHERE
date(organizations.expiration_date)  < date({DateTimePicker1}, '+2 months')
Dmitry.

Re: Скрипт и Sql

Спасибо, работает, а как сделать, чтобы записи не отображались после месяца окончания?

Re: Скрипт и Sql

WHERE

date(organizations.expiration_date)  < date({DateTimePicker1}, '+2 months') AND
date(organizations.expiration_date)  > date({DateTimePicker1}, '-1 months')
Dmitry.

14 (edited by domains.light 2015-08-26 07:56:31)

Re: Скрипт и Sql

Спасибо Дмитрий, работает, но есть проблема при проходе через Февраль,  запись показывается три месяца (за месяц, в месяц окончания и в следующем). Это можно увидеть в первой записи. Возможно ли это как-то исправить?

Post's attachments

Attachment icon v1.zip 12.64 kb, 372 downloads since 2015-08-26 

Re: Скрипт и Sql

domains.light
Запись с датой окончания  26.03.2016

показывается с 27.01.2016 по 25.04.2016
т.е. за два месяца до окончания, и 1 месяц после, как вы и просили.

Dmitry.

Re: Скрипт и Sql

Дмитрий, вы меня неправильно поняли, я не просил, чтобы запись показывалась 1 месяц после даты окончания.
Вторая запись отображается как и требовалось, но когда дате окончания предшествует февраль, то запись отображается дополнительный месяц после даты окончания, это и нужно как-то исправить.

Re: Скрипт и Sql

К сожалению я не могу понять, что вам точно необходимо.

Dmitry.

Re: Скрипт и Sql

Дмитрий, мне нужно, чтобы после даты окончания запись не выводилась в expirationsGrid

Re: Скрипт и Sql

WHERE
date(organizations.expiration_date)  < date({DateTimePicker1}, '+2 months') AND
date(organizations.expiration_date)  > date({DateTimePicker1})
Dmitry.

Re: Скрипт и Sql

Дмитрий, большое Вам спасибо, все сошлось)