Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2013, 18:40   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию Oracle+Delphi { Вычисляемые поля } деление не работает, если в столбцов ест 0

Здравствуйте ребята. ест простой таблица

Код:
create table test2
(
 tid number(10),
 tname nvarchar2(40),
 chislo1 number(8,2),
 chislo2 number(8,2)
)
Бывает что поля chislo1 и chislo1 может содержит число 0 ,таком виде

chislo1
----------
30
50
0
10
0
40


chislo2
----------------------------
15
20
0
3
0
12

мне надо сделать вычисляемые поля из Delphi в таком логике chislo1 / chislo2 * 100 делаю так


Код:
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
        OraQuery1Vichislenie.DisplayFormat := '#####.##';
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat /
    OraQuery1.FieldByName('CHISLO2').AsInteger *100  ;
end;
Выводить ошибок . потому у меня в chislo1 и chislo2 ест 0
Вопрос : Как обойти в таком ситуация ? как реализовать такой логика, До пустим , если chislo1 / chislo2 = 0 тогда он написал неправильный ответ 1 , или может у кого то хороший вариант. ??? Ребята помогите пожалуйста, это логика надо реализовать именно из Delphi . Без SQL . Задача такой .
Что делать ребята ? Пожалуйста помогите решат это задачу

Последний раз редактировалось xxbesoxx; 15.08.2013 в 19:16.
xxbesoxx вне форума Ответить с цитированием
Старый 15.08.2013, 19:23   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Такой логика хочу внутри этого кода

Код:
 procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
    OraQuery1Vichislenie.DisplayFormat := '#####.##';
    if OraQuery1Vichislenie.Value = 0 then begin
      0+1
    end;
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat /
    OraQuery1.FieldByName('CHISLO2').AsInteger *100  ;
end;
Но так не работает
xxbesoxx вне форума Ответить с цитированием
Старый 15.08.2013, 19:53   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

как-то так
Код:
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
  OraQuery1Vichislenie.DisplayFormat := '#####.##';
  if OraQuery1.FieldByName('CHISLO2').AsFloat = 0 then 
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / 0.01 * 100
  else 
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / OraQuery1.FieldByName('CHISLO2').AsFloat * 100;
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.08.2013, 19:54   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Для отображения подойдет? Math в uses
Код:
if OraQuery1.FieldByName('CHISLO2').AsInteger = 0 
  then OraQuery1Vichislenie.AsFloat:= Infinity
  else OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / OraQuery1.FieldByName('CHISLO2').AsInteger *100
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.08.2013, 20:35   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Для отображения подойдет? Math в uses
Код:
if OraQuery1.FieldByName('CHISLO2').AsInteger = 0 
  then OraQuery1Vichislenie.AsFloat:= Infinity
  else OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / OraQuery1.FieldByName('CHISLO2').AsInteger *100
Если так, Тоже самое ошибка

Код:
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
 // uses   Math,
begin
   if OraQuery1.FieldByName('CHISLO2').AsInteger = 0
   then  OraQuery1Vichislenie.AsFloat:= Infinity
else
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat /
    OraQuery1.FieldByName('CHISLO2').AsInteger *100  ;
end;
в поля CHISLO1 здесь тоже 0 ели я добавлю вот так

Код:
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
 // uses   Math,
begin
   if OraQuery1.FieldByName('CHISLO2').AsInteger = 0
   then  OraQuery1Vichislenie.AsFloat:= Infinity ;
   if OraQuery1.FieldByName('CHISLO1').AsInteger = 0
   then  OraQuery1Vichislenie.AsFloat:= Infinity
else
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat /
    OraQuery1.FieldByName('CHISLO2').AsInteger *100  ;
end;
Тоже не работает . Что делать ?

Yurk@ смотрю ваши пример
Изображения
Тип файла: jpg 1.jpg (70.3 Кб, 120 просмотров)
Тип файла: jpg 2.jpg (77.8 Кб, 111 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 15.08.2013, 20:42   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
как-то так
Код:
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
  OraQuery1Vichislenie.DisplayFormat := '#####.##';
  if OraQuery1.FieldByName('CHISLO2').AsFloat = 0 then 
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / 0.01 * 100
  else 
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / OraQuery1.FieldByName('CHISLO2').AsFloat * 100;
end;
Yurk@ Огромное спасибо . Вот это да СУПЕР .... профессиональный подход. спасибо друг работает

Код:
procedure TForm1.OraQuery1CalcFields(DataSet: TDataSet);
begin
if OraQuery1.FieldByName('CHISLO2').AsFloat = 0 then
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat / 0.01 * 100
else
    OraQuery1Vichislenie.AsFloat := OraQuery1.FieldByName('CHISLO1').AsFloat /
    OraQuery1.FieldByName('CHISLO2').AsInteger *100  ;
end;
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисляемые поля Tanzor69 БД в Delphi 21 30.04.2013 13:40
вычисляемые поля иван_пропал SQL, базы данных 5 26.12.2012 14:45
Вычисляемые поля - ? Evgenii БД в Delphi 2 06.08.2009 17:03
Вычисляемые поля Defort БД в Delphi 0 03.12.2006 11:18