Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VBA MS Office

Программирования для MS Office кроме ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подключение к файлам excel с помощью ADO
 
 автор: ChevChell   (19.11.2009 в 16:50)   личное сообщение
 
 

Всем доброго времени суток!

Не могу справиться с одной проблемой на компе с виндой 2000.
Подключаюсь к файлу Excel и просматриваю его через объект рекордсет все идет нормально, но когда пытаюсь дбавить новые значения VBA выдает ошибку подключения " внешняя таблица не содержит предполагаемый формат данных"
Вод код:

Sub ОткрытьБД()

СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Sheets("Лист2").Range("a1") & "; Extended Properties=Excel 8.0;"
Set Таблица = New ADODB.Recordset
Таблица.ActiveConnection = СтрокаПодключения 'Дебагер выдает здесь ошибку

End Sub

Private Sub Записать_Click()
'запись нового счета в базу
'-------------------------------------------------------
Call ПроверкаФормы
Запись = 0 'Не использовать as Byte т.к. 0 Byte не бывает
Call ОткрытьБД
With Таблица 'Запись в таблицу реестра счетов
.CursorLocation = adUseClient
.Open "Select * from [реестр$]", СтрокаПодключения, adOpenForwardOnly, adLockOptimistic
For i = 1 To r - 1 'Цикл по строкам массива
If Nomenklatura(i, 0) = Empty Then Exit For 'Если первое поле пусто то выход
.AddNew 'Запись в реестр счетов
.Fields(0) = ПолеНомерСчета.Text
.Fields(1) = Format(CDate(ДатаСчета.Value), "dd.mm.yyyy")
.Fields(2) = ComboПоставщик.Text
.Fields(3) = ComboПокупатель.Text
.Fields(15) = ComboВалюта.Text
.Fields(24) = ComboВидУчета.Text
For Запись = 0 To 6 Step 1 'Цикл по полям массива
.Fields(Запись + 4) = Nomenklatura(i, Запись) 'Не использовать "Запись" as Byte т.к. 0 Byte не бывает
Next Запись
.Update
Next i
.Close
End With
Set Таблица = Nothing
Call ОткрытьБД
With Таблица 'Запись в таблицу платежей
.CursorLocation = adUseClient
.Open "Select * from [платежи$]", СтрокаПодключения, adOpenForwardOnly, adLockOptimistic
.AddNew 'Запись в реестр платежей
.Fields(0) = ПолеНомерСчета.Text
.Fields(1) = Format(CDate(ДатаСчета.Value), "dd.mm.yyyy")
.Fields(2) = Всего
.Fields(7) = ComboВалюта.Text
.Fields(9) = ComboВидУчета.Text
.Update
.Close
End With
ComboСчет.AddItem ПолеНомерСчета.Text 'Запись нового счета в комбо бокс
Set Таблица = Nothing

End Sub

  Ответить  
 
 автор: ДрЮня   (19.11.2009 в 17:09)   личное сообщение
 
 

ИМХО
опишите задачу, которую Вы решаете, а то не совсем понятно...
если Вы пытаетесь вставить данные из экселя в таблицу базы данных, то можно сделать проще

ПС
>Запись = 0 'Не использовать as Byte т.к. 0 Byte не бывает
Вы сильно удивитесь, но бывает :)

  Ответить  
 
 автор: ChevChell   (20.11.2009 в 10:27)   личное сообщение
 
 

По поводу решаемой задачи:
есть файл эксель он содержит много листов с разными таблицами из другого файла содержащего код подключения выполняется чтение данных и запись новых данных.
Так вот подключение к файлу с таблицами в режиме простого просмотра происходит нормально а вот когда код записывает в него какую то новую информацию файл становится недоступным для подключения и фообще его потм нельзя даже просто открыть из экселя пишет что прилжение допустило ошибку и будет закрыто.
Например дома у меня ХР все нормально происходит а вот на другой машине где винда 2000 происходит такой глюк

  Ответить  
 
 автор: ДрЮня   (20.11.2009 в 10:58)   личное сообщение
 
 

нельзя открыть файл скорее всего потому, что в процессах остается висеть Эксель, т.к. было аварийное завершение работы программы.
эту ошибку нужно обрабатывать.
версии офиса на обеих машинах совпадают, а то у Вас явно прописан Excel 8.0

  Ответить  
 
 автор: ChevChell   (20.11.2009 в 13:32)   личное сообщение
 
 

есть еще небольшое уточнение : когда выполняется первая запись в таблицу то запись происходит но файл с таблицей после этого вырастает в объеме примерно в 2 раза он повреждается и потом его эксель уже открыть не может поэтому и новое подключение к нему происходит с ошибкой. Как я понял первая запись в таблицу повреждает весь файл.

поповоду версий офиса то на 2003 он работает нормально а в 2000 глючит

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList