|
ADODB RecordSet AddNew() | ☑ | ||
---|---|---|---|---|
0
vbh
11.05.12
✎
12:31
|
Пытаюсь добавить новую строку, а мне: Ошибка при вызове метода контекста (AddNew)RecordSet.AddNew();по причине:
Произошла исключительная ситуация (ADODB.Recordset): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки. Конект = Новый ComОбъект("ADODB.Connection"); СтрокаСоединения3 ="Provider=MSDAORA.1;Password=pswd;User ID=user;Data Source=dianet;Persist Security Info=True"; Конект.ConnectionString = СтрокаСоединения3; Попытка Конект.Open(); //Сообщить("Подключились к шине!"); Исключение Сообщить("Подключение к шине не удалось!"); Возврат; КонецПопытки; Command =Новый ComОбъект("ADODB.Command"); Command.ActiveConnection= Конект; Command.CommandText ="select * from errors"; RecordSet = Новый ComОбъект("ADODB.Recordset"); Recordset.Open("select * from errors",конект,2,4); RecordSet.AddNew(); RecordSet.Fields("MSG").value="sd"; RecordSet.Update(); Сообщить(RecordSet.Fields("id").Value); Recordset.Close(); RecordSet=""; Конект.Close(); |
|||
1
ДенисЧ
11.05.12
✎
12:32
|
Продолжайте наблюдения.
|
|||
2
ДенисЧ
11.05.12
✎
12:32
|
А заодно доложите, чем insert не нравится.
|
|||
3
vbh
11.05.12
✎
12:34
|
через инсерт работает... делаю через addnew() чтобы сразу отловить новый id
Сообщить(RecordSet.Fields("id").Value); |
|||
4
vbh
11.05.12
✎
12:37
|
пробовал и lock=3 (adLockOptimistic) тоже самое
|
|||
5
shuhard
11.05.12
✎
12:40
|
(4) может быть есть обязательные поля ?
|
|||
6
vbh
11.05.12
✎
12:45
|
(5) нету
вот все поля ошибка таже RecordSet = Новый ComОбъект("ADODB.Recordset"); Recordset.Open("select * from errors",конект,2,4); RecordSet.AddNew(); RecordSet.Fields("MSG").value="sd"; RecordSet.Fields("NAME").value="name"; RecordSet.Fields("DSC").value="not use"; RecordSet.Fields("ETABLE").value="N"; RecordSet.Fields("LOG").value="Y"; RecordSet.Update(); |
|||
7
shuhard
11.05.12
✎
12:48
|
(6)
а ещё возможно стоит сделать курсор на стороне клиента Recordset.CursorLocation = 3; |
|||
8
shuhard
11.05.12
✎
12:48
|
||||
9
vbh
11.05.12
✎
12:50
|
не помогло
Recordset.Open("select * from errors",конект,3,4); |
|||
10
shuhard
11.05.12
✎
12:52
|
(9) ты не то написал
adOpenDynamic(2) стоял правильно попробуй Recordset.CursorLocation = 3; Recordset.Open("select * from errors",конект,2,3); |
|||
11
vbh
11.05.12
✎
12:55
|
(10) тоже самое
|
|||
12
vbh
11.05.12
✎
12:56
|
по синтаксису вроде правильно тройку ставил
objRecordset.Open source,actconn,cursortyp,locktyp,opt |
|||
13
vbh
11.05.12
✎
12:57
|
может в строке соединения что добавить надо?
|
|||
14
shuhard
11.05.12
✎
12:58
|
(13) с mdb вот так работает:
MyCon = Новый COMОбъект ("ADODB.Connection"); MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\1.MDB"); MyRst = Новый COMОбъект ("ADODB.Recordset"); MyStr = "select * from zdania where NOM_REG_VI=1 and id_predpr=1 and id_ik=1 and id_zdan=1"; MyRst.Open (MyStr, MyCon, 2, 3);//adOpenDynamic, adLockOptimistic MyRst.Fields("Resultat").Value="Киргуду"; // Присвоение MyRst.Update(); //Запись MyRst.Close(); MyCon.Close(); |
|||
15
vbh
11.05.12
✎
13:01
|
те без всяких AddNew() просто проапдэйтить....сейсас опробую
|
|||
16
vbh
11.05.12
✎
13:03
|
Ошибка при установке значения атрибута контекста (Value) RecordSet.Fields("MSG").value="sd";
по причине: Произошла исключительная ситуация (ADODB.Field): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки. нет не хочет. сдается мне не тем объектом пользуюсь |
|||
17
shuhard
11.05.12
✎
13:04
|
(16) покажи код
|
|||
18
vbh
11.05.12
✎
13:06
|
Конект = Новый ComОбъект("ADODB.Connection");
СтрокаСоединения3 ="Provider=MSDAORA.1;Password=1C1C1C;User ID=1C;Data Source=dianet;Persist Security Info=True"; Конект.ConnectionString = СтрокаСоединения3; Попытка Конект.Open(); //Сообщить("Подключились к шине!"); Исключение Сообщить("Подключение к шине не удалось!"); Возврат; КонецПопытки; Command =Новый ComОбъект("ADODB.Command"); Command.ActiveConnection= Конект; Command.CommandText ="select * from errors"; RecordSet = Новый ComОбъект("ADODB.Recordset"); Recordset.Open("select * from errors",конект,2,3); //RecordSet.AddNew("MSG","sadfsdf"); RecordSet.Fields("MSG").value="sd"; //RecordSet.Fields("NAME").value="name"; //RecordSet.Fields("DSC").value="not use"; //RecordSet.Fields("ETABLE").value="N"; //RecordSet.Fields("LOG").value="Y"; RecordSet.Update(); Сообщить(RecordSet.Fields("id").Value); Recordset.Close(); RecordSet=""; Конект.Close(); |
|||
19
vbh
11.05.12
✎
13:06
|
попробовал ещё так, тоже не работает
RecordSet = Новый ComОбъект("ADODB.Recordset"); Recordset.Open("select * from errors",конект,2,3); RecordSet.AddNew("MSG","sadfsdf"); |
|||
20
shuhard
11.05.12
✎
13:07
|
(18) а где
Recordset.CursorLocation = 3; |
|||
21
vbh
11.05.12
✎
13:13
|
shuhard, прошу прощения...затупил
всё вроде заработало, щас юзера пропишу в конекте нормального и всё ))) {Форма.Форма.Форма(76)}: Ошибка при вызове метода контекста (Update) RecordSet.Update(); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for Oracle): ORA-01031: insufficient privileges ОчиститьСообщения() ; Конект = Новый ComОбъект("ADODB.Connection"); СтрокаСоединения3 ="Provider=MSDAORA.1;Password=pswd;User ID=user;Data Source=dianet;Persist Security Info=True"; Конект.ConnectionString = СтрокаСоединения3; Попытка Конект.Open(); //Сообщить("Подключились к шине!"); Исключение Сообщить("Подключение к шине не удалось!"); Возврат; КонецПопытки; Command =Новый ComОбъект("ADODB.Command"); Command.ActiveConnection= Конект; Command.CommandText ="select * from errors"; RecordSet = Новый ComОбъект("ADODB.Recordset"); Recordset.CursorLocation = 3; Recordset.Open("select * from errors",конект,2,3); RecordSet.AddNew(); RecordSet.Fields("MSG").value="sd"; RecordSet.Fields("NAME").value="name"; RecordSet.Fields("DSC").value="not use"; RecordSet.Fields("ETABLE").value="N"; RecordSet.Fields("LOG").value="Y"; RecordSet.Update(); Сообщить(RecordSet.Fields("id").Value); Recordset.Close(); RecordSet=""; Конект.Close(); |
|||
22
shuhard
11.05.12
✎
13:22
|
(21) ОК,
хорошо что MS не жадничает и выкладывает в MSDN баги по продуктам конкурента |
|||
23
vbh
11.05.12
✎
13:23
|
Всё работает, но мой план в (3) не сработал ((( id возвращает Null
|
|||
24
ДенисЧ
11.05.12
✎
13:25
|
(23) А с чего бы он должен был вернуться?
|
|||
25
shuhard
11.05.12
✎
13:26
|
(23) http://www.sql.ru/faq/faq_topic.aspx?fid=214
Q8 Q8: Как получить значение счетчика только что добавленной записи? A1: Если запись добавляется через рекордсет, то так: rs.AddNew переменная = rs!полесчетчика ... rs.Update 'или Set rs = ...OpenRecordset("...where 1=0") 'обязательно пустой рекордсет rs.AddNew 'ровно один раз; при добавлении двух и более записей ничего не получится ... rs.Update rs.MoveFirst переменная = rs!полесчетчика 'или rs.AddNew ... rs.Update rs.Bookmark = rs.LastModified переменная = rs!полесчетчика A2: Более широкий круг применимости у такого способа: Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset CurrentProject.Connection.Execute "INSERT ..." rs.Open "SELECT @@identity as cou", CurrentProject.Connection переменная = rs!cou rs.Close |
|||
26
vbh
11.05.12
✎
13:27
|
(24) да видимо его надо генерировать какой то функцией или методом...курю...
|
|||
27
shuhard
11.05.12
✎
13:28
|
(25) +1
фаг конечно по Access но возможно годиться и для Oracle |
|||
28
vbh
11.05.12
✎
13:58
|
вот что нашел в документации по ADODB
Когда вы заносите в таблицу запись, то необходимо создать уникальный ID записи. Существует 2 общих способа: 1) auto-increment колонки, 2) последовательности. Auto-increment колонки поддерживаются MySQL, Sybase и Microsoft Access и SQL Server. Однако большинство других баз не поддерживают такую возможность. Отсюда видно, что для создания переносимого кода у вас не такой большой выбор, а именно – использовать последовательности. Последовательности – это специальные функции, которые возвращают уникальное число каждый раз, когда вы к ним обращаетесь. Эти числа вполне подходят для использования в качестве уникальных ключей. В ADODB мы используем функцию GenId(). В качестве параметра она принимает название последовательности. Различные таблицы могут иметь разные последовательности. http://php.russofile.ru/ru/translate/sql/adodb03/#0102 |
|||
29
shuhard
11.05.12
✎
14:01
|
(28) GenId()- это php функция
|
|||
30
vbh
11.05.12
✎
14:03
|
(29) да
|
|||
31
vbh
11.05.12
✎
14:05
|
тему закрываю дальше с id сам разберусь. shuhard - СПАСИБО за помошь!
|
|||
32
shuhard
11.05.12
✎
14:05
|
(30) попробуй записать что-нибудь в id, вдруг у него есть триггер
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |