Текущий архив: 2004.10.24;
Скачать: CL | DM;
ВнизОшибка при обращении к базе Найти похожие ветки
← →
TrOy © (2004-09-27 12:39) [0]У меня следующая проблема:
В Delphi 7 разработал программу, которая переносит значение некоторых полей из одной базы(rsdoc.dbf) в другую (work.dbf), проблема состоит в том, что rsdoc.dbf периодически обновляется другой программой и мне приходится копировать её в отдельный каталог и при попытке отобразить её содержимое через компоненты DbEdit, связанные с Table через DataSourse выдается сообщение: Application Error: Exeption EDBEngineError in module Project1.exe по такому-то адресу. Index does not exist. File …\rsdoc.cdx, если я копирую cdx-файл то выдается сообщение – Full dBase expressions not supported.
Если я открываю проект в Delphi, то появляется диалог: Input Requested: Production index file missing, corrupt or cannot interpret index key, и предоставляется выбор: Open Read Only, Fail Open, Open and Detach, ниже показывается сообщение типа, что таблица может быть открыта только для чтения. Когда я выбираю какой либо из вариантов, то с Delphi все работает нормально, а как только я запускаю откомпилированные exe’шник появляются ошибки указанные выше. Если я не копирую базу, а работаю с той при которой я компилировал проект, то никаких ошибок не возникает.
Как сделать, так чтобы не возникало ошибок при обновлении rsdoc.dbf?
Заранее благодарен!
P.S. Кто-то давал совет про синхронизацию, а вот как ее осуществить (компоненты, методы)?
← →
panov © (2004-09-27 13:03) [1]Не тот драйвер используешь для доступа к БД.
← →
msguns (2004-09-27 13:04) [2]Попробуй запустить экэешник без Дельфи (в смысле Дельфи просто закрыть). Работа через BDE ?
← →
sniknik © (2004-09-27 13:13) [3]> P.S. Кто-то давал совет про синхронизацию, а вот как ее осуществить (компоненты, методы)?
это только в том случае если индекс рушится изза одновременного доступа.
делаеш какойнибудь флаг (файловый) в программах проверяеш есть файл значит занята база другой прогой нет можно обновлять, ставиш свой и занимаеш базу.
(примерно таким образом делается обносление для dos-овских кассовых программ)
← →
sniknik © (2004-09-27 13:15) [4]> обносление
обновление (данными)
← →
msguns (2004-09-27 15:22) [5]>sniknik © (27.09.04 13:13) [3]
>делаеш какойнибудь флаг (файловый) в программах проверяеш есть файл значит занята база другой прогой нет можно обновлять, ставиш свой и занимаеш базу.
Вариант фатальный ;)
Если падает ОС или сервак, то с этими "флагами" гемора намного больше, чем, например, с дедлоками. Сколько я работал с локалками, нет нмчего хуже этих "самопальных" флажков
← →
sniknik © (2004-09-27 15:44) [6]> Сколько я работал с локалками, нет нмчего хуже этих "самопальных" флажков
тем не менее почти все кассовые программы (которые на файловом обмене построены) именно так и работают. и ничего страшного если сервер упал, по его "вставании" кассовая прога будет обновлятся заново с тех же данных (пока флаг не удален, а удаляет она его после всего (обновления)) и по другому нельзя, иначе пропустиш часть данных.
> Вариант фатальный ;)
в обшем то понятно что ты имееш ввиду.
но не совсем. для справки в некоторых файлах (флагах) изредка держут запись, датувремя, до которого предположительно база блокируется. ктото может и на время создания файлов ориентироватся...
вообщето это только один вариант рещения и только на один случай.
вполне приемлимый вариант если учесть что база файл серверная. (вариант файла флага, может быть таблица блокировочная)
← →
msguns (2004-09-27 16:00) [7]>sniknik © (27.09.04 15:44) [6]
Да ведь я особо-то и не спорю. Просто говорил, что все это довольно хлопотливо, хотя, конечно, может работать (и работает !)
Но вопрос о том, что и почему заставило разработчиков кэшев использовать dbf-ки и им подобные в качестве "обменника" здесь не обсуждается ?;)
← →
sniknik © (2004-09-27 16:11) [8]у него то как раз dbf, фокс. поэтому и вспомнил этот метод.
← →
TrOy © (2004-09-28 09:46) [9]Одновременного доступа к базам нет, в том то и проблема я даже не представляю по какой причине такие глюки. Драйвер я тоже правильный использую (foxpro).
Работать пробовал через алиас, созданный в BDE и пробовал напрямую указывать местоположение баз, то есть свойству DatabaseName присваивал местоположение.
Пробовал запускать прогу не запуская Delphi.
Я в полном замешательстве.
Может существуют ещё какие-нибудь тонкости???
← →
Денис (2004-09-28 11:03) [10]Сталкивался с этой проблемой. Читал что там какая-то проблема с распознованием чисто фоксовой функции в cdx-файле. Короче ее там как-то нужно заменить, и че-то в Дельфях добавить. Я не стал разбираться - открывал базы через COM-сервер Excel. Если есть желание разобраться - ищите в нете, я там точно видел. Но вообще лучще работать с более новыми СУБД
← →
sniknik © (2004-09-28 11:12) [11]> Драйвер я тоже правильный использую (foxpro).
> Может существуют ещё какие-нибудь тонкости???
есть, BDE-шный фохпро не рекомендуют использовать на запись (сам борланд не рекомендует, вот где это читал не скажу, не помню)
halcyon может помочь в этом случае (нарвался именно на то несоответствие изза которого дают такую рекомендацию)
http://www.vodonosov.newmail.ru/develop/develop.htm
и точно не может быть использован для новых visual фохпро таблиц.
> Если я открываю проект в Delphi, то появляется диалог: Input Requested: Production index file missing, corrupt or cannot interpret index key, и
> предоставляется выбор: Open Read Only, Fail Open, Open and Detach
вот это точно глюк индекса или его отсутствие (индексного файла)
а вообще судя по описанию [0] больше похоже на глюк в программе.
← →
TrOy © (2004-09-28 11:51) [12]Поблема решена! Я пошел немножко другим путем и просто создал новый индексный файл. Теперь база обновляется и работает без глюков.
Спасибо всем за внимание!
Страницы: 1 вся ветка
Текущий архив: 2004.10.24;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.861 c