Экспертная система 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] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 14 июня 2011, 14:26 [#1]:

Про вычисляемые поля слыхал?
Нафига хранить в базе возраст, если в ней же хранится дата рождения? Да ещё и пересчитывать всё это безобразие...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
alexlafa

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

Возраст нужен для отчетности.
min@y™

min@y™ (статус: Доктор наук), 14 июня 2011, 15:15 [#3]:

Цитата (alexlafa):

Возраст нужен для отчетности.

Ну так и вычисляй его, когда нужно. Текущая дата минус дата рождения, вот и всё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot

bugmenot (статус: 3-ий класс), 14 июня 2011, 15:48 [#4]:

повтор вопроса № 5403, не?
виконання програми розпочинається з того самого мiсця, де призупинилося.

alexlafa

alexlafa (статус: Посетитель), 14 июня 2011, 16:25 [#5]:

Нет не повтор!
Gooddy

Gooddy (статус: 3-ий класс), 14 июня 2011, 18:00 [#6]:

...
Исключение или именно ошибка?
Чисти код! Чисти код! Чисти код!
Егор

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

вопрос 5403:

Цитата (alexlafa):

Зарание благодарен!

этот вопрос:

Цитата (alexlafa):

За ранние благодарен за помощь.
за "ранние" чего? ответы? :)
Заранее
и потом, заранее не благодарят

повторю вопрос min@y™: про вычисляемые поля слышал? создай вычисляемое поле. оно будет выдавать количество полных лет и при этом вычисляться каждый раз при каждом запросе. и вводить его не надо - всё само сделается. и в базе храниться не будет - ни места не занимает, ни обновления не требует.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

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

Цитата (alexlafa):

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

глянул код... ой, мамочки...

procedure TForm2.FormCreate(Sender: TObject);
var
  today: TDateTime;
  yearcount:integer;
begin
  if datamodule3.ADOTable1['Полныхлет'].recordcount > 0 then
    begin
      datamodule3.ADOTable1['Полныхлет'].First;
      while not datamodule3.ADOTable1['Полныхлет'].Eof do
        begin
          today:=date();
          yearcount := (trunc(today) - trunc(strtodate (datamodule3.ADOTable1['Дата рождения']))) div 365;
          datamodule3.ADOTable1['Полныхлет'].Edit;
          datamodule3.ADOTable1['Полныхлет']:=IntToStr(yearcount);
          datamodule3.ADOTable1['Полныхлет'].Post;
          datamodule3.ADOTable1['Полныхлет'].Next;
        end;
    end;
  datamodule3.ADOTable1['Полныхлет'].Close;
end;

количество полных лет вычисляем, отнимая даты и результат поделив на 365? мда...
а количество полных лет ещё и храним в ТЕКСТОВОМ виде?!
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
alexlafa

alexlafa (статус: Посетитель), 14 июня 2011, 18:36 [#9]:

Ошибка вот такого содержания, это на событии formshow, а на создание другая ошибка была.
Project project1.exe raised exceotion class EVariantInvalidOpError with message
'Invalid variant operation'. Process stoped. Use Step or run continue.
Егор

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

попробуй удали этот код и перезапусти - ошибка останется?
и строку, на которой ошибка произошла надо указать
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
alexlafa

alexlafa (статус: Посетитель), 14 июня 2011, 18:46 [#11]:

Егор: Полныхлет храниться в текстовом! Я сделал, вычесляймое поле, оно считалось, но не заносилось в базу, и не хранилось, а так же перестали добовляться студенты по не понятным мне причинам. Я просто уже сделал запросы, их множество, целая куча разных!А как сделать запрос не имея столбца в базе незнаю. Разбираться или менять все запросы нету времени осталось два дня до рециндента. И поэтому мне надо сделать пересчет полныхлет, и после изменять данные в базе.
Егор

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

база ms access?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
alexlafa

alexlafa (статус: Посетитель), 14 июня 2011, 18:49 [#13]:

//Строчка на которой останавливаеться процесс!
if datamodule3.ADOTable1['Полныхлет'].recordcount > 0 then
alexlafa

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

Да база Access!
Егор

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

Цитата (alexlafa):

//Строчка на которой останавливаеться процесс!
if datamodule3.ADOTable1['Полныхлет'].recordcount > 0 then

а если так?
... datamodule3.ADOTable1.recordcount ...
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
alexlafa

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

Сделал так, зацикливаеться, и с базой твориться что то ужасное))
var
today: TDateTime;
yearcount:integer;
begin
if datamodule3.ADOTable1.recordcount > 0 then
begin
datamodule3.ADOTable1.First;
while not datamodule3.ADOTable1.Eof do
begin
today:=date();
yearcount := (trunc(today) - trunc(strtodate (datamodule3.ADOTable1['Дата рождения']))) div 365;
datamodule3.ADOTable1.Edit;
datamodule3.ADOTable1['Полныхлет']:=IntToStr(yearcount);
datamodule3.ADOTable1.Post;
datamodule3.ADOTable1.Next;
end;
end;
datamodule3.ADOTable1.Close;
end;
bugmenot

bugmenot (статус: 3-ий класс), 14 июня 2011, 19:09 [#17]:

Цитата (alexlafa):

рециндента

Что такое рециндент?

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

отнимая даты и результат поделив на 365? мда...

Вы будете смеяться, но такая же аппроксимация (чуток точнее) предлагается в DateUtils.
виконання програми розпочинається з того самого мiсця, де призупинилося.

alexlafa

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

bugmenot: Это инженер-программист, на каком не будь предприятии, которому мы сдаем на проверку готовый дипломный проект, и он пару дней «шариться» в проге и пояснительной записке, ищет ошибке и указывает их, и на защите с тебя за них спрашивают. Проблема в том что после рециндента нечего нельзя менять в программе или записке!
Егор

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

Цитата (alexlafa):

с базой твориться что то ужасное
и что же?

Цитата (alexlafa):

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


блин, заставь дурака богу молиться... я же не сказал ВЕЗДЕ убирать ['Полныхлет'], а только в одном месте
возвращай обратно
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

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

Цитата (alexlafa):

Это инженер-программист

тогда это не "рециндент", а рецензент. от слова "рецензия"
:))))))))))))))
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Страницы: [1] [2] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:48
Выполнено за 0.03 сек.