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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2010, 22:23   #1
Mollerat
Пользователь
 
Аватар для Mollerat
 
Регистрация: 11.03.2009
Сообщений: 25
По умолчанию База данных Access-Delphi. Считать текущую дату и сравнить ее с датой в ячейки базы.

Всем привет!

Помогите мне плиз с одной интересной но сложной (покрайней мере для меня) задачкой.

Сделал БД в Access и без проблем связал её в Delphi. Дальше не могу автоматизировать ее таким образом:
Программа проверяет данные в базе:
1. После наступлении даты указанной в ячейки «срок гарантии»:
А) В ячейки таблицы «статус гарантии» должны автоматически вводится запись «активна» или «истекла» (мы сами вручную эти записи не должны изменять, и они являются как критерием поиска по базе приборов истекшей гарантией, так фильтром для следующей проверки, т. е. при следующий проверки гарантии найдя просроченную дату он проверяет запись в статусе, если в записи уже стоит «истекла», то эта запись уже игнорируется).
Б) Должны выдавать сообщение о том, что сегодня истекает срок гарантии, и выводить таблицу с данными по этим приборам.
2. Тоже самое должно происходить и со списанием, с одной лишь разницей: программа сама не может списывать устройства, она лишь, по наступлению даты, должна постоянно напоминать про сроки. И прекратить это делать, когда будут заполнены ячейки приказов о списании и поставлен в ячейки «статус годности» «списан» (здесь уже в ручную). Так же мы в ручную можем досрочно списать устройство (в случае если оно вышло из строя в результате эксплуатации).

Еще препод намекнул, что если смогу сделать автоматическую очистку базы от этих записей через указанное (должно вводиться пользователем) количество дней со дня подписания приказа (ячейка «ДатаПриказа») – но кажется это уж слишком для меня.

Как это реализовать можно в Delphi?
Заранее благодарю!
Вложения
Тип файла: rar МБаза.rar (368.2 Кб, 61 просмотров)
Mollerat вне форума Ответить с цитированием
Старый 24.01.2010, 23:11   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Текущая дата - Round(Now)
В таблице - FieldByName(«срок гарантии»).Value
mihali4 вне форума Ответить с цитированием
Старый 25.01.2010, 17:07   #3
Mollerat
Пользователь
 
Аватар для Mollerat
 
Регистрация: 11.03.2009
Сообщений: 25
По умолчанию

Цитата:
FieldByName(«срок гарантии»).Value
Я пробовал, но так он берет только 1 запись. А как пройти по всем, записям в столбце?
Mollerat вне форума Ответить с цитированием
Старый 25.01.2010, 17:09   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Table -> F1
First
Next
Eof
mihali4 вне форума Ответить с цитированием
Старый 25.01.2010, 18:01   #5
Mollerat
Пользователь
 
Аватар для Mollerat
 
Регистрация: 11.03.2009
Сообщений: 25
По умолчанию

Имеется ввиду что то подобное?
Код:
ADOTable1.First;
while not ADOTable1.EOF do
    begin
     if ADOTable1.FieldByName('срок гарантии').Value<=Round(Now) then
     ??? else ???
    end;
   next
В принципе работает... А как кстати присвоить в соседнюю ячейку "Статус гарантии" значения "активна" и "истекла"?
Mollerat вне форума Ответить с цитированием
Старый 25.01.2010, 19:25   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
FieldByName(«Статус гарантии»).Value:="активна";
mihali4 вне форума Ответить с цитированием
Старый 25.01.2010, 20:27   #7
Mollerat
Пользователь
 
Аватар для Mollerat
 
Регистрация: 11.03.2009
Сообщений: 25
По умолчанию

Не работает так...((
Пишет вот такое сообщение
Изображения
Тип файла: jpg 1.JPG (17.0 Кб, 149 просмотров)
Mollerat вне форума Ответить с цитированием
Старый 25.01.2010, 20:54   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если примерно так?
Код:
  begin
    AdoTable1.Edit;
    FieldByName(«Статус гарантии»).Value:="активна";
    AdoTable1.Post;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.01.2010, 20:56   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

проще всего сравнить данные таблицы с текущей датой в самом запросе и при помощи case вернуть флаговое 0 или 1 в зависимости от удовлетворения условию - не надо в коде изобретать велосипед
soleil@mmc вне форума Ответить с цитированием
Старый 25.01.2010, 21:34   #10
Mollerat
Пользователь
 
Аватар для Mollerat
 
Регистрация: 11.03.2009
Сообщений: 25
По умолчанию

Цитата:
begin
AdoTable1.Edit;
FieldByName(«Статус гарантии»).Value:="активна";
AdoTable1.Post;
end;
Да) работает спс... чтож уже есть прогресс спасибо.

Цитата:
Б) Должны выдавать сообщение о том, что сегодня истекает срок гарантии, и выводить таблицу с данными по этим приборам.
Cообщение выдает. а как сделать так чтобы эти данные по истекшим гарантиям выводились в DBgrid?
Mollerat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База Данных. Access и Delphi skrudjmagdak Помощь студентам 2 05.01.2010 20:12
база Данных в Access nariku Фриланс 3 26.10.2009 12:36
Вставить текущую дату в DBGrid MargoNik БД в Delphi 4 17.09.2009 03:59
прописать текущую дату vostok Microsoft Office Excel 8 06.09.2009 19:39
База данных Access Xeon332 Помощь студентам 5 19.01.2009 03:13