Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Table corrupting and autoincrement  [new]
faustgreen
Member

Откуда:
Сообщений: 342
Есть небольшое приложение на свободных таблицах. Раньше все работало, но идентификаторы для первичных ключей формировались отдельной функцией(определялось максимальное значение ключа для текущей таблицы "x" и для новой записи подставлялось "x+1"). После этого была произведена замена типа ключевого поля с Numeric на Integer(Autoincrement) и ключи стали формироваться автоматически при вставке новой записи. Но периодически таблицы с ключевым полей типа Integer(Autoincrement) начали портиться ("Table has become corrupted. The table will need to be repaired before using again. (Error 2091)")! Может кто подскажет в чем может быть причина? (Программа сетевая).
27 июн 19, 11:55    [21916058]     Ответить | Цитировать Сообщить модератору
 Re: Table corrupting and autoincrement  [new]
Dima T
Member

Откуда:
Сообщений: 14190
Скорее всего с сетью проблемы. Во-первых в свойствах расшаренной папки отключи кэширование. Во-вторых попроси юзеров не выключать сервер когда другие работают.
27 июн 19, 12:41    [21916114]     Ответить | Цитировать Сообщить модератору
 Re: Table corrupting and autoincrement  [new]
faustgreen
Member

Откуда:
Сообщений: 342
Dima T, Сервер работает круглосуточно. По поводу кэширование есть мысли, не знаю верные ли:
Фрагмент кода, где участвует таблица с автоинкрементом, и, возможно, место ошибки:
.............
Insert into tab1 (..., ...., ...) values (...., ...., .....)
use in tab1
............


Думаю, что какие то операции с insert производятся с использованием кэша, данные из которого не успевают сохраняться на диск до вызова команды "use". Может sql-comands не дружат с командами типа use (foxpro-commands), возможно они как то реализованы по разному и не взаимодействуют между собой (например я думал что команда use должна вызывать что то типа flush кэша, а как на самом деле хз как там все работает).
27 июн 19, 13:00    [21916133]     Ответить | Цитировать Сообщить модератору
 Re: Table corrupting and autoincrement  [new]
faustgreen
Member

Откуда:
Сообщений: 342
Переписал код, пока полет нормальный

Раньше было:
INSERT INTO table2 (column2, column3, ...) SELECT column2, column3, ... FROM table1 

Где поле column1 - было автоинкрементом и генерировалось автоматически.

Теперь стало так:
SELECT table1
SCAN
   lnNewId = NewId()
   INSERT INTO table2 (column1, column2, column3, ...) VALUES(lnNewId, ...,  ...)
ENDSCAN


Возможно здесь дело даже не автоинкременте было, а в самой конструкции обновления (наличие подзапроса).
5 июл 19, 16:02    [21921696]     Ответить | Цитировать Сообщить модератору
 Re: Table corrupting and autoincrement  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8799
faustgreen
Возможно здесь дело даже не автоинкременте было, а в самой конструкции обновления (наличие подзапроса).

Эта типичная проблема bulk upload (и не только FoxPro).
Вы обошли её довольно элегантно путем уменьшения объёма обновления таблицы до минимального значения - одной записи.
Просто и эффективно.
6 июл 19, 09:53    [21921934]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить