2017-01-06 6 views
0

У меня есть старая система, где мне нужно читать данные. Он хранит данные в старой таблице DBF Visual FoxPro.C# visual foxpro dbf index

В C# Я использую adodb.dll с Provider=VFPOLEDB.1, чтобы получить данные, и он хорошо работает до сих пор.

Когда я выбираю следующий (его индекс):

select * from tableXYZ where tab_f1+STR(tab_f2,10)+STR(tab_f3,3)+STR(tab_f4,3)+STR(tab_f5,3) = "AR1234567890" 

я получаю в Visual FoxPro быстрый результат (с использованием индекса), "AR" является tab_f1, "1234567890" является STR (tab_f2 , 10). Tab_f3, tab_f4 и tab_f5, кажется, «проигнорированы», даже заполненные в таблице, я получаю все строки, независимо от содержимого от f3 до f5.

Тот же выбор в C# с соединением ADODB не возвращает результат. Есть ли способ позволить VFPOLEDB игнорировать три поля позади или мне нужен индекс только для tab_f1 + tab_f2?

ответ

0

VFP будет обрабатывать = как «начинается с» на основе настройки SET ANSI. Если вы хотите использовать ту же функциональность в ADODB Я хотел бы использовать вместо LIKE:

select * 
from tableXYZ 
where tab_f1+STR(tab_f2,10)+STR(tab_f3,3)+STR(tab_f4,3)+STR(tab_f5,3) LIKE "AR1234567890%" 

Однако обратите внимание, что ADODB не будет использовать автономные («IDX») индексные файлы. Если ваш индекс включен в CDX, связанный с этой таблицей, тогда он должен использоваться.

+0

«Нравится» с знаком процента? Это так просто ... Спасибо! – user7384514