Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при обращении к базе [D7, dBase, FoxPro]


TrOy ©   (2004-09-27 12:39:00) 

У меня следующая проблема:
В 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. Кто-то давал совет про синхронизацию, а вот как ее осуществить (компоненты, методы)?


TrOy   (2004-09-28 11:51:00) [1]

Поблема решена! Я пошел немножко другим путем и просто создал новый индексный файл. Теперь база обновляется и работает без глюков.
Спасибо всем за внимание!


sniknik   (2004-09-28 11:12:00) [2]

> Драйвер я тоже правильный использую (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] больше похоже на глюк в программе.


Денис   (2004-09-28 11:03:00) [3]

Сталкивался с этой проблемой. Читал что там какая-то проблема с распознованием чисто фоксовой функции в cdx-файле. Короче ее там как-то нужно заменить, и че-то в Дельфях добавить. Я не стал разбираться - открывал базы через COM-сервер Excel. Если есть желание разобраться - ищите в нете, я там точно видел. Но вообще лучще работать с более новыми СУБД


TrOy   (2004-09-28 09:46:00) [4]

Одновременного доступа к базам нет, в том то и проблема я даже не представляю по какой причине такие глюки. Драйвер я тоже правильный использую (foxpro).
Работать пробовал через алиас, созданный в BDE и пробовал напрямую указывать местоположение баз, то есть  свойству DatabaseName присваивал местоположение.
Пробовал запускать прогу не запуская Delphi.
Я в полном замешательстве.
Может существуют ещё какие-нибудь тонкости???


sniknik   (2004-09-27 16:11:00) [5]

у него то как раз dbf, фокс. поэтому и вспомнил этот метод.


msguns   (2004-09-27 16:00:00) [6]

>sniknik ©   (27.09.04 15:44) [6]

Да ведь я особо-то и не спорю. Просто говорил, что все это довольно хлопотливо, хотя, конечно, может работать (и работает !)
Но вопрос о том, что и почему заставило разработчиков кэшев использовать dbf-ки и им подобные в качестве "обменника" здесь не обсуждается ?;)


sniknik   (2004-09-27 15:44:00) [7]

> Сколько я работал с локалками, нет нмчего хуже этих "самопальных" флажков
тем не менее почти все кассовые программы (которые на файловом обмене построены) именно так и работают. и ничего страшного если сервер упал, по его "вставании" кассовая прога будет обновлятся заново  с тех же данных (пока флаг не удален, а удаляет она его после всего (обновления)) и по другому нельзя, иначе пропустиш часть данных.

> Вариант фатальный ;)
в обшем то понятно что ты имееш ввиду.
но не совсем. для справки в некоторых файлах (флагах) изредка держут запись, датувремя, до которого предположительно база блокируется. ктото может и на время создания файлов ориентироватся...

вообщето это только один вариант рещения и только на один случай.
вполне приемлимый вариант если учесть что база файл серверная. (вариант файла флага, может быть таблица блокировочная)


msguns   (2004-09-27 15:22:00) [8]

>sniknik ©   (27.09.04 13:13) [3]
>делаеш какойнибудь флаг (файловый) в программах проверяеш есть файл значит занята база другой прогой нет можно обновлять, ставиш свой и занимаеш базу.

Вариант фатальный ;)
Если падает ОС или сервак, то с этими "флагами" гемора намного больше, чем, например, с дедлоками. Сколько я работал с локалками, нет нмчего хуже этих "самопальных" флажков


sniknik   (2004-09-27 13:15:00) [9]

> обносление
обновление (данными)


sniknik   (2004-09-27 13:13:00) [10]

> P.S. Кто-то давал совет про синхронизацию, а вот как ее осуществить (компоненты, методы)?
это только в том случае если индекс рушится изза одновременного доступа.
делаеш какойнибудь флаг (файловый) в программах проверяеш есть файл значит занята база другой прогой нет можно обновлять, ставиш свой и занимаеш базу.
(примерно таким образом делается обносление для dos-овских кассовых программ)


msguns   (2004-09-27 13:04:00) [11]

Попробуй запустить экэешник без Дельфи (в смысле Дельфи просто закрыть). Работа через BDE ?


panov   (2004-09-27 13:03:00) [12]

Не тот драйвер используешь для доступа к БД.


Наверх

Титульная страница Поиск, карта сайта Написать письмо