Конференция "Начинающим" » Программирование базы данных MS Access в Delphi 7 [D7, Access]
 
  • Alexlafa (07.05.11 17:34) [0]
    Доброго времени суток! Пишу программу СУБД «Студент» программа хранит, вносит, редактирует данные о студентах. Столкнулся с проблемой: по истечению даты каждого года, данные с базы должны удаляться автоматически. Например, если дата на компьютере 05.07(июля).независимо какого года. Должны удаляться 4 курс студентов. В базе присутствует столбец «Курс». Если конечно можно так сделать?! Если да то подскажите как примерно или точно, буду признателен, за любую оказанную помощь, советы, строки кода, идеи вообщем буду очень признателен!
  • sniknik © (07.05.11 18:05) [1]
    > за любую оказанную помощь, советы ...
    совет - НИКОГДА не делай удаление автоматическим, если это конечно нормальные данные, а не временные/промежуточные какие нибудь...
    делай по кнопке (решению пользователя), причем с обязательным бекапом их куда нибудь.

    хотя, конечно, проверить что текущая дата именно 5й месяц и 7й день несомненно можно... а что кстати будет/должно быть если это воскресенье и комп в этом день не включали? проверку на больше "часа х" делать? ну так это проще, и ты наверное умеешь.
  • Alexlafa (07.05.11 18:29) [2]
    Согласен можно и по нажатию кнопки сделать, тогда можно сделать так что по дате 05.07 выводилась окно с напоминанием, или отдельная форма на которой и будит описано о том что пора удалить старые данные.
    А вот насчет воскресенья полностью согласен, не подумал про это,( наверное придется делать что то вроде схожие по работе с "антивирусной базой" которая тоже выводит упоминание а потом останавливает работу антивирусника) - это пример. Спасибо за замечание. Если быть честным пока не имею представления как это задать программе. Через SQL наверное?! Только вот я с ним пока не работал! Если есть еще идеи или замечание прошу поделиться!
  • Anatoly Podgoretsky © (08.05.11 10:17) [3]
    Да тут и делать то нечего - таймер и модальный диалог.
    Вместо примера с антивирусами, можно привести пример с почтовыми базами, то не пытается само удалить, а только предлагает.
  • Anatoly Podgoretsky © (08.05.11 10:18) [4]
    Собственно не таймер, а функция DATE и сравнение с предыдущей датой.
  • YurikGL © (09.05.11 12:46) [5]
    В чем смысл удаления? Лучше сделать структуру, которая позволит хранить историю.
  • sniknik © (09.05.11 12:59) [6]
    > В чем смысл удаления?
    access не держит базу больше 2 гиг. историю при интенсивном заполнении данными приходится делать в других "исторических" базах. а рабочую соответственно чистить.
  • Sergey13 © (10.05.11 09:52) [7]
    > [0] Alexlafa   (07.05.11 17:34)
    > Должны удаляться 4 курс студентов.
    Техникум?
    Этих удалять, а всех остальных переименовывать что-ли?
    ИМХО - двойка за проектирование. Lafa - кончилась. 8-)

    > [6] sniknik ©   (09.05.11 12:59)
    ИМХО если в БД не делать блоги студентов с фотками и видео, то 2 гектар лет на 200 хватит. 8-)
  • sniknik © (10.05.11 10:09) [8]
    > ИМХО если в БД не делать блоги студентов с фотками и видео, то 2 гектар лет на 200 хватит. 8-)
    я и не спорю, более того, чаще всего даже при довольно активной работе "на работе" (ну например лог/база/чековая лента от 4х касс, в довольно людном районе) хватает на несколько лет... магазины раньше "разваливаются"/закрываются прежде чем требуется "обрезание".
    бывает и по другому, когда идиоты менеджеры в магазин с 43 кассами продают ассесс(вместо mssql) версию бек офиса. и проблемы начинаются через месяц, два, т.к. им не сказали, что на ней есть какие то ограничения и нужно делать "сброс в архив".

    но тут немного не о том, а о "в чем смысл", и в чем смысл "смысла обучения", зачем учится делать то, что в процессе обучения не нужно... ???
  • VirEx © (25.05.11 13:23) [9]
    >sniknik ©   (10.05.11 10:09) [8]

    вместо акцеса лучше бы SQLite
    правда размер файла базы будет зависеть от файловой системы
  • VirEx © (25.05.11 13:24) [10]
    >VirEx ©   (25.05.11 13:23) [9]
    > >sniknik ©   (10.05.11 10:09) [8]
    >
    > вместо акцеса лучше бы SQLite
    > правда размер файла базы будет зависеть от файловой системы


    кстати, у вас случаем не фат32?
  • Dennis I. Komarov © (25.05.11 13:37) [11]

    > вместо акцеса лучше бы SQLite

    На чем основывается столь безаппеляционное утверждение?
  • sniknik © (25.05.11 13:51) [12]
    > вместо акцеса лучше бы SQLite
    чем? я вот когда его пробовал поймал "глюк" время инсерта 1 записи зависит(ло?) от размера таблицы. т.е. к примеру (конкретных цифр не помню) 1000 записей при таблице размером в 1 мб вставляется 1 сек, а вот если размер уже 50 мб то 30 сек.
    у аксесс такой зависимости не обнаруживал, даже когда 1 таблица в базе, т.е. приблизительно = размеру базы, и размер ее гигобайт скорость вставки такая же как в начале на 1 мб.
  • VirEx © (25.05.11 14:52) [13]
    >Dennis I. Komarov ©   (25.05.11 13:37) [11]
    >
    > > вместо акцеса лучше бы SQLite
    >
    > На чем основывается столь безаппеляционное утверждение?


    тем что достаточно одной библиотеки, не привязано к офису
  • Anatoly Podgoretsky © (25.05.11 14:59) [14]
    > VirEx  (25.05.2011 14:52:13)  [13]

    Тогда лучше вообще без библиотек, кстати и Access не привязан к офису.
  • VirEx © (25.05.11 15:00) [15]
    >sniknik ©   (25.05.11 13:51) [12]

    предполагаю что скорость работы зависит от грамотной архитектуры базы и настройки компонента
    полагаю можно настроить компонент так, чтобы после каждого добавления записи не было сброса на диск (flush), возможно есть фишка для авторезервирования места под запись и тд
  • sniknik © (25.05.11 15:05) [16]
    > тем что достаточно одной библиотеки, не привязано к офису
    шо то вы себе навидумивали...
    для Access и библиотеки не нужно, стандартными из дельфи обходится (т.е. не нужно скачивать/устанавливать/таскать с собой исходный код... есть дельфи > 4 версии = есть все что нужно), и к офису он не привязан.
  • Dennis I. Komarov © (25.05.11 15:06) [17]

    > кстати и Access не привязан к офису.

    Точно да, и это очень весомый аргумент в его пользу...
  • sniknik © (25.05.11 15:09) [18]
    > возможно есть фишка для авторезервирования места под запись и тд
    несомненно есть. достаточно почитать инет на предмет воплей  о "лишнем размере" у баз аксесса и желании его убрать... а это всего лишь рабочая пред выделенная  область, оптимизация на скорость.
    у SQLite такой нет. и "грамотная настройка" компонента для sql запросов что мертвому припарки.
  • Anatoly Podgoretsky © (25.05.11 15:55) [19]

    > Точно да, и это очень весомый аргумент в его пользу...

    Весомый это когда используется бесплатный MS SQL - 10 гб достаточно большинству, а тем кому этого мало значит они рискуют бизнесом, иначе бы купили коммерческую версию.
  • Anatoly Podgoretsky © (25.05.11 15:56) [20]
    Кстати с MS SQL база так быстро не растет и сжимать ее не надо.
  • Dennis I. Komarov © (25.05.11 16:05) [21]

    > Anatoly Podgoretsky ©   (25.05.11 15:55) [19]

    Тут можно с разных сторон посмотреть...
  • Anatoly Podgoretsky © (25.05.11 16:09) [22]
    Не тут однозначно, 10 гб большой размер и там уже другие подходы к надежности и к прочему. Там уже стоимость СУБД на большая по отношению к другим расходам.
  • Dennis I. Komarov © (25.05.11 17:00) [23]

    > Anatoly Podgoretsky ©   (25.05.11 16:09) [22]

    Если каждая супер-пупер-мега-программа будет таскать с собой таких монстров... :) Представляю юзерскую машину на которой MSSQLEE, FB, OraXE и т.д. и все цветет и пахнет одновременно. Тяжеловато на воробьев с пушкой ходить то...
  • VirEx © (25.05.11 17:11) [24]
    ишь понабижали


    > Anatoly Podgoretsky ©   (25.05.11 14:59) [14]
    > кстати и Access не привязан к офису.



    > sniknik ©   (25.05.11 15:05) [16]
    > шо то вы себе навидумивали... для Access и библиотеки не нужно
    > есть все что нужно), и к офису он не привязан.


    http://www.rsdn.ru/forum/db/2201730.flat.aspx

    теперь (с первых SP для XP) я так понимаю движок акцесс базы включен в дистрибутив операционки и установка акцесса, в состав которого входит MDAC (движок, драйвер ODBC, провайдер), уже не нужна для работы с access базой

    ?_?
  • Palladin © (25.05.11 17:32) [25]

    > теперь

    это не теперь, это давным давно
    сам аццесс это программа для работы с Jet, который и есть в MDAC
  • Anatoly Podgoretsky © (25.05.11 19:30) [26]
    > Dennis I. Komarov  (25.05.2011 17:00:23)  [23]

    Между прочим MS SQL не тяжедый по сравнению с Акцесс
  • sniknik © (25.05.11 21:26) [27]
    > это не теперь, это давным давно
    ага,
    насколько помню даже в 2000й винде был, и в 98й которая SE ... когда то "плотно" этим занимался (в 2000м году "сел" за изучение ADO, ну и..., и уже тогда было тяжко найти комп без компонент доступа к access, и в основном это были пиратские/хакерские дистрибутивы из которых они убрали "все лишнее")

    в общем история развития - драйвера ODBC -> DAO -> Jet 3.0  -> Jet 4.0  ->  Jet включен в состав MDAC (версия 5.0-5.5 что то типа) -> ACE.OLEDB.12 (датабейс енжайн)  версия 2007 -> 2010

    и на всем этапе он был, и есть доступен без офиса... даже когда ADO еще не было, или на версии 98-го "спешал" без COM модели, не было даже когда уже было. базы акцесс были доступны (с, похоже 3 версии дельфей были драйвера, dll, в BDE. в 5 дельфе уже было ADO).

    > Между прочим MS SQL не тяжедый по сравнению с Акцесс
    он даже побыстрее в некоторых случаях и в локальном варианте (сервер и клиент на одной машине), а уж разнесенный на 2 так вообще...
    но его нужно ставить!!! в "силент" моде/включенным в сетап и т.д. что не всегда приемлемо... ну вот есть у нас, бывали такие ублюдочные требования. чтобы программа работала "сама по себе" т.е. чтобы скопировали, запустили и все. использовали access..., и продолжаем, часто уже по привычке, типа а почему нет, просто даем выбрать (и тут уже лень пользователя - "его нужно ставить!!!" а он отказывается нажимать пару "лишних" кнопок).
  • lw (30.05.11 22:17) [28]
    По сути своей задача сформулирована ...не чётко.
    Всегда имеется оператор, вводящий данные, например, экзаменационные оценки или вердикт "Переведён на следующий курс".
    Изменить номер курса без подобной информации, тем более автоматически всем студентам оператору и программе не по чину :-), сперва декан подписывает приказ.

    Зачем вообще удалять записи автоматически?
    Поставьте фильтр и отображайте только нужные записи.

    Реальное удаление производите только по команде системщика.
    Автоматически можно скрыть какие-либо данные или пересчитать.
    Может будет достаточно скрыть записи за прошлый 4-й курс?
    Или обязательно нужно продемонстрировать автоматически срабатывающие функции?
    В чём главная задача состоит?

    Если 4-й курс успешно завершён, ставьте соответствующий признак.
    На этот признак ставьте условие фильтра.
    И нет нужды удалять записи.
  • Anatoly Podgoretsky © (31.05.11 07:38) [29]
    > lw  (30.05.2011 22:17:28)  [28]

    Если 4-й курс успешно завершён, начинаем пятый.
 
Конференция "Начинающим" » Программирование базы данных MS Access в Delphi 7 [D7, Access]
Есть новые Нет новых   [134433   +22][b:0][p:0.001]