1 (edited by NickB 2022-07-21 10:48:01)

Topic: Обязательный выбор для Combobox

Добрый день, подскажите пожалуйста в чем ошибка
нужно чтобы по результатам  разницы между Калькулятор.DateTimePicker2.DateTime - Калькулятор.DateTimePicker1.DateTime +1 в калькулятор.ComboBox3 из выпадающего списка указывался только заданный период, написал условие, ошибку не выдает но и нужного результата тоже

if ((Калькулятор.DateTimePicker2.DateTime - Калькулятор.DateTimePicker1.DateTime +1) > 1) and ((Калькулятор.DateTimePicker2.DateTime - Калькулятор.DateTimePicker1.DateTime +1) <=7) then
   Калькулятор.ComboBox3.text:= sqlexecute('select Period from TimeList where Period like "1-7" ');

нужно чтоб если разница межу двумя датами к примеру 3 дн с 21/07/22 и 23/07/22 то в ComboBox выпадал заданный для этого периода указатель 1-7

сейчас в ComboBox выпадает несколько периодов 1-7, 8-14, 15-21, 22-31, 32-62 итд

нужно сделать ограничение чтобы пользователи не выбирали не нужное smile

заранее благодарен

Re: Обязательный выбор для Combobox

Ошибка в проектировании базы данных.


Если вам нужно преобразовывать интервал даты в индекс, то структура таблицы с периодами должна быть такая:

Period
    PeriodFrom - integer
    PeriodTo - integer

Тогда установка периода выглядит так:

tmpPeriod := Калькулятор.DateTimePicker2.DateTime - Калькулятор.DateTimePicker1.DateTime +1; 
Калькулятор.ComboBox3.dtItemID =  SQLExecute( 'SELECT id FROM Period WHERE PeriodFrom >= '+tmpPeriod+' and PeriodTo <= '+tmpPeriod );

Не забудьте в свойствах ComboBox3 указать


FieldName = {PeriodFrom}-{PeriodTo}
Визуальное программирование: блог и телеграм-канал.

3 (edited by sparrow 2022-07-21 20:13:45)

Re: Обязательный выбор для Combobox

Внесем поправку Все время учимся ...
Тип TDateTime содержит значение даты и времени.

Она сохраняется как переменная с типом Double, с датой как целая часть,
а время как дробная. Дата сохраняется как число дней с 30 декабря 1899.


DateTimePicker возвращает значение даты и времени. Для корректного рассчета
нужно взять целую часть и проводить вычисления разницы дней без учета времени.


Используйте DaysBetween
DaysBetween ( const ToDate, FromDate : TDateTime ) : Integer;


... DaysBetween(int(Калькулятор.DateTimePicker1.DateTime), int(Калькулятор.DateTimePicker2.DateTime) ) ...

или

int(Калькулятор.DateTimePicker1.DateTime) - int(Калькулятор.DateTimePicker2.DateTime) 

Читайте ... учитесь... и сам учусь еще

Re: Обязательный выбор для Combobox

ок спасибо, попробую все варианты

Re: Обязательный выбор для Combobox

Привет всем,
NickB,
Если вы хотите инициировать все из выбранного диапазона дат, вам вообще нужно показывать поле со списком?
Взгляните на вложение (это мое предыдущее предложение с соответствующими изменениями).
Теперь все, что вам нужно сделать, это выбрать диапазон дат и количество людей, а затем выбрать любую комбинацию параметров.
Может быть, это поможет,
Derek.
.
.
If you want to initiate everything from the selected date range, do you even need to show the combobox?
Have a look at the attachment (which is my previous suggestion with the relevant changes).
Now all you need to do is select the date range and the number of people and then choose any combination of options.

Post's attachments

Attachment icon insurance2.zip 352.8 kb, 184 downloads since 2022-07-21 

Re: Обязательный выбор для Combobox

Привет всем,

Derek, вы правы, первоначально идея была, чтобы не показывать поле со списком, а в приложении, диапазон дат рассчитывался автоматически, чтобы избежать операционного риска (ошибок со стороны пользователей).

Ваше предыдущее предложение мне очень помогло я применил некоторые функции из него в своем проекте и они работают превосходно, последнее предложение я обязательно посмотрю.

Спасибо всем, любые предложения, любые рекомендации мне помогают, сам я не программист (информацию сначала ищу по книжкам), My Visual Database очень классная среда разработки, упрощает работу над приложением.
.
.
Hi everyone,

Derek, you're right, the original idea was not to show the List Box, but in the application, the date range was calculated automatically to avoid operational risk (errors on the part of users).

Your previous suggestion helped me a lot, I applied some of the functions from it in my project and they work perfectly, I will definitely look at the last suggestion.

Thanks to everyone, any suggestions, any recommendations help me, I am not a programmer myself (I first look for information from books), My Visual Database is a very cool development environment, simplifies work on the application.

Re: Обязательный выбор для Combobox

А подскажите как присвоить combobox определенные даты? Нажимаешь на combobox - и тебе предлагает ближайшую дату которую ты указал изначально для этого значения в combobox?
Например:
Нужно выбрать в combobox id - 'item1' при нажатии на combobox тебе в datetimepicker предлагает самое ближайшее число ( я так понял нужно изначально забить в combobox числа) ? помогите с примером

Post's attachments

Attachment icon date and combobox.rar 294.38 kb, 135 downloads since 2022-07-25 

Re: Обязательный выбор для Combobox

procedure Form1_cbGroup_OnChange (Sender: TObject);
begin
    If Form1.cbGroup.dbItemID = 1 then Form1.DateTimePicker1.DateTime := Form1.DateTimePicker1.DateTime - ???? ;
end;

Но нужно присвоить на cbGroup = 1 - даты  если сегодня например 25.07.2022 - то при выборе combobox =1 будет дата 28.07.2022
Просто как вбить в определенное значение id ближаюшею дату для выбора с учетом сегодняшней

Re: Обязательный выбор для Combobox

Вот более подробнее пример в закрепе:
Выбираем из таблицы запись = она равняется combobox = id=1 у которой в свою очередь парент combobox2 ( но как привязать datetimepicker) чтобы он включался при выборе combobox2 на ближаюшую дату!!! Помогите пожалуйтста
То есть у записи 1 может быть 10 разных дат но при выборе из таблице запись 1 - выбирается ближайшая дата

Post's attachments

Attachment icon SetCombo.rar 296.12 kb, 126 downloads since 2022-07-25 

10 (edited by pavlenko.vladimir.v 2022-07-25 06:36:15)

Re: Обязательный выбор для Combobox

chartcatuser wrote:

Вот более подробнее пример в закрепе:
Выбираем из таблицы запись = она равняется combobox = id=1 у которой в свою очередь парент combobox2 ( но как привязать datetimepicker) чтобы он включался при выборе combobox2 на ближаюшую дату!!! Помогите пожалуйтста
То есть у записи 1 может быть 10 разных дат но при выборе из таблице запись 1 - выбирается ближайшая дата

Form1.DateTimePicker1.DateTime := SQLDateTimeToDateTime(SQLexecute('SELECT name3 FROM NAMES WHERE id='+Form1.TableGrid1.sqlValue));

11 (edited by chartcatuser 2022-07-25 07:53:03)

Re: Обязательный выбор для Combobox

pavlenko.vladimir.v wrote:
chartcatuser wrote:

Вот более подробнее пример в закрепе:
Выбираем из таблицы запись = она равняется combobox = id=1 у которой в свою очередь парент combobox2 ( но как привязать datetimepicker) чтобы он включался при выборе combobox2 на ближаюшую дату!!! Помогите пожалуйтста
То есть у записи 1 может быть 10 разных дат но при выборе из таблице запись 1 - выбирается ближайшая дата

Form1.DateTimePicker1.DateTime := SQLDateTimeToDateTime(SQLexecute('SELECT name3 FROM NAMES WHERE id='+Form1.TableGrid1.sqlValue));

С ошибкой разобрался огромное спасибо

А второе то что когда нажимаешь на запись в таблице у меня срабатывает скрипт где показывает значение из другой таблицы:
Form1.Combobox1.Text:=SQLExecute('SELECT city FROM base WHERE id=' +Form1.TableGrid1.sqlValue );
Но потом я хочу передать с combobox1 на combobox2 тоже самое значение чтобы потом combobox3 парентом принимал значение у combobox2 он принимает но нужно еще раз нажать на combobox2 чтобы выбрать нужную запись и потом только в combobox3 появляются записи пробовал  :
procedure Form1_ComboBox2_OnKeyUp (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
    Form1.Combobox3.Text:=SQLExecute('SELECT city FROM base WHERE id=' +Form1.TableGrid1.sqlValue );
end;
Не выходит... все равно надо сначало нажать на combobox2 чтобы увидеть записи  в combobox3

12 (edited by pavlenko.vladimir.v 2022-07-25 07:39:17)

Re: Обязательный выбор для Combobox

chartcatuser wrote:

У меня mysql выдает ошибку

видимо не выбранно поле с датой
если Вы не обратили внимание, в примере поле с датой берется  из выбора в таблице  (id='+Form1.TableGrid1.sqlValue)

13 (edited by chartcatuser 2022-07-25 08:03:06)

Re: Обязательный выбор для Combobox

pavlenko.vladimir.v wrote:
chartcatuser wrote:

У меня mysql выдает ошибку

видимо не выбранно поле с датой
если Вы не обратили внимание, в примере поле с датой берется  из выбора в таблице  (id='+Form1.TableGrid1.sqlValue)

Дорогой друг наверное тебе не столь понятно давай я тебе приведу пример более подходящий там я расписал момент. Извени за настырность..)

Post's attachments

Attachment icon autocomplete2.rar 332.44 kb, 140 downloads since 2022-07-25 

14 (edited by pavlenko.vladimir.v 2022-07-25 08:27:08)

Re: Обязательный выбор для Combobox

chartcatuser wrote:

Дорогой друг наверное тебе не столь понятно давай я тебе приведу пример более подходящий там я расписал момент. Извени за настырность..)

что за ближайшая дата? от куда она берется?
Зачем передовать дату в DateTimePicker ?
где хранятся списки дат? даты привязаны к конкретной записи или просто свободный выбор????

15 (edited by chartcatuser 2022-07-25 12:47:09)

Re: Обязательный выбор для Combobox

pavlenko.vladimir.v wrote:
chartcatuser wrote:

Дорогой друг наверное тебе не столь понятно давай я тебе приведу пример более подходящий там я расписал момент. Извени за настырность..)

что за ближайшая дата? от куда она берется?
Зачем передовать дату в DateTimePicker ?
где хранятся списки дат? даты привязаны к конкретной записи или просто свободный выбор????

Ближайшая дата из всего списка дат которые привязаны к id  Item   
я вот сделал  кое что но у меня при поиске выдает ошибку....
Вообщем я просто налепил сверху таблицу и сделал на нее поиск а сам поиск привязал к первой таблице где хранятся item ну при первом поиске все нормально выдает даты которые привязаны к конкретной записи  выходишь из формы обратно заходишь и когда пытаешься опять нажать поиск по 1 таблице выдает такую ошибку, я вот думаю может кнопку через sql  запрос сделать ?
у меня есть таблица
bsm_new - где храняться ITEM
ordert - там храняться даты там есть поле date

и вот ругается при повторном поиске >....

Post's attachments

Attachment icon Безымянный.png 3.52 kb, 65 downloads since 2022-07-25 

16 (edited by sparrow 2022-07-25 13:39:35)

Re: Обязательный выбор для Combobox

Can you use punctuation marks (comma, period, newline....whatever)  or simple logic in your questions,
or just common sense??? I have no doubt that you understand what you yourself wrote.
How did k245 write the meaning of where is your question ???
And stop posting in all forum threads.
They do not answer you for a simple reason,
NO ONE UNDERSTANDS YOU.
The logic is simple, if not feminine. Forgive me women.
There is a tree
What you need, sticks.
Tell me how to cut.
First we think what to write, then we write.

Re: Обязательный выбор для Combobox

Ну понял. Просто мысли вперед нажатия на клавиатуру лезут..

18 (edited by pavlenko.vladimir.v 2022-07-26 08:42:12)

Re: Обязательный выбор для Combobox

chartcatuser wrote:
pavlenko.vladimir.v wrote:
chartcatuser wrote:

Дорогой друг наверное тебе не столь понятно давай я тебе приведу пример более подходящий там я расписал момент. Извени за настырность..)

что за ближайшая дата? от куда она берется?
Зачем передовать дату в DateTimePicker ?
где хранятся списки дат? даты привязаны к конкретной записи или просто свободный выбор????

Ближайшая дата из всего списка дат которые привязаны к id  Item   
я вот сделал  кое что но у меня при поиске выдает ошибку....
Вообщем я просто налепил сверху таблицу и сделал на нее поиск а сам поиск привязал к первой таблице где хранятся item ну при первом поиске все нормально выдает даты которые привязаны к конкретной записи  выходишь из формы обратно заходишь и когда пытаешься опять нажать поиск по 1 таблице выдает такую ошибку, я вот думаю может кнопку через sql  запрос сделать ?
у меня есть таблица
bsm_new - где храняться ITEM
ordert - там храняться даты там есть поле date

и вот ругается при повторном поиске >....

так а что тут не получается?

Form1.DateTimePicker1.DateTime := SQLDateTimeToDateTime(SQLexecute('SELECT name3 FROM NAMES WHERE id='+Form1.TableGrid1.sqlValue));

просто TableGrid1 смените на ComboBox1
 
но у меня все равно не полчается Вас понять, если у Вас уже есть список дат, то зачем снова создавать дату? и DateTimePicker тоже не понятно зачем нужен, просто сохраните выбранную дату из ComboBox .
зачем Вам запрос LEFT OUTER JOIN ?

Re: Обязательный выбор для Combobox

pavlenko.vladimir.v wrote:
chartcatuser wrote:
pavlenko.vladimir.v wrote:

что за ближайшая дата? от куда она берется?
Зачем передовать дату в DateTimePicker ?
где хранятся списки дат? даты привязаны к конкретной записи или просто свободный выбор????

Ближайшая дата из всего списка дат которые привязаны к id  Item   
я вот сделал  кое что но у меня при поиске выдает ошибку....
Вообщем я просто налепил сверху таблицу и сделал на нее поиск а сам поиск привязал к первой таблице где хранятся item ну при первом поиске все нормально выдает даты которые привязаны к конкретной записи  выходишь из формы обратно заходишь и когда пытаешься опять нажать поиск по 1 таблице выдает такую ошибку, я вот думаю может кнопку через sql  запрос сделать ?
у меня есть таблица
bsm_new - где храняться ITEM
ordert - там храняться даты там есть поле date

и вот ругается при повторном поиске >....

так а что тут не получается?

Form1.DateTimePicker1.DateTime := SQLDateTimeToDateTime(SQLexecute('SELECT name3 FROM NAMES WHERE id='+Form1.TableGrid1.sqlValue));

просто TableGrid1 смените на ComboBox1
 
но у меня все равно не полчается Вас понять, если у Вас уже есть список дат, то зачем снова создавать дату? и DateTimePicker тоже не понятно зачем нужен, просто сохраните выбранную дату из ComboBox .
зачем Вам запрос LEFT OUTER JOIN ?

Суть в том что даты подставляться к id конерктной записи и они все разные соответственно ля каждого ID. Вообщем решил проблему пересоздав всю форму заново и все заработало.. странно Но все равно спасибо за содействие в решении.
Сейчас пробую придумать как к конкретной записи ну например item1 привязать определенные даты не в ручную а медотом подсчета ( допустим к этой записи постоянно подставлялись даты только понедельника и четверга )  я пока в ручную занес на целый год прям в самой БД ))