|
|
|
| Всем доброго времени суток!
Не могу справиться с одной проблемой на компе с виндой 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 | |
|
| |
|
|
|
| ИМХО
опишите задачу, которую Вы решаете, а то не совсем понятно...
если Вы пытаетесь вставить данные из экселя в таблицу базы данных, то можно сделать проще
ПС
>Запись = 0 'Не использовать as Byte т.к. 0 Byte не бывает
Вы сильно удивитесь, но бывает :) | |
|
| |
|
|
|
| По поводу решаемой задачи:
есть файл эксель он содержит много листов с разными таблицами из другого файла содержащего код подключения выполняется чтение данных и запись новых данных.
Так вот подключение к файлу с таблицами в режиме простого просмотра происходит нормально а вот когда код записывает в него какую то новую информацию файл становится недоступным для подключения и фообще его потм нельзя даже просто открыть из экселя пишет что прилжение допустило ошибку и будет закрыто.
Например дома у меня ХР все нормально происходит а вот на другой машине где винда 2000 происходит такой глюк | |
|
| |
|
|
|
| нельзя открыть файл скорее всего потому, что в процессах остается висеть Эксель, т.к. было аварийное завершение работы программы.
эту ошибку нужно обрабатывать.
версии офиса на обеих машинах совпадают, а то у Вас явно прописан Excel 8.0 | |
|
| |
|
|
|
| есть еще небольшое уточнение : когда выполняется первая запись в таблицу то запись происходит но файл с таблицей после этого вырастает в объеме примерно в 2 раза он повреждается и потом его эксель уже открыть не может поэтому и новое подключение к нему происходит с ошибкой. Как я понял первая запись в таблицу повреждает весь файл.
поповоду версий офиса то на 2003 он работает нормально а в 2000 глючит | |
|
| |