![]() |
|
Не могу подключиться к Access | ☑ | ||
---|---|---|---|---|
0
Prog111
04.04.16
✎
15:05
|
Создаю подключение к Access, но выдает ошибку: "Ошибка при вызове метода контекста (MoveFirst): Произошла исключительная ситуация (ADODB.Recordset): BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись".
Как я понимаю, ошибка говорит, что записей нет в таблице. Однако по факту записи в таблице есть. Куда копать, не подскажете? Процедура Тест2Нажатие(Элемент) ИмяФайла = "C:\Program Files\Att2008\att2000.mdb"; MBD = Новый COMОбъект("ADODB.CONNECTION"); MBD.CursorLocation= 3; Попытка MBD.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq="+ИмяФайла+";Uid=Admin;Pwd="); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ТекстСелект = "SELECT * FROM CHECKINOUT"; НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); Попытка НаборЗаписей=MBD.Execute(ТекстСелект); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Попытка НаборЗаписей.MoveFirst(); Исключение Сообщить(ОписаниеОшибки()); НаборЗаписей.Close(); Возврат; КонецПопытки; Пока НаборЗаписей.EOF()=0 цикл Сообщить("ккк"); КонецЦикла; КонецПроцедуры |
|||
1
Prog111
04.04.16
✎
15:06
|
Ошибка возникает в этом месте:
НаборЗаписей.MoveFirst(); |
|||
2
shuhard
04.04.16
✎
15:09
|
(1) открой рекордсет в нормальном режиме
|
|||
3
Чайник Рассела
04.04.16
✎
15:09
|
Функция ОткрытьФайл(НаименованиеФайла)
Результат = Истина; СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=" + НаименованиеФайла + ";"; Access = Новый COMОбъект("ADODB.CONNECTION"); Попытка Access.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Результат = Ложь;; КонецПопытки; Возврат Результат; КонецФункции |
|||
4
Чайник Рассела
04.04.16
✎
15:10
|
Акты = КаталогСБазой+"\"+ИмяФайлаАктов;
// Открываем mdb Состояние("Открытие файла " + Акты); Если НЕ ОткрытьФайл(Акты) Тогда Возврат; КонецЕсли; //получим список таблиц Catalog = Новый COMОбъект("ADOX.Catalog"); Catalog.ActiveConnection = Access; Для iCount = 0 По Catalog.Tables.Count-1 Цикл ИмяТаблицы = Catalog.Tables.Item(iCount).Name; Если Найти(ИмяТаблицы, "MSys") > 0 Тогда // Кроме системных таблиц Продолжить; КонецЕсли; СписокТаблиц.Добавить(Catalog.Tables.Item(iCount)); КонецЦикла; Для каждого стрТаблиц Из СписокТаблиц Цикл Состояние("Открытие таблиц документов..."); RS = Новый COMОбъект("ADODB.Recordset"); RS.Open("Select * from " + ТаблицаДляЗапроса(стрТаблиц.Значение.Name), Access); Если стрТаблиц.Значение.Name = "АВР" Тогда Пока RS.EOF() = 0 Цикл СтрТаблицы = ТаблицаДокумента.Добавить(); СтрТаблицы.НомерДок = СокрЛП(RS.Fields("Код_Документа").Value); СтрТаблицы.НаименованиеУслуги = RS.Fields("Наименование").Value; СтрТаблицы.Цена = RS.Fields("Цена").Value; СтрТаблицы.Касса = RS.Fields("Доп1").Value; СтрТаблицы.Регномер = RS.Fields("Доп2").Value; СтрТаблицы.АдресУстановки = RS.Fields("Адрес").Value; RS.MoveNext(); КонецЦикла; ИначеЕсли стрТаблиц.Значение.Name= "АВР_св" Тогда Состояние("Открытие таблицы шапки документов..."); Пока RS.EOF() = 0 Цикл Если RS.Fields("Дата").Value<НачПериода или RS.Fields("Дата").Value>КонПериода Тогда RS.MoveNext(); Продолжить; КонецЕсли; СтрШапки = ТаблицаШапки.Добавить(); СтрШапки.НомерДок = СокрЛП(RS.Fields("Свой_Номер").Value); СтрШапки.ДатаДокумента = RS.Fields("Дата").Value; СтрШапки.Контрагент = RS.Fields("Клиент").Value; СтрШапки.Договор = RS.Fields("Договор").Value; СтрШапки.Механик = RS.Fields("Исполнитель").Value; RS.MoveNext(); КонецЦикла; КонецЕсли; КонецЦикла; RS.Close(); Access.Close(); |
|||
5
Чайник Рассела
04.04.16
✎
15:10
|
В качестве примера
|
|||
6
shuhard
04.04.16
✎
15:11
|
(2) +1
v8: Как можно прочитать файл mdb (MS Access)? MyRst.Open (MyStr, MyCon, 2, 3)//adOpenDynamic, adLockOptimistic |
|||
7
Prog111
04.04.16
✎
15:33
|
(4) ТаблицаДляЗапроса - этой функции нет в сообщении...
|
|||
8
Prog111
04.04.16
✎
15:44
|
(2) Это как?
|
|||
9
Чайник Рассела
04.04.16
✎
15:58
|
(7)
// Возвращает имя таблицы для выполнения запроса. // // Параметры: // Таблица - Имя таблицы; // // Возвращаемое значение: // Имя таблицы для запроса. // Функция ТаблицаДляЗапроса(Таблица) Если Найти(Таблица, " ") > 0 Тогда Возврат "[" + Таблица + "]"; Иначе Возврат Таблица; КонецЕсли; КонецФункции // ТаблицаДляЗапроса() |
|||
10
vde69
04.04.16
✎
16:02
|
||||
11
Prog111
04.04.16
✎
19:21
|
(10) Эту конструкцию самой первой попробовал - тоже ругается при
Попытка НаборЗаписей.MoveFirst(); Исключение //нет записей в рекордсете НаборЗаписей.Close(); Возврат Результат; КонецПопытки; Я правильно понимаю, что рекордсет - это таблица в файле access? |
|||
12
shuhard
04.04.16
✎
19:29
|
(11)[ рекордсет - это таблица в файле access]
нет это объект ADODB |
|||
13
Prog111
04.04.16
✎
19:32
|
(12) А может такое быть, что при обычном открытии файла в определенной таблице строки есть, а при чтении из 1С строк нет? Через отладчик количество колонок в таблице показывает верное, а вот записей как-будто нет.
|
|||
14
hhhh
04.04.16
✎
21:28
|
Об_Конект = Новый COMОбъект("ADODB.Connection");
Попытка Об_Конект.Open(СтрокаПодключения); Исключение КонецПопытки; Команда = Новый COMОбъект("ADODB.Command"); Команда.ActiveConnection= Об_Конект; ТекстСелект = "SELECT * FROM klients"; НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); Команда.CommandText=ТекстСелект; Попытка НаборЗаписей=Команда.Execute(); Опис = "" Исключение Опис = ОписаниеОшибки(); КонецПопытки; // надо создать колонки Клиенты.Колонки.Очистить(); Для е = 0 по (НаборЗаписей.Fields.Count - 1) Цикл Клиенты.Колонки.Добавить(СокрЛП(НаборЗаписей.Fields(е).Name)); КонецЦикла; Попытка НаборЗаписей.MoveFirst(); Исключение //нет записей в рекордсете НаборЗаписей.Close(); Возврат Клиенты; КонецПопытки; НаборЗаписей.MoveFirst(); Пока НаборЗаписей.EOF() = 0 Цикл // тут имеем строку записи |
|||
15
vde69
05.04.16
✎
09:01
|
(11) пример из (10) на 100% рабочий, просто возьмите его целиком и адаптируйте под восьмерку
|
|||
16
lEvGl
гуру
05.04.16
✎
09:24
|
дело в этом
MyRst.Open (MyStr, MyCon, 2, 3)//adOpenDynamic, adLockOptimistic |
|||
17
shuhard
05.04.16
✎
09:26
|
(13) см. (2), (6), (16)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |