Topic: вычисляемое поле с условием

подскажите на примере теста на iq:
Считаю сумму правильных ответов в вычисляемом поле1 и вывожу в tablegrid.
Хочу в соседнем столбце в поле2 записывать "диагноз" который зависит от вычисляемого поля1, то есть, например, если вычисляемое поле1 > 80 < 89 записать в поле 2 - "Интеллект ниже среднего" и т.п.
Как это правильно сделать?

2 (edited by sibprogsistem 2019-01-17 16:55:16)

Re: вычисляемое поле с условием

zc13569 wrote:

подскажите на примере теста на iq:
Считаю сумму правильных ответов в вычисляемом поле1 и вывожу в tablegrid.
Хочу в соседнем столбце в поле2 записывать "диагноз" который зависит от вычисляемого поля1, то есть, например, если вычисляемое поле1 > 80 < 89 записать в поле 2 - "Интеллект ниже среднего" и т.п.
Как это правильно сделать?

примерно так

if (s>80) AND (s<89) then form1.edit1.text:='Интеллект ниже среднего';

где s переменная содержащая число..

Re: вычисляемое поле с условием

Пожалуйста покажите содержимое вычисляемого поле1

Dmitry.

4 (edited by zc13569 2019-01-18 07:27:08)

Re: вычисляемое поле с условием

DriveSoft wrote:

Пожалуйста покажите содержимое вычисляемого поле1

Поле1+Поле2+Поле3

под полем2 в которое мне нужно записать "диагноз" я подразумеваю ячейку tablegrid

Re: вычисляемое поле с условием

zc13569 wrote:

подскажите на примере теста на iq:
Считаю сумму правильных ответов в вычисляемом поле1 и вывожу в tablegrid.
Хочу в соседнем столбце в поле2 записывать "диагноз" который зависит от вычисляемого поля1, то есть, например, если вычисляемое поле1 > 80 < 89 записать в поле 2 - "Интеллект ниже среднего" и т.п.
Как это правильно сделать?

На уровне запросов:

Создайте другое вычисляемое поле, с использованием выражения CASE  (см. https://www.sqlite.org/lang_expr.html )

CASE  WHEN <условие 1> THEN <результат 1> WHEN <условие 2> THEN <результат 2> ELSE <результат 3> END


Скриптами:

В обработчике onChage() для таблицы пройдитесь в цикле по всем ячейкам таблицы (свойство cells[] ) и выполните замену на нужный текст

for i:=0 to Form1.TableGrid1.RowCount - 1 do
begin
  tmpVal := strtoint( Form1.TableGrid1.cells[ 1, i] );
  if tmpVal > 80 and tmpVal < 89 then Form1.TableGrid1.cells[ 2, i] := 'Интеллект ниже среднего';
  ...
end;
Визуальное программирование: блог и телеграм-канал.

Re: вычисляемое поле с условием

Пример выч. поля для диагноза

CASE
 WHEN (Поле1+Поле2+Поле3) <= 80 THEN 'низкий'
 WHEN (Поле1+Поле2+Поле3) > 80 AND (Поле1+Поле2+Поле3) < 90 THEN 'средний'
 WHEN (Поле1+Поле2+Поле3) >= 90 THEN 'высокий'
END
Dmitry.

Re: вычисляемое поле с условием

Всем спасибо.
А можно ли поместить результат вычислений на форму в Label или Еdit?

Re: вычисляемое поле с условием

zc13569 wrote:

Всем спасибо.
А можно ли поместить результат вычислений на форму в Label или Еdit?

form1.label1.Caption:=
form1.edit1.text:=

Re: вычисляемое поле с условием

sibprogsistem wrote:
zc13569 wrote:

Всем спасибо.
А можно ли поместить результат вычислений на форму в Label или Еdit?

form1.label1.Caption:=
form1.edit1.text:=

Это понятно. Откуда и как его туда поместить?
Сейчас оно вычисляется в Table.Sum как (значение1+значение2+значение3) и выводится гриде.

Re: вычисляемое поле с условием

ну логика разная
можете в переменную вывести результать а там уже
if (переменная > 80) AND (переменная < 89) then form1.label1.Caption:='Интеллект ниже среднего';

11 (edited by levrussia174 2023-10-22 08:39:15)

Re: вычисляемое поле с условием

Здравствуйте! Первый раз сижу за программой.  Сверху читал... нечего не понял, от куда что взяли. Подскажите пожалуйста на моем примере, как посчитать количество по условию.

Re: вычисляемое поле с условием

levrussia174 wrote:

Здравствуйте! Первый раз сижу за программой.  Сверху читал... нечего не понял, от куда что взяли. Подскажите пожалуйста на моем примере, как посчитать количество по условию.

загрузите проект

Re: вычисляемое поле с условием

Мне пишет, что файл слишком велик. Давайте я картинку вышлю

Post's attachments

Attachment icon Куда надо вывести значение по условию.png 32.23 kb, 14 downloads since 2023-10-22 

Re: вычисляемое поле с условием

Удалите файл .exe из папки приложения (он создается заново при открытии приложения), а затем сожмите оставшееся содержимое папки приложения. После этого вы сможете добавить его как вложение.
Всегда лучше делать это вместо снимка экрана, поскольку могут возникнуть другие проблемы, которые мы сможем увидеть и предложить варианты решения.
Derek.
.
Delete the .exe file in your application folder (it gets re-created when the application opens) and then compress the remaining contents of the application folder.  You should then be able to add it as an attachment.
It is always better to do this instead of a screen shot as there might be other problems that we can see and suggest options for.

15 (edited by pavlenko.vladimir.v 2023-10-22 21:00:25)

Re: вычисляемое поле с условием

levrussia174 wrote:

Мне пишет, что файл слишком велик. Давайте я картинку вышлю

 // Перебором ячеек
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    if (Form1.TableGrid1.Cells[1,i] = 'Петр') then j := j+1;
  Form1.Label3.Caption := 'Петр : '+IntToStr(j);

  // Запросам SQL
  Form1.Label4.Caption := 'Иван : '+IntToStr(SQLExecute('SELECT COUNT(id) FROM a WHERE ab="Иван"'));
Post's attachments

Attachment icon test.rar 3.92 kb, 56 downloads since 2023-10-22 

Re: вычисляемое поле с условием

derek wrote:

Удалите файл .exe из папки приложения (он создается заново при открытии приложения), а затем сожмите оставшееся содержимое папки приложения. После этого вы сможете добавить его как вложение.
Всегда лучше делать это вместо снимка экрана, поскольку могут возникнуть другие проблемы, которые мы сможем увидеть и предложить варианты решения.
Derek.
.
Delete the .exe file in your application folder (it gets re-created when the application opens) and then compress the remaining contents of the application folder.  You should then be able to add it as an attachment.
It is always better to do this instead of a screen shot as there might be other problems that we can see and suggest options for.


Хорошо, спасибо, буду иметь ввиду.

17 (edited by levrussia174 2023-10-23 14:22:21)

Re: вычисляемое поле с условием

pavlenko.vladimir.v wrote:
levrussia174 wrote:

Мне пишет, что файл слишком велик. Давайте я картинку вышлю

 // Перебором ячеек
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    if (Form1.TableGrid1.Cells[1,i] = 'Петр') then j := j+1;
  Form1.Label3.Caption := 'Петр : '+IntToStr(j);

  // Запросам SQL
  Form1.Label4.Caption := 'Иван : '+IntToStr(SQLExecute('SELECT COUNT(id) FROM a WHERE ab="Иван"'));

Спасибо, помогло, тот и тот способ можно использовать в разных задачах.

Re: вычисляемое поле с условием

Здравствуйте!

Пытаюсь сделать условие переноса с временных значений ComboBox идея как это сделать уже есть, но нет пока-что  знаний как правильно написать код (скрипт) на проверку с условием.


На форме "select-Avto" есть 3 шт ComboBox.

И такое условие: Если ComboBox 2 пустой (имеет индекс -1), то нужно взять значение из ComboBox 1 или если ComboBox 1 (имеет индекс -1) то нужно взять значение из ComboBox 2. И когда пользователь нажимает на кнопку, то уже происходит проверка на значение там или там и его переносит в TextBox, как переносить я уже знаю))


Вопрос стоит в том, как работать с множеством условий?


Проект приложил.

Как добраться до данной формы "select-Avto"?
Путь: Form 1 -> в иглу справа "кнопка Базы данных" -> Выбрать из БД любую категорию устройств (2 раза кликнуть) или выбрать и нажать на карандаш  -> снизу будет таблица из неё выбрать устройства, появиться форма frm_add_devace -> Будет TextBox "категория" рядом маленькая кнопка с лупой, вот и тогда мы попадем в форму "select-Avto".

Post's attachments

Attachment icon База ЭВМ.rar 667.15 kb, 44 downloads since 2023-10-31 

19 (edited by pavlenko.vladimir.v 2023-10-31 15:49:06)

Re: вычисляемое поле с условием

if (условие) then действие;

if (условие) then действие else
if (условие) then действие else
if (условие) then действие;
   
if (условие) then действие else действие ;
  
if (условие) then 
    if (условие) then действие else действие ;
    
if (условие) then 
begin
    действие;
    действие;
end;

if (условие) then 
begin
    действие;
    действие;
end else действие;
  
if (условие) then 
begin
    действие;
    действие;
end else
begin
    действие;
    действие;
end;

   

procedure frm_add_divace_Button8_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if (frm_add_divace.Edit10.Text <> '') then add_up_devace.ComboBox5.ItemIndex := add_up_devace.ComboBox5.Items.IndexOf(frm_add_divace.Edit10.Text);
  if (frm_add_divace.Edit11.Text <> '') then add_up_devace.ComboBox6.ItemIndex := add_up_devace.ComboBox6.Items.IndexOf(frm_add_divace.Edit11.Text);
  if (frm_add_divace.Edit12.Text <> '') then add_up_devace.ComboBox8.ItemIndex := add_up_devace.ComboBox8.Items.IndexOf(frm_add_divace.Edit12.Text);
end;
Post's attachments

Attachment icon База ЭВМ.rar 377.45 kb, 42 downloads since 2023-10-31 

20 (edited by levrussia174 2023-10-31 16:45:12)

Re: вычисляемое поле с условием

pavlenko.vladimir.v wrote:
if (условие) then действие;

if (условие) then действие else
if (условие) then действие else
if (условие) then действие;
   
if (условие) then действие else действие ;
  
if (условие) then 
    if (условие) then действие else действие ;
    
if (условие) then 
begin
    действие;
    действие;
end;

if (условие) then 
begin
    действие;
    действие;
end else действие;
  
if (условие) then 
begin
    действие;
    действие;
end else
begin
    действие;
    действие;
end;

   

procedure frm_add_divace_Button8_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if (frm_add_divace.Edit10.Text <> '') then add_up_devace.ComboBox5.ItemIndex := add_up_devace.ComboBox5.Items.IndexOf(frm_add_divace.Edit10.Text);
  if (frm_add_divace.Edit11.Text <> '') then add_up_devace.ComboBox6.ItemIndex := add_up_devace.ComboBox6.Items.IndexOf(frm_add_divace.Edit11.Text);
  if (frm_add_divace.Edit12.Text <> '') then add_up_devace.ComboBox8.ItemIndex := add_up_devace.ComboBox8.Items.IndexOf(frm_add_divace.Edit12.Text);
end;

Попробовал, но не совсем так работает (Он просто стирает TextBox), но нечего страшного, я попробую из верхних примеров собрать что ни будь. Спасибо big_smile, если будут идея я не против их попробовать.

Post's attachments

Attachment icon pAGU3TYmYL.png 76 kb, 16 downloads since 2023-10-31 

Re: вычисляемое поле с условием

levrussia174 wrote:

Попробовал, но не совсем так работает (Он просто стирает TextBox), но нечего страшного, я попробую из верхних примеров собрать что ни будь. Спасибо big_smile, если будут идея я не против их попробовать.

Вам нужен был скрипт по маленькой кнопке, а сделал его по большой кнопке с поиском

Re: вычисляемое поле с условием

pavlenko.vladimir.v wrote:
levrussia174 wrote:

Попробовал, но не совсем так работает (Он просто стирает TextBox), но нечего страшного, я попробую из верхних примеров собрать что ни будь. Спасибо big_smile, если будут идея я не против их попробовать.

Вам нужен был скрипт по маленькой кнопке, а сделал его по большой кнопке с поиском

Да, это я увидел, но я  его перенес с редакцией, но текст так и не перенесся sad

23 (edited by pavlenko.vladimir.v 2023-10-31 17:34:34)

Re: вычисляемое поле с условием

levrussia174 wrote:

Да, это я увидел, но я  его перенес с редакцией, но текст так и не перенесся sad

там не текст переноситься
если edit не пуст, то  установить индекс  combobox  равный индексу записи в листе списка ( запись взять из edit)
если у combobox в списке нет таких записей, то он и не сработает

24 (edited by levrussia174 2023-10-31 18:06:20)

Re: вычисляемое поле с условием

pavlenko.vladimir.v wrote:
levrussia174 wrote:

Да, это я увидел, но я  его перенес с редакцией, но текст так и не перенесся sad

там не текст переноситься
если edit не пуст, то  установить индекс  combobox  равный индексу записи в листе списка ( запись взять из edit)
если у combobox в списке нет таких записей, то он и не сработает

Текст едита не должен быть зависим от ID айтема ComboBox, нужно просто текст переносить из ComboBox в Edit и всё ))) просто нужно переносить текст по условию выбор из комбобоксов и всё.


Есть такое момент человек хочет вести значение в Edit, но у него есть возможность вести значение как: Саморучно в Edit или выбрать из предлагаемых комбобоксов, которые поделены на 3 группы:


1 - выбор справочника и значение из выбрного справочника
2 - Все значения из всех справочников
3 - Выбор значений из уже ранее введенного текста в БД устройств
Все эти группы и выгрузка значений уже реализована
Не реализовано только перенос текста по условию, нужно именно текст перенести


Чтобы перенести текст из ComboBox, это просто   (имя формы.ComboBox2.Text), мне нужно только проверка на значения в комбобоксах и оставлять только одно значение, когда другие комбобоксы пустые)) Вот такая система.


или же просто понять что ему это не надо и просто закроет форму и значение из edita останется не изменым.

25 (edited by levrussia174 2023-10-31 18:16:34)

Re: вычисляемое поле с условием

pavlenko.vladimir.v wrote:
levrussia174 wrote:

Да, это я увидел, но я  его перенес с редакцией, но текст так и не перенесся sad

там не текст переноситься
если edit не пуст, то  установить индекс  combobox  равный индексу записи в листе списка ( запись взять из edit)
если у combobox в списке нет таких записей, то он и не сработает

Или можно сделать костально.
Создать Edit и при выборе значений из ComboBox, и при клике на ComboBox то просто edit чистить и записывать из другого ComboBox с заменной текста и потом текст из Edit в Edit другой формы.