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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2011, 18:33   #1
Анастас
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 35
По умолчанию Ошибка в коде

Код:
procedure TForm23.tb_detailsCalcFields(DataSet: TDataSet);
var
t:Integer;
s,pok:tdate;
begin
pok:=StrToDate(tb_details.FieldByName('Date').AsString) ;
s:= DateTimePicker1.Date;
t:=DaysBetween(pok,s);
tb_detailsIznos.Value:=(t/365)*0.25;
end;
в конце это строки tb_detailsIznos.Value:=(t/365)*0.25; выдает ошибку [Error] Unit23.pas(54): Incompatible types: 'Integer' and 'Extended', хотя в другой кнопке у меня та же запись кода, только другая формула и он работает.
Анастас вне форума Ответить с цитированием
Старый 25.10.2011, 18:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Incompatible types: 'Integer' and 'Extended' - несовместимые типы Integer и Extended. С английским тоже похоже проблемы. tb_detailsIznos.Value имеет тип Integer, а вы пытаетесь засунуть в него данные типа Extended. Delphi этого не позволяет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.10.2011, 18:44   #3
Анастас
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 35
По умолчанию

Так это я понимаю что эти два типа не совместимы, но не понимаю почему, если в другом случае тоже самое написано только другое считает, там работает все
Анастас вне форума Ответить с цитированием
Старый 25.10.2011, 18:47   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А вы покажите что за выражение в другом случае
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.10.2011, 18:53   #5
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
у меня та же запись кода, только другая формула и он работает.
Из приведенного вами куска кода видно что Вы работаете с некоей базой данных и специфическим набором компонент. В случае, указанном в этой теме, вы, скорее всего, присваиваете значение целочисленному свойству VALUE. Ошибку Вам указал Аватар.
В другом случае, присвоение может идти методу Field или другому элементу БД .
Дело в том, что VALUE у элементов БД, как правило, имеют тип variant, которому параллельно, что вы присваимваете, хоть строку, хоть число, хоть адрес.
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось mihali4; 25.10.2011 в 20:38.
JUDAS вне форума Ответить с цитированием
Старый 25.10.2011, 21:25   #6
Анастас
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 35
По умолчанию

Код:
var
t1:integer;
seg,w:tdate;
begin
c:=tb_detailsPrice.Value;
w:=StrToDate(tb_details.FieldByName('Warranty').AsString) ;
seg:= DateTimePicker1.Date;
t1:=DaysBetween(seg,w);
if
ComboBox1.Text='По сумме чисел лет полезного использования'
then
tb_detailsAmortizaciya.Value:=(c*t1)/(5*(5+1)/2);
end;
  end;
вот практический такой же код только на другой кнопке и он работает
Анастас вне форума Ответить с цитированием
Старый 25.10.2011, 21:47   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ипонятное дело. У вас там все целые числа.
ТС, как бэ умножение на дробь в результате даст дробь.. не находите?
Код:
tb_detailsIznos.Value:=(t/365)*0.25;
Воспользуйтесь функцией округления(Round) или найдите способ привести все к float.
Человек_Борща вне форума Ответить с цитированием
Старый 25.10.2011, 21:49   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Жаль что не видно описания фиелдов. Поэтому все что ниже предположительно.
В первом фрагменте tb_detailsIznos это предположительно TIntegerField. У него свойство Value имеет тип Longint. Поэтому и нельзя Extended в него засунуть. В последнем фрагменте tb_detailsAmortizaciya скорее всего имеет тип TFloatField, у него свойство Value типа Double, поэтому и нет проблем

Цитата:
У вас там все целые числа
В последнем фрагменте никаких целых, там тоже результат Extented. Что дает деление целого на целого?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.10.2011 в 21:55.
Аватар вне форума Ответить с цитированием
Старый 25.10.2011, 21:59   #9
Анастас
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 35
По умолчанию

я пробовала и не умножать на 0.25 и все равно не работает.
написала так tb_detailsIznos.Value:=Round((t/365)*0.25), прога стала запускаться, но считает все по нулям.

у меня нет описания полей, что одно что другое поле одинакового типа
Анастас вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде С++ Ирискин Помощь студентам 4 04.02.2011 15:17
Ошибка в коде xaero93 Помощь студентам 1 30.01.2011 15:08
ошибка в коде c# Roegis Помощь студентам 6 14.01.2011 13:00
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде Cronos20 PHP 3 09.07.2010 23:31