|
v7: ADODB.Recordset. Читаю с Листа, затем удаляю (чищу) поле, в RS.Delete() - ошибка | ☑ | ||
---|---|---|---|---|
0
aka AMIGO
31.07.15
✎
12:31
|
Есть файл Excel .xlsm, читается, но записать не могу ни в какую ячейку.
Код: RS = СоздатьОбъект("ADODB.Recordset"); ТекстЗапроса = "SELECT | Лист.* |FROM | ["+СписокЛистов.ПолучитьЗначение(2)+"] as Лист"; попытка RS.Open(ТекстЗапроса, Connection); исключение Сообщить ("Проблемы с выполнением запроса к "+СписокЛистов.ПолучитьЗначение(2)); Возврат; КонецПопытки; Пока RS.EOF() = 0 Цикл Для Счетчик = 1 По RS.Fields.Count Цикл Поле = RS.Fields.Item(Счетчик - 1); Знч = Поле.Value; RS.Delete(); КонецЦикла; // Обработка других полей RS.MoveNext(); КонецЦикла; Ошибка: RS.Delete(); {C:\1C\TMP\EXTFORMS\НОВЫЙСТО.ERT(190)}: ADODB.Recordset: Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки. Файл Excel позволяет редактировать, в ячейку спокойно пишется всё, что угодно. Пошарил по инету, вроде не нашел прямого указания причины.. |
|||
1
aka AMIGO
31.07.15
✎
12:34
|
у Recordset ведь нет параметров..
а сам вход в ОЛЕДБ такой: СтрокаСоединения ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " +СокрЛП(ЕхФайл) +" ;Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""; Connection = СоздатьОбъект("ADODB.Connection"); Connection.ConnectionString = СтрокаСоединения; |
|||
2
Serginio1
31.07.15
✎
12:42
|
||||
3
aka AMIGO
31.07.15
✎
12:43
|
ааа.. сообразил-таки..
Скорей всего в этом дело: "SELECT Лист.* FROM .." - это ведь Выбрать! (2) спасибо, сейчас посмотрю.. |
|||
4
Ёпрст
31.07.15
✎
12:49
|
(3) нет
|
|||
5
Мыш
31.07.15
✎
12:55
|
LockType
|
|||
6
aka AMIGO
31.07.15
✎
13:04
|
(4) ну, вот тут об этом-же.. почти.. :)
http://forum.sources.ru/index.php?showtopic=22179 (5) так пойдет? rs.LockType=adLockBatchOptimistic (слямзил из http://www.w3schools.com/ASp/prop_rs_locktype.asp ) сейчас попробую этот оптимистик :) |
|||
7
Ёпрст
31.07.15
✎
13:05
|
(6)
rs.LockType=1; |
|||
8
aka AMIGO
31.07.15
✎
13:06
|
(7) сенк..
|
|||
9
aka AMIGO
31.07.15
✎
13:11
|
RS.LockType = 1;
RS.Open(ТекстЗапроса, Connection); ... RS.Delete(); //увы, ошибка осталась, та-же самая.. |
|||
10
Ёпрст
31.07.15
✎
13:20
|
а так ?
rs.CursorType = 3; rs.LockType = 1; |
|||
11
Ёпрст
31.07.15
✎
13:20
|
+ попробовать с такой строкой:
Connection=CreateObject("ADODB.Connection"); Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; |Data Source="+ПолноеИмяФайла+"; |Mode=ReadWrite; |Extended Properties=""Excel 8.0; |HDR=No; |FirstRowHasNames=0; |IMEX=1;"""; |
|||
12
aka AMIGO
31.07.15
✎
13:29
|
+9 подставлял RS.LockType = 1, 2 и 3 - не проходит..
оставил RS.LockType = 3 rs.CursorType = 3; - подставил, характер ошибки изменился, ругань уже оптимистичная: Знч = Поле.Value; {C:\1C\TMP\EXTFORMS\НОВЫЙСТО.ERT(188)}: Microsoft Cursor Engine: Дескриптор строки указывал на удаленную строку или строку, помеченную для удаления. (11) сейчас попробую.. минуточку.. |
|||
13
Serginio1
31.07.15
✎
13:38
|
(12) Странная у тебя логика.
В цикле по полям ты удаляешь запись. Что хотел сделать то |
|||
14
Ёпрст
31.07.15
✎
13:39
|
И.. проще написать запрос на delete сразу
|
|||
15
aka AMIGO
31.07.15
✎
13:44
|
(11) Немного видоизменил параметры, иначе на открытие не работает:
Connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; |Data Source="+СокрЛП(ЕхФайл)+"; |Mode=ReadWrite; |Extended Properties=""Excel 12.0; |HDR=No; |FirstRowHasNames=0; |IMEX=1;"""; Меня носом уже тыкали в несоответствие параметров.. http://www.forum.mista.ru/topic.php?upd&id=749434 Чтение проходит нормально, а запись - нет.. Но это уже кое-что.. (13) возможно, странная.. не возражаю ничуть, т.к. пару дней назад вообще вслепую шарил.. А идея такая - у меня в файле Excel 2 Листа, на первом - данные, я их читаю в ТЗ, на втором - я должен переработать ТЗ и записать новые данные.. Так вот второй лист - не пустой, мне его надо вначале почистить. Удалить лист и создать заново - это для меня пока сложно.. Вот я и чистил данные на имеющемся 2-м Листе.. Я надеюсь, понятно объяснил?.. извините за многословность.. (14) мало знаний у меня, способ-то должен всплыть в мозгах :) |
|||
16
aka AMIGO
31.07.15
✎
13:53
|
+15 вот такая картинка:
http://pics.rsh.ru/img/LOC_8zha9slh.jpg Первый Лист - "Таблица расчетов", 2-й "Печать", туда я и норовлю записывать, пока даже стереть не получается.. |
|||
17
aka AMIGO
31.07.15
✎
13:59
|
Вот у меня вопрос вертится, давно уже..
этот RS.Delete(); - он что удаляет? ячейку? строку? колонку? Или таки всё на Листе? |
|||
18
Serginio1
31.07.15
✎
14:01
|
Вместо Select
Функция ВыполнитьКомандуАДО(Имя,Con,ТекстЗапроса) Экспорт Cmd=новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection=Con; Cmd.CommandText = Имя; Cmd.CommandType = 1; Command.CommandText=ТекстЗапроса; Command.Execute(); КонецФункции ТекстЗапроса = "Delete |FROM | ["+СписокЛистов.ПолучитьЗначение(2)+"] as Лист"; |
|||
19
Serginio1
31.07.15
✎
14:02
|
(17) Удаляет строку. Смотри документацию.
Смотри 2 там много чего написано |
|||
20
aka AMIGO
31.07.15
✎
14:04
|
(18) (19) мм.. понятно..
|
|||
21
vdv77
31.07.15
✎
14:11
|
Приношу извинения, что влез в тему, но задам вопрос связанный с механизмом ADODB.
Можно ли как то прочитать и загрузить в 1с рисунок(фото) с листа Экселя с помощью СоздатьОбъект("ADODB. Ранее мне ответили что такое возможно только с помощью OLE механизма. |
|||
22
aka AMIGO
31.07.15
✎
14:43
|
(21) попросил выслать мне материалы
http://www.askit.ru/custom/progr_admin/progr_admin_plan.htm жду.. без мануала плохо :) |
|||
23
aka AMIGO
31.07.15
✎
14:46
|
(22) к (19) :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |