Автор Тема: Работа с таблицами DBF через ADO  (Прочитано 76 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pvnn [?]

  • Осваивающий
  • **
  • Сообщений: 262
  • Репутация: 21
    • Награды
  • Версия AutoIt: 3.3.12.0
Всем привет.
Появилась необходимость подключиться к 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-запросы
Минус: нужно устанавливать провайдер.

Код: AutoIt [Выделить]
#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
 

« Последнее редактирование: Июль 10, 2018, 10:24:18 от pvnn »

Русское сообщество AutoIt

Работа с таблицами DBF через ADO
« Отправлен: Июль 10, 2018, 10:17:57 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
21 Ответов
12240 Просмотров
Последний ответ Октябрь 15, 2016, 10:43:31
от ra4o
1 Ответов
2944 Просмотров
Последний ответ Февраль 13, 2012, 12:59:40
от madmasles
3 Ответов
3208 Просмотров
Последний ответ Апрель 26, 2012, 15:43:33
от WSWR
0 Ответов
3778 Просмотров
Последний ответ Ноябрь 20, 2012, 00:31:01
от CreatoR
8 Ответов
4675 Просмотров
Последний ответ Май 24, 2013, 11:35:06
от gloomyraven
1 Ответов
1801 Просмотров
Последний ответ Сентябрь 19, 2013, 16:48:27
от madmasles
2 Ответов
1736 Просмотров
Последний ответ Июнь 29, 2014, 21:42:37
от alex33
1 Ответов
953 Просмотров
Последний ответ Июль 12, 2016, 12:23:26
от pvnn
7 Ответов
933 Просмотров
Последний ответ Февраль 12, 2017, 19:27:29
от inververs
3 Ответов
1764 Просмотров
Последний ответ Сентябрь 15, 2017, 05:45:07
от F9