Тест Foxpro 7 на «Файл используется» до INSERT - PullRequest
0 голосов
/ 05 августа 2011

У меня есть оболочка для функции VFP TABLEUPDATE (), которая, помимо прочего, регистрирует добавления и изменения в других создаваемых таблицах.Таблица журналов иногда перебивается из-за сохранения и редактирования несколькими пользователями по всему приложению, что приводит к ошибке «Файл используется» в моей таблице журналов.Таблица не открывается при вызове INSERT.

Я уверен, что ни у одного процесса нет файла, открываемого исключительно.В идеале я хочу

  • Проверить и посмотреть, доступен ли файл для открытия
  • Записать в файл, используя INSERT INTO
  • Выйти как можно быстрее

Записи никогда не редактируются, только вставляются.Есть ли способ проверить таблицу перед выдачей INSERT?

Ответы [ 3 ]

1 голос
/ 01 марта 2013

Если вы получаете, что Файл используется (Ошибка 3), то в соответствии с Руководством по Visual Fox: вы попытались выполнить команду USE, DELETE или RENAME для файла, который открыт в данный момент.Таким образом, вы говорите, что DELETE или RENAME исключены.
Это должно быть USE IN SELECT ("cTableName").Если EXCLUSIVE выключен, нет необходимости проверять, открыт ли файл.
Не открывайте таблицу до INSERT.Просто выполните INSERT, и после этого не нужно будет закрывать таблицу.
И, таким образом, вы можете избавиться от UNLOCK IN cTableName USE IN SELECT ("cTableName").

0 голосов
/ 01 марта 2013

Вы пытались заблокировать таблицу в своей процедуре вставки?

IF FLOCK("mytable")
   INSERT INTO ......
ELSE
  WAIT WINDOW "Unable to lock"
ENDIF

Возможно, поместите это в цикл DO WHJILE?

0 голосов
/ 09 августа 2011

Сначала я подумал, что вы слишком долго держите стол открытым, и что любые предварительные проверки, которые вы добавите, просто дольше будут связывать стол.Вы закрываете стол после ВСТАВКИ?

Вы говорите, что таблица журнала не открыта в начале процесса.Это означает, что Fox откроет вам таблицу молча, чтобы SQL мог работать.Вы открываете его эксклюзивно и закрываете ли вы его позже?

...