Как обновить индексный файл после запроса на обновление в FoxPro dbf - PullRequest
1 голос
/ 13 декабря 2011

Мне нужно обновить записи в файлах FoxPro (dBase?) .Dbf. Поле, которое мне нужно обновить внутри записи, также имеет индекс. Обновление записи работает нормально, но индекс не обновляется. Я ищу в интернете уже несколько дней безрезультатно. Почему-то мне тоже нужно открыть индексный файл, но я не знаю как.

Я создаю соединение через драйвер Microsoft Visual FoxPro. Вот код VB6 (!):

Dim CNF As ADODB.connection, CNFRS as ADODB.Recordset
Set CNF = New ADODB.connection
CNF.ConnectionString = "Provider=MSDASQL; Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" & pvApp.General.TableName & ";"
CNF.Open
Set CNFRS = CNF.Execute("UPDATE " & pvApp.General.TableName & " SET SYNC_ID='" & sync_id & "' WHERE PVSYSID='" & PVSYSID & "'")

Итак, обновление выполнено успешно, но индекс не обновлен. Любая помощь очень ценится.

OLEDB путь:

CNF.ConnectionString = "Provider=VFPOLEDB.1;Data Source=C:\DB;Password=;Collating Sequence=MACHINE"

Всё ещё не повезло!

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Операции обновления (вставки, обновления, удаления) в таблицах .DBF всегда будут автоматически обновлять файл составного индекса (.CDX), связанный с таблицей, - нет необходимости явно что-либо делать.Если есть другие индексные файлы (.IDX), то это другая история.Что именно заставляет вас думать, что индексы не обновляются?Не могли бы вы вместо этого использовать драйвер OLEDB?

0 голосов
/ 28 декабря 2011

@ Zac L: Вполне возможно, что ваши эксперименты с файлами .dbf могут удалить ссылку в файле .dbf на файл .cdx (index) (ссылка - один бит в файле .dbf).И в результате «Visual FoxPro Provider» считает, что ваш .dbf не имеет связанного файла .cdx и не обновляет его.

Прочтите в MSDN информацию о структуре файла DBF http://msdn.microsoft.com/en-us/library/st4a0s68%28v=vs.80%29.aspx Проверьте смещение байтов28, флаг 0x01

...