Всем привет.
Появилась необходимость подключиться к DBF. Таблицы, которые создавались в Visual Fox Pro стандартным провайдером: Microsoft.Jet.OLEDB.4.0 не подключаются, ошибка: "Внешняя таблица не имеет предполагаемый формат"
Все же удалось найти решение, думаю, что кому-нибудь это сможет пригодиться.
Решение такое:
- Скачиваем Провайдер: Microsoft OLE DB Provider for Visual FoxPro 9.0 https://www.microsoft.com/en-us/download/details.aspx?id=14839
- Устанавливаем
- Пишем запросы
Тестировал на Win 7 x64
Плюсы: не нужно использовать всякие UDF, DLL, которые могут не работать с вашей версией Autoit. Используем простые SQL-запросы
Минус: нужно устанавливать провайдер.
Появилась необходимость подключиться к DBF. Таблицы, которые создавались в Visual Fox Pro стандартным провайдером: Microsoft.Jet.OLEDB.4.0 не подключаются, ошибка: "Внешняя таблица не имеет предполагаемый формат"
Все же удалось найти решение, думаю, что кому-нибудь это сможет пригодиться.
Решение такое:
- Скачиваем Провайдер: Microsoft OLE DB Provider for Visual FoxPro 9.0 https://www.microsoft.com/en-us/download/details.aspx?id=14839
- Устанавливаем
- Пишем запросы
Тестировал на Win 7 x64
Плюсы: не нужно использовать всякие UDF, DLL, которые могут не работать с вашей версией Autoit. Используем простые SQL-запросы
Минус: нужно устанавливать провайдер.
Код:
#Include <Array.au3>
; Обработчик COM-ошибок
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
; Создать объект подключения
$oADOCon = ObjCreate("ADODB.Connection")
If @error Then Exit MsgBox(0,'Error',_ErrDescription())
$FilePath=@ScriptDir ; Каталог, где находятся таблицы DBF
; Стандартный провайдер для подключения к DBF. Внимание! не работает с новыми таблицами, созданными в VFP
;~ $sADOConStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
;~ "Data Source=" & $FilePath & ";" & _
;~ "Extended Properties=""dBASE IV;"";"
;~ $oADOCon.Open($sADOConStr)
;~ If @error Then Exit MsgBox(0,'Error',_ErrDescription())
; Строка подключения. Провайдер Microsoft OLE DB Provider for Visual FoxPro 9.0 (https://www.microsoft.com/en-us/download/details.aspx?id=14839)
$sADOConStr = "Provider=VFPOLEDB.1;" & _
"Data Source=" & $FilePath & ";" & _
"Collating Sequence=MACHINE;"
; Подключение
$oADOCon.Open($sADOConStr)
If @error Then Exit MsgBox(0,'Error',_ErrDescription())
; Выполнить запрос
$oQuery = $oADOCon.Execute("SELECT * FROM Config")
If @error Then Exit MsgBox(0,'Error select',_ErrDescription())
; Массив
$aQuery=$oQuery.GetRows()
; Вывод на экран
_ArrayDisplay($aQuery)
Exit
; Возвращает описание последней ошибки SQL-запроса
Func _ErrDescription($sDescription = Default)
Local Static $sDescription_static = ''
If $sDescription <> Default Then $sDescription_static = $sDescription
Return $sDescription_static
EndFunc ;==>_ErrDescription
Func _ErrFunc($oError)
ConsoleWrite(@CRLF& _
@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & _
"$oError.description is: " & @TAB & $oError.description & @CRLF & _
"$oError.windescription: " & @TAB & $oError.windescription & @CRLF & _
"$oError.number is: " & @TAB & Hex($oError.number, 8) & @CRLF & _
"$oError.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"$oError.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"$oError.source is : " & @TAB & $oError.source & @CRLF & _
"$oError.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"$oError.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF)
_ErrDescription($oError.description)
EndFunc ;==>_ErrFunc