Запись данных в файл Excel при помощи ADO

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
tavocer
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 24.01.2006 (Вт) 20:58

Запись данных в файл Excel при помощи ADO

Сообщение tavocer » 24.01.2006 (Вт) 21:02

Безуспешно пытаюсь записать данные в файл Excel:
Файл "Baze.xls" закрыт.

Sub ADO_InsertDataToBaze()
Dim Workbook As Workbook
Dim p As String
Dim i As Long, TabIndex As Long, Ran As Integer

Dim DBFullName As String
Dim Cnct As String, Src As String
Dim Connection As ADODB.Connection
Dim Recordset As ADODB.Recordset
'Dim j As Long, ar, l As Variant

DBFullName = Path & "Baze.xls;"
Set Connection = New ADODB.Connection
Cnct = "Provider=Microsoft.Jet.OLEDB.4.0;"
Cnct = Cnct & "Data Source=" & DBFullName & _
"Extended Properties=Excel 9.0;Jet OLEDB:Engine Type=35;HDR=no;Jet OLEDB:Compact Without Replica Repair=False;"
Connection.Mode = adModeWrite ' = adModeReadWrite
Connection.Open ConnectionString:=Cnct
Connection.Execute "UPDATE [dannye$] SET f2='5' WHERE f1=" & Count & ""
Connection.Close
Set Connection = Nothing
End Sub

Переменная Count видна на уровне модуля.
После закрытия Connection.Close файл "Baze.xls" увеличивается в размерах приблизительно в 2 раза и при попытке открыть его, появляется предупреждение “File error: data may have been lost”, тем не менее, файл открывается. Данные в нем непонятным образом перемешаны, причем только начиная со строки 2043.
Исходный файл "Baze.xls" имеет 55 столбцов и приблизительно 30000 строк, из которых не все заполнены. Исходный размер файла 1930 кб.
Интересно, что если файл открыт, запись в него проходит без проблем.
И еще одна особенность – если уменьшить количество строк до 2044 (лишние вырезать), запись происходит без проблем и при закрытом файле, причем даже в строку с номером, скажем, 30000.
Может, кто-нибудь знает, как разрешить проблему, чтобы не происходила порча файла и запись происходила без проблем?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.01.2006 (Ср) 4:54

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tavocer
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 24.01.2006 (Вт) 20:58

Сообщение tavocer » 25.01.2006 (Ср) 12:04

Спасибо за ответ.
Я уже читал эти статьи.
Они советуют установить последнее обновление 8 (SP8) для Jet 4.0.
Оно у меня и так установлено. И установлен "бюллетень Майкрософт по безопасности MS04-014". Проблема в чем-то другом.
Еще вопрос:
У меня строка "Extended Properties=Excel 9.0;Jet OLEDB:Engine Type=35;HDR=no;"
если убрать Jet OLEDB:Engine Type=35, то при запуске появляется сообщение об ошибке "Couldn't find installable ISAM".
Что означает это Engine Type и почему во множестве примеров подключения к Excel-файлу, которые я нашел, этой строки нет. Может это как-то влияет на вышеописанную проблему?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.01.2006 (Ср) 13:27

Не знаю, что там советуют, но данная проблема. как следует из списка Applicable, не применима к MDAC 2.8, ссылку на который можно лицезреть в разделе Вывод...

А ещё - Excel 8.0 я всегда использую. Формат не менялся с тех пор.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tavocer
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 24.01.2006 (Вт) 20:58

Сообщение tavocer » 25.01.2006 (Ср) 13:49

У меня стоит версия 3.525.1117.0(xpsp_sp2_rtm.040803-2158, дата создания 17.08.2004) файла odbcconf.dll, который в соответствии с Tools-References и есть Microsoft Data Access Components. А какая это версия, 2.8 или нет?

Представляется ли возможным скачать файл по ссылке в разделе Вывод, если Windy не проходят проверку?

А ещё - Excel 8.0 я всегда использую. Формат не менялся с тех пор.

Я пробовал Excel 8.0, результат тот же.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.01.2006 (Ср) 13:57

Эээ.... Microsoft Data Access Components - это msado15.dll, в соответствии с Tools-References... Но в XP SP2 он самый новый, 2.8.


Чё-то, правда, строка мне не нравицца... Чё-то в ней кавычек мало...
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBFullName & "Extended Properties=""Excel 8.0;HDR=no;IMEX=1"""
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tavocer
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 24.01.2006 (Вт) 20:58

Сообщение tavocer » 25.01.2006 (Ср) 14:28

Спасибо, с вашей строкой работает, и без "Jet OLEDB:Engine Type=35",
файл msado15.dll у меня версия 2.8, но первоначальная проблема осталась, файл Baze.xls портится и увеличивается ровно в 2 раза :( .
Он заполняется безпорядочно данными из других ячеек начиная со строки 2043.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList