ADODB RecordSet AddNew() #610074


#0 by vbh
Пытаюсь добавить новую строку, а мне: Ошибка при вызове метода контекста (AddNew)RecordSet.AddNew;по причине: Произошла исключительная ситуация (ADODB.Recordset): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки.
#1 by ДенисЧ
Продолжайте наблюдения.
#2 by ДенисЧ
А заодно доложите, чем insert не нравится.
#3 by vbh
через инсерт работает... делаю через addnew чтобы сразу отловить новый id Сообщить(RecordSet.Fields("id").Value);
#4 by vbh
пробовал и lock=3 (adLockOptimistic) тоже самое
#5 by shuhard
может быть есть обязательные поля ?
#6 by vbh
нету вот все поля ошибка таже
#7 by shuhard
а ещё возможно стоит сделать курсор на стороне клиента Recordset.CursorLocation = 3;
#8 by shuhard
+ 1
#10 by shuhard
ты не то написал adOpenDynamic стоял правильно попробуй
#11 by vbh
тоже самое
#12 by vbh
по синтаксису вроде правильно тройку ставил objRecordset.Open source,actconn,cursortyp,locktyp,opt
#13 by vbh
может в строке соединения что добавить надо?
#14 by shuhard
с mdb вот так работает:
#15 by vbh
те без всяких AddNew просто проапдэйтить....сейсас опробую
#16 by vbh
Ошибка при установке значения атрибута контекста (Value) RecordSet.Fields("MSG").value="sd"; по причине: Произошла исключительная ситуация (ADODB.Field): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки. нет не хочет. сдается мне не тем объектом пользуюсь
#17 by shuhard
покажи код
#19 by vbh
попробовал ещё так, тоже не работает
#20 by shuhard
#21 by vbh
shuhard, прошу прощения...затупил всё вроде заработало, щас юзера пропишу в конекте нормального и всё ))) {Форма.Форма.Форма}: Ошибка при вызове метода контекста (Update)    RecordSet.Update; по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for Oracle): ORA-01031: insufficient privileges
#22 by shuhard
ОК, хорошо что MS не жадничает и выкладывает в MSDN баги по продуктам конкурента
#23 by vbh
Всё работает, но мой план в не сработал ((( id возвращает Null
#24 by ДенисЧ
А с чего бы он должен был вернуться?
#25 by shuhard
Q8 Q8: Как получить значение счетчика только что добавленной записи? A1: Если запись добавляется через рекордсет, то так: переменная = rs!полесчетчика ... rs.Update 'или Set rs = ...OpenRecordset("...where 1=0") 'обязательно пустой рекордсет rs.AddNew 'ровно один раз; при добавлении двух и более записей ничего не получится ... rs.Update rs.MoveFirst 'или rs.AddNew ... rs.Update A2: Более широкий круг применимости у такого способа: Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset CurrentProject.Connection.Execute "INSERT ..." rs.Close
#26 by vbh
да видимо его надо генерировать какой то функцией или методом...курю...
#27 by shuhard
+1 фаг конечно по Access но возможно годиться и для Oracle
#28 by vbh
вот что нашел в документации по ADODB Когда вы заносите в таблицу запись, то необходимо создать уникальный ID записи. Существует 2 общих способа: 1) auto-increment колонки, 2) последовательности. Auto-increment колонки поддерживаются MySQL, Sybase и Microsoft Access и SQL Server. Однако большинство других баз не поддерживают такую возможность. Отсюда видно, что для создания переносимого кода у вас не такой большой выбор, а именно – использовать последовательности. Последовательности – это специальные функции, которые возвращают уникальное число каждый раз, когда вы к ним обращаетесь. Эти числа вполне подходят для использования в качестве уникальных ключей. В ADODB мы используем функцию GenId. В качестве параметра она принимает название последовательности. Различные таблицы могут иметь разные последовательности.
#29 by shuhard
GenId- это php функция
#30 by vbh
да
#31 by vbh
тему закрываю дальше с id сам разберусь.  shuhard - СПАСИБО за помошь!
#32 by shuhard
попробуй записать что-нибудь в id, вдруг у него есть триггер
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям