| 
| 
 | Вопрос # 5 410/ вопрос решён / | 
 |  Доброго времени суток уважаемые эксперты!  Столкнулся с проблемой в базе есть столбец «Полныхлет», в нем храниться полный возраст студента, высчитывается  исходя  из  даты рождения, когда добавляют студента. Проблема в том, что по истечению года например возраст  должен  поменяться, после того как студент уже занесен в базу. Поэтому я хочу сделать чтобы после запуска программы заново просчитывался полный возраст, для каждого студента.  У меня не получается сделать перерасчет каждой записи в базе, при создание формы. Ниже приведен код, который компилируется, но после запуска  выдает ошибку. Возможно он вообще не правильный. Очень прошу вас помочь. За ранние благодарен за помощь. Приложение:Переключить в обычный режим procedure TForm2.FormCreate(Sender: TObject);vartoday: TDateTime;yearcount:integer;begin begin  begintoday:=date();     end;end; end;
|  |   Вопрос задал: 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™ (статус: Доктор наук), 14 июня 2011, 14:26 [#1]:Про вычисляемые поля слыхал? Нафига хранить в базе возраст, если в ней же хранится дата рождения? Да ещё и пересчитывать всё это безобразие...
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | alexlafa (статус: Посетитель), 14 июня 2011, 15:12 [#2]:Возраст нужен для отчетности. |  
|   | min@y™ (статус: Доктор наук), 14 июня 2011, 15:15 [#3]: Цитата (alexlafa): Возраст нужен для отчетности.  Ну так и вычисляй его, когда нужно. Текущая дата минус дата рождения, вот и всё.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 14 июня 2011, 15:48 [#4]:повтор вопроса № 5403, не? виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | alexlafa (статус: Посетитель), 14 июня 2011, 16:25 [#5]:Нет не повтор! |  
|   | 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 (статус: Посетитель), 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 (статус: Посетитель), 14 июня 2011, 18:46 [#11]:Егор: Полныхлет храниться в текстовом! Я сделал, вычесляймое поле, оно считалось, но не заносилось в базу, и не хранилось, а так же перестали добовляться студенты по не понятным мне причинам. Я просто уже сделал запросы, их множество, целая куча разных!А как сделать запрос не имея столбца в базе незнаю. Разбираться или менять все запросы нету времени осталось два дня до рециндента. И поэтому мне надо сделать пересчет полныхлет, и после изменять данные в базе. |  
|   | Егор (статус: 10-ый класс), 14 июня 2011, 18:48 [#12]:база ms access? Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | alexlafa (статус: Посетитель), 14 июня 2011, 18:49 [#13]: //Строчка на которой останавливаеться процесс!
if datamodule3.ADOTable1['Полныхлет'].recordcount > 0 then |  
|   | 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 (статус: Посетитель), 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 (статус: 3-ий класс), 14 июня 2011, 19:09 [#17]: Цитата (alexlafa): рециндента Что такое рециндент?
 
 Цитата (Егор): отнимая даты и результат поделив на 365? мда... Вы будете смеяться, но такая же аппроксимация (чуток точнее) предлагается в DateUtils.
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |