|
|
|
| Нашел у микрософта работающий пример связывания таблиц dBase4 для Акцесса через oledb.
Function LinkdBaseFile(strPath As String, _
strLinkPro As String, strRemTab As String)
Dim conn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
' Open the catalog using the current Access database.
cat.ActiveConnection = CurrentProject.Connection
' Create the new table.
tbl.Name = "LinkedBae"
Set tbl.ParentCatalog = cat
' Set the properties to create the link.
tbl.Properties("Jet OLEDB:Create Link") = True
tbl.Properties("Jet OLEDB:Link Datasource") = strPath
tbl.Properties("Jet OLEDB:Link Provider String") = strLinkPro
tbl.Properties("Jet OLEDB:Remote Table Name") = strRemTab
' Append the table to the tables collection of the catalog.
cat.Tables.Append tbl
' Clean up.
Set cat = Nothing
End Function
Однако при попытке прилинковаться к таблам VFP 9.0 через окно “Immediate”: ?LinkdBaseFile("c:\MyDbaseFiles\","Microsoft OLE DB Provider for Visual FoxPro","UVN")
выдает сообщение:
В чем ошибка? У меня стоит акс2007
| |
|
| |
|
|
|
| ну так драйвер нужен для Microsoft OLE DB Provider for Visual FoxPro, он же русским по белому говорит
а может еще что | |
|
| |
|
|
|
| ну так при вызове функции из Immediate указывается необходимый драйвер, который я загрузил ранее | |
|
| |
|
|
|
| С файлами VFP 9.0 из Акса можно работать исключительно с помощью указанного провайдера и только через ADO. Вы можете либо получить данные через Recordset, либо преобразовать в более раннюю версию и работать с ним стандартными средствами.
Подробнее здесь: http://am.rusimport.ru/msaccess/topic.aspx?id=657 | |
|
| |
|
|
|
| Эту статью читал и пробовал. Отличная, ваша вроде бы. используя ранее указанную функцию, я использовал strLinkPro="Microsoft OLE DB Provider for Visual FoxPro", но не получилось. как проверить, может этот скачанный драйвер не запустился? Буду еще пробовать
PS. VFP у меня нет, файлы не мои, преобразовать их в более раннюю версию не могу, как получить доступ, чтобы сделать рекордсет. Мне нужен доступ к VFP 9.0 файлам, чтобы сделать некоторую аналитику. Заранее спасибо! | |
|
| |
|
|
|
| Так что именно не получается? Если тот код, что вы привели, то, ИМХО, и не получится. Акс не умеет использовать внешние провайдеры в строке подключения связанных таблиц и сохраненных запросов. Вы можете открыть соединение на основе провайдера, а в нем - Recordset на вашем файле (пример есть в указанной статье). Сам провайдер умеет преобразовывать файлы к более ранней версии (например в FoxBase, который затем можно подключить как dBase III). В статье есть и этот пример.
Добавлю, что если в файле нет специфических полей, появившихся в VFP8 и VFP9, и если он не является частью базы данных DBC, то его можно присоединить с помощью VFP ДРАЙВЕРА (не провайдера). | |
|
| |
|
|
|
| Здравствуйте, Анатолий! Еще раз перечитал статью «Работаем с DBF файлами». Понял, что т.к. я пытаюсь работать с VFP файлами, то ISAM здесь не причем. Нужно пытаться отрабатывать соединение с помощью драйвера или провайдера.
Вопрос по провайдеру. А тот код, что я привел, не означает, что Акс использует внешние провайдеры в строке подключения связанных таблиц? Ведь этот код работает для dBase4.
Хочу попросить Вас просмотреть и откорректировать следующий код. Опыта мало еще, чувствую, что задаю элементарные и сырые вопросы. Например, что рекордсет нужно записывать в таблицу, но ведь мне нужна только линкованная таблица… Просто слепил показанные два фрагмента… ((
Function LinkVFPKiev()
Dim cnn As Object 'ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Set cnn = CreateObject("ADODB.Connection")
cnn.Provider = "Microsoft OLE DB Provider for Visual FoxPro" 'èëè "vfpoledb", èëè "vfpoledb.1"
cnn.Properties("Data Source") = "c:\MyDbaseFiles\" 'Рабочая папка
cnn.Open
' Open the catalog using the current Access database.
cat.ActiveConnection = CurrentProject.Connection
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 'adUseClient
rs.Open "MyFile", cnn, 1, 3, 2 'adOpenKeyset, adLockOptimistic, adCmdTable
End Function | |
|
| |
|
|
|
|
Вопрос по провайдеру. А тот код, что я привел, не означает, что Акс использует внешние провайдеры в строке подключения связанных таблиц? Ведь этот код работает для dBase4.
| Интересно, а что вы указываете в св-ве "Jet OLEDB:Link Provider String" в случае с dBase?
И что вы видите в свойствах созданной таблицы?
Я вижу это:
ADOX
Jet OLEDB:Link Datasource C:\Temp
Jet OLEDB:Link Provider String dBase IV;HDR=NO;IMEX=2;
Jet OLEDB:Remote Table Name 261_20A#DBF
DAO
Connect dBase IV;HDR=NO;IMEX=2;DATABASE=C:\Temp
SourceTableName 261_20A.DBF
|
Вот это "dBase IV;" сообщает JET-у, к БД какого типа он будет обращаться.
У меня А2003, возможно А2007/2010 умеют что-то большее, но об использовании провайдеров я не слішал. | |
|
| |
|
26 Кб. |
|
| в случае с dbase IV для установки линка я писал в аргументе функции, конечно, "Dbase IV": ?LinkdBaseFile("c:\MyDbaseFiles\","Dbase IV","ANAEST")
А свойство "Jet OLEDB:Link Provider String" как смотреть? Если я пробую получить свойства созданной таблицы (по нажатию правой кнопки мыши и выборе «Свойства таблицы») я вижу стандартный рисунок
Если в окне Locals посмотреть свойство ConnectionString: "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Протоколы2011\ ОсваиваемСерверТехнологии\связьVFP.accdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database=C:\Users\Ñåðãåé\AppData\Roaming\Microsoft\Access\System."
А если запускаю ?LinkdBaseFile("c:\MyDbaseFiles\","Microsoft OLE DB Provider for Visual FoxPro","UVN")
где UVN.dbf от VFP 9.0, то получаю уже известный «Невозможно найти устанавливаемый ISAM» | |
|
| |
|
|
|
| еще раз пробовал, не проходит. Подскажите, кто видит ошибку... | |
|
| |
|
|
|
| Мужики, ну помогите советом! | |
|
| |
|
|
|
| может быть ошибка не в коде а в конфигурации драйверов ИСАМ...
тонкое это дело - вспоминаю с содроганием | |
|
| |
|
|
|
| и где что смотреть, не подскажете? я вообще впервые с этой проблемой столкнулся | |
|
| |