Topic: вычислительное поле

созрел вопросичек...
одна таблица...в ней  два поля...
Вопрос: что надо написать во втором вычислительном поле,
что б просто продублировать числовое число из первого поля?
                        С Уважением и Благодарностью Роман!!!

Re: вычислительное поле

достаточно просто написать название первого поля (но нельзя в вычисляемое поле вписывать другие вычисляемые поля)

Dmitry.

Re: вычислительное поле

Спасибочки...

Re: вычислительное поле

Хорошего настроения.....

есть скрипт для вычисления...

  //калькулятор на форме

  procedure CalculateTotal;
begin
    Form7.Edit6.Value := (Form7.Edit4.Value) - (Form7.Edit5.Value); // calculate
end;

procedure Form7_Edit4_OnChange (Sender: string);
begin
    CalculateTotal;
end;

procedure Form7_Edit5_OnChange (Sender: string);
begin
    CalculateTotal;
end;

Подскажите пожайлуста , что и где дописать:
1) результат в Edit6 был всегда положительным (пример: (10)-(13)=3
Р/S в скобках всегда будут положительные числа!)
2) в Edit5 и Edit4 будут ВЕЩЕСТВ. ЧИСЛА.
перед вычислением  преобразовать в целые числа в нутри скрипта...(ноль нельзя убирать)
пример Edit4= 1,10  -  Edit5=1,20 конечный результат  Edit6=10

                                       С Уважением и Благодарностью Роман!!!

Re: вычислительное поле

1.

Form7.Edit6.Value := Abs(Form7.Edit4.Value - Form7.Edit5.Value); // calculate

2. К сожалению не понял вопроса.

Dmitry.

Re: вычислительное поле

День добрый!
На первый вопрос всё ок...
По поводу второго вопроса:
в Edit5 и Edit4 будут автоматом вводиться  ВЕЩЕСТВ. ЧИСЛА(пример: 1,1450 или 100,14)
а для точного расчёта надо эти числа преобразовать в целые числа....(11450 или 10014)
Пример: цена открытия 1,15....цена закрытия 1,17...чтобы узнать сколько цена прошла в пунктах надо
115-117=2 (пункта)
Суть вопроса: в Edit5 и Edit4 ввели ВЕЩЕСТВ. ЧИСЛА ....в скрипте выше указанном
с начало преобразовать ВЕЩЕСТВ. ЧИСЛА   в  ЦЕЛЫЕ ЧИСЛА,
т.е. ввели 0,150 в  Edit4  , а  Edit5 ввели 0,160, а скрипт произвёл вычисления с числами 150-160=10 (пунктов)
как это замудрить?

                                                                                         С Уважением и Благодарностью Роман!!!

Re: вычислительное поле

procedure Form7_Edit5_OnChange (Sender: string);
begin
    CalculateTotal*1000;
end;

8 (edited by Роман 2015-11-16 08:13:18)

Re: вычислительное поле

Всем доброго дня!
Не получилось у  меня вставить:

procedure Form7_Edit5_OnChange (Sender: string);
begin
    CalculateTotal*1000;
end;


в этот скрипт:

  //калькулятор на форме

  procedure CalculateTotal;
begin
Form7.Edit6.Value := Abs(Form7.Edit4.Value - Form7.Edit5.Value); // calculate Edit6 положительное число...
end;
procedure Form7_Edit4_OnChange (Sender: string);
begin
   CalculateTotal;
end;
procedure Form7_Edit5_OnChange (Sender: string);
begin
    CalculateTotal;
end;


выдаёт ошибку....метод научного тыка к результату не привёл....
Попробую выразить,чего хочу добиться в Рисунке...

Post's attachments

Attachment icon Пример....png 13.99 kb, 308 downloads since 2015-11-16 

Re: вычислительное поле

К сожалению не знаю как это сделать.

Dmitry.

10 (edited by Роман 2015-11-16 20:20:31)

Re: вычислительное поле

К сожалению не знаю как это сделать.

0'кей...надежда умирает последней.............................
Подскажите возможно ли решить это таким путём:
в Edit1 вставляем веществ.число, а в Edit2 отображается результат
числа которое в Edit1 умноженное на (10,100,1000,10000,100000)
т.е.ровно на столько, сколько знаков после запятой?
если да то как?

                                             С Уважением и Благодарностью Роман!!!

Re: вычислительное поле

можно так

procedure Form1_Edit1_OnChange (Sender: string);
var
    i: integer;
begin
    i := Pos(DecimalSeparator, Form1.Edit1.Text);
    if i > 0 then i := Length(Form1.Edit1.Text) - i;

    Form1.Edit2.Value := Form1.Edit1.Value;
    while i > 0 do
    begin
        Form1.Edit2.Value := Form1.Edit2.Value*10;
        Dec(i);
    end;
end;

в Edit1 вводим число, в Edit2 получаем результат

Dmitry.

Re: вычислительное поле

Супер!
моя проблемулька РЕШЕНА!!!....восторгу нет предела!!!

                     С Уважением и Благодарностью Роман!!!

13 (edited by Роман 2015-11-23 22:11:19)

Re: вычислительное поле

Доброго времени суток Дмитрий!
На форме(новая запись) для едитов есть скрипт:

// procedure CalculateTotal;
//begin
  //  Form2.Edit12.Value := (Form2.Edit11.Value) / (Form2.Edit6.Value*10); // calculate
//end;

//procedure Form2_Edit11_OnChange (Sender: string);
//begin
  //  CalculateTotal;
//end;

//procedure Form2_Edit6_OnChange (Sender: string);
//begin
   // CalculateTotal;
//end;


Проблема...........закрываю форму и при открытии этой же формы РУГАЕТСЯ....(рисунок прилагается)
Подскажите в чём я виноват?

Post's attachments

Attachment icon ошибка....png 24.57 kb, 396 downloads since 2015-11-23 

Re: вычислительное поле

Роман
Деление на ноль.

попробуйте эту строку

Form2.Edit12.Value := (Form2.Edit11.Value) / (Form2.Edit6.Value*10); // calculate

заменить на

if Form2.Edit6.Value <>0 then Form2.Edit12.Value := (Form2.Edit11.Value) / (Form2.Edit6.Value*10)
else Form2.Edit12.Value := 0;
Dmitry.

Re: вычислительное поле

О,оо! Летает...и даже не ругается.... Спасибо!!!
Вопросик такого характера:
На форме в TableGrid1 уже есть событие:

Form2_kol_OnChange

есть нужда вставить ещё одно событие для этого же TableGrid1:
Form2_TableGrid1_OnChange...Как их правильно объединить, если название процедуры не совпадают? 

                                                                             С Уважением и Благодарностью Роман!!!

Re: вычислительное поле

Роман
у одного компонента может быть только одно событие, что именно вы хотите объединить?

Dmitry.

Re: вычислительное поле

у меня есть скрипт:

//1 и 2 скрипт объеденил с общим событием:
procedure Form14_TableGrid1_OnChange (Sender: string);
var i,c: integer;
    s: string;
begin
    c := Form14.TableGrid1.RowCount - 1;
    for i := 0 to c do
begin
    s := Form14.TableGrid1.Cells[10,i];
    if ValidFloat(s)
    then if StrToFloat(s) < 0 then Form14.TableGrid1.Cell[10,i].TextColor := clRed
    else Form14.TableGrid1.Cell[10,i].TextColor := clGreen;

    if Form14.TableGrid1.Cells[3,i] = 'Real'
    then Form14.TableGrid1.Cell[3,i].Color := clSilver
    else Form14.TableGrid1.Cell[3,i].Color := clYellow;
end;
end;

появилась нужда прикрутить ещё один скрипт для TableGrid1 с OnChange....

procedure Form14_kol_OnChange (Sender: string; ACol, ARow: Integer);
var
s: string;
begin
s := VarToStr ( SQLExecute('SELECT count(id) FROM Centre ;') );
Form14.Label1.Caption:= 'количество СЧЕТОВ в базе- ' + s;
end;

у первого "Form14_TableGrid1_OnChange" вставляем в событие TableGrid1......
у второго "Form14_kol_OnChange" то же надо вставить в события  TableGrid1....
А место то нет....Как быть?

Re: вычислительное поле

procedure Form14_TableGrid1_OnChange (Sender: string);
var 
    i,c: integer;
    s: string;
begin
    c := Form14.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
      s := Form14.TableGrid1.Cells[10,i];
      if ValidFloat(s)
      then if StrToFloat(s) < 0 then Form14.TableGrid1.Cell[10,i].TextColor := clRed
      else Form14.TableGrid1.Cell[10,i].TextColor := clGreen;

      if Form14.TableGrid1.Cells[3,i] = 'Real'
      then Form14.TableGrid1.Cell[3,i].Color := clSilver
      else Form14.TableGrid1.Cell[3,i].Color := clYellow;
    end;

    s := VarToStr ( SQLExecute('SELECT count(id) FROM Centre ;') );
    Form14.Label1.Caption:= 'количество СЧЕТОВ в базе- ' + s;
end;
Dmitry.

Re: вычислительное поле

О...ПОНЯЛ...так можно прикручивать и 2, и 3.....
Дмитрий СПАСИБО ВАМ как минимум...за терпимость к нам "чудо-программистам"

                                                          С Уважением и Благодарностью Роман!!!

20 (edited by Роман 2015-11-27 00:00:48)

Re: вычислительное поле

Доброго времени суток!
если я правильно понял из постов на форуме.......в Edit нельзя вставить значения из вычисл.поля
простым или упрощённым способом...........тогда:
Помогите пожалуйста подставить вычисл.поле в скрипт.......

(SELECT TOTAL(residue.parishs) FROM residue WHERE residue.id_Centre=Centre.id)
  procedure Form14_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
 begin
  Form14.Edit1.Text := SQLExecute ('????????????????????????????????? WHERE id = '
  + IntToStr(Form14.TableGrid1.dbItemID) );
  end;

                                                                                        С Уважением и Благодарностью Роман!!!

Re: вычислительное поле

Доброго времени суток!
Дмитрий помогите пожалуйста с выше стоящим постом.....

Re: вычислительное поле

к сожалению ваш вопрос противоречив, с одной стороны у вас запрос с агрегатной функцией TOTAL для вычисления суммы записей по полю parishs, но с другой стороны в скрипте есть условие

WHERE id = '  + IntToStr(Form14.TableGrid1.dbItemID)

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

Dmitry.

Re: вычислительное поле

Благодарю за истину !

24 (edited by maxim.pohil 2015-11-30 17:12:22)

Re: вычислительное поле

Народ! Хочу побеседовать с вами по поводу вычислительного поля.

У меня есть таблица продукты

в ней есть вычислительное поле остаток (SELECT TOTAL(operatsii.prihodrashod) FROM operatsii WHERE operatsii.id_products=products.id)
это я взял из примера проекта ПРОСТОЙ СКЛАД

есть поле цена(вещественное)
есть вычислительное поле сумма(которое просто должно умножить остаток на цену)

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

DriveSoft мне подсказал что это необходимо реализовать не скриптом а через копирования буфера обмена.

Это что ручной перенос?

Re: вычислительное поле

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

(SELECT TOTAL(operatsii.prihodrashod) FROM operatsii WHERE operatsii.id_products=products.id) * поле_цена
Dmitry.