|   |   | 
| 
 | 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) :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |