Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 410

/ вопрос решён /

Доброго времени суток уважаемые эксперты! Столкнулся с проблемой в базе есть столбец «Полныхлет», в нем храниться полный возраст студента, высчитывается исходя из даты рождения, когда добавляют студента. Проблема в том, что по истечению года например возраст должен поменяться, после того как студент уже занесен в базу. Поэтому я хочу сделать чтобы после запуска программы заново просчитывался полный возраст, для каждого студента. У меня не получается сделать перерасчет каждой записи в базе, при создание формы. Ниже приведен код, который компилируется, но после запуска выдает ошибку. Возможно он вообще не правильный. Очень прошу вас помочь. За ранние благодарен за помощь.

Приложение:
  1. procedure TForm2.FormCreate(Sender: TObject);
  2. var
  3. today: TDateTime;
  4. yearcount:integer;
  5. begin
  6.  
  7. begin
  8.  
  9.  
  10. begin
  11. today:=date();
  12.  
  13.  
  14.  
  15.  
  16.  
  17. end;
  18. end;
  19.  
  20. end;


alexlafa Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: alexlafa (статус: Посетитель)
Вопрос отправлен: 14 июня 2011, 14:20
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: corban

Здравствуйте, alexlafa!
Как же работать с таблицами если дата-модуль еще не инициализировался? перенеси этот код в дата-модуль...

Ответ отправил: corban (статус: 2-ой класс)
Время отправки: 15 июня 2011, 09:08
Оценка за ответ: 5

Комментарий к оценке: Ваш ответ очень помог!

Мини-форум вопроса

Всего сообщений: 36; последнее сообщение — 15 июня 2011, 12:00; участников в обсуждении: 6.

Страницы: [« Предыдущая] [1] [2]

alexlafa

alexlafa (статус: Посетитель), 14 июня 2011, 19:28 [#21]:

ДА :-))))
alexlafa

alexlafa (статус: Посетитель), 14 июня 2011, 19:32 [#22]:

Егор:
//Если убрать только в одном месте то выдаеться такая же ошибка, останавливаясь на этой строке
datamodule3.ADOTable1['Полныхлет'].First;
Егор

Егор (статус: 10-ый класс), 14 июня 2011, 19:36 [#23]:

а, да. гоню. всё правильно сделал.
пройдись отладчиком - почему зацикливается-то? и что означает фраза "с базой твориться что то ужасное"?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
bugmenot

bugmenot (статус: 3-ий класс), 14 июня 2011, 21:12 [#24]:

На самом деле тут мало смешного, ибо программист в силу особенностей мышления стремится писать без ошибок. Лично я бы не допустил к работе, если бы меня таким неприличным словом назвали.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 14 июня 2011, 21:43 [#25]:

Цитата (Егор):

datamodule3.ADOTable1['Полныхлет']:=IntToStr(yearcount);

вот это надо подправить на
datamodule3.ADOTable1['Полныхлет'].value:=IntToStr(yearcount);
или
datamodule3.ADOTable1['Полныхлет'].asinteger:=yearcount;
вообще хранить числовые значения в строковых полях - это "супер"
alexlafa

alexlafa (статус: Посетитель), 15 июня 2011, 05:33 [#26]:

 Попробовал подправить двумя вариантами, у обоих точно такая же реакция как и раньше. Из ДБГрида исчезают записи, полоса
прокрутки о пускается вниз и не подниматься вверх, зацикливаеться.    
datamodule3.ADOTable1.FieldByName('Полныхлет').Value:=IntToStr(yearcount);
datamodule3.ADOTable1.FieldByName('Полныхлет').asinteger:= yearcount ;
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 июня 2011, 05:35 [#27]:

Цитата (alexlafa):

yearcount := (trunc(today) - trunc(strtodate (datamodule3.ADOTable1['Дата рождения']))) div 365;

эту конструкцию надо заменить на:
yearcount:=YearsBetween(today,datamodule3.ADOTable1['Дата рождения'].asDatetime);

вопрос зацикливания пока не рассматривал
alexlafa

alexlafa (статус: Посетитель), 15 июня 2011, 05:47 [#28]:

YearsBetween - а это что?!
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 июня 2011, 05:48 [#29]:

обычно зацикливание происходит, если вот эту строку

Цитата (alexlafa):

datamodule3.ADOTable1.Next;

либо забыли совсем, либо поставили после цикла.
еще вариант, вместо

Цитата (alexlafa):

not datamodule3.ADOTable1.Eof

поставили
not datamodule3.ADOTable1.Bof
или not забыли
alexlafa

alexlafa (статус: Посетитель), 15 июня 2011, 05:55 [#30]:

yearcount :=YearsBetween(today,datamodule3.ADOTable1.FieldByName('Дата рождения').asDatetime); все равно такаяже реакция %-(
alexlafa

alexlafa (статус: Посетитель), 15 июня 2011, 05:58 [#31]:

Мережников Андрей: Пересмотрел процедуру полность, все на своих местах, и так как надо!
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 июня 2011, 06:02 [#32]:

Цитата (alexlafa):

YearsBetween - а это что?!

функция такая. Описание можно найти в help. Я уже писал, что мои поправки не влияют на зацикливание.
Выше уже давался совет - проверить выполнение программы трассировкой.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 июня 2011, 06:10 [#33]:

к ADOTable1 "подвешен" какой-то DBGrid? Там "случайно" не прописана какая-нибудь реакция на события?
точно используется datamodule3.adotable1.edit, а не append?
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 июня 2011, 06:11 [#34]:

Цитата (alexlafa):

все на своих местах, и так как надо!

если бы было так, как надо, то и работало бы так, как надо.
alexlafa

alexlafa (статус: Посетитель), 15 июня 2011, 06:26 [#35]:

К ADOTable1 "подвешен" какой-то DBGrid? Да, есть DBGrid, подвешанный к ADOtalble! У меня событие только одно в DBGrid-е DBGrid1CellClick событие для отображения студента, в Adotable вообще нет!
alexlafa

alexlafa (статус: Посетитель), 15 июня 2011, 12:00 [#36]:

Сделал на событие создание датамодуль, сделал еще один ADOTALBE2, а то если бы использовал ADOTALBE1 то Дбгрид пустой был почему то пукстой, теперь пересчитывает, и все работает. Благодарю всех за помощь :-)

15 июня 2011, 12:02: Статус вопроса изменён на решённый (изменил автор вопроса — alexlafa)

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:26
Выполнено за 0.04 сек.