|
Обновление набора записей ADODB, почему не срабатывает? | ☑ | ||
---|---|---|---|---|
0
seraf
21.08.20
✎
10:17
|
Приветствую, почему у меня содержимое таблицы не апдейтится, где ошибка?
Connection = ConnectSQL(); Если Connection = Неопределено Тогда Сообщить("Не удалось установить соединение с базой данных!"); Возврат Неопределено; КонецЕсли; CommandText = "select * from tbl1 where msgid = " + msgid_; Попытка rsRES = NEW COMObject("ADODB.Recordset"); rsRES.CursorLocation = 3; rsRES.Open(CommandText, Connection, 2, 3); rsRES.Fields("Active").Value = 0; rsRES.Fields("UsrID").Value = Строка(ПолучитьУИДПольз()); rsRES.Update(); Исключение Сообщить("Ошибка обновления: "+ ОписаниеОшибки()); Connection.Close(); Возврат Неопределено; КонецПопытки; |
|||
1
Ёпрст
21.08.20
✎
10:26
|
а в каком месте апдейт то ?
|
|||
2
Ёпрст
21.08.20
✎
10:28
|
и.. какую запись ты этим кодом хочешь "проапдейтиить"?
|
|||
3
ДенисЧ
21.08.20
✎
10:28
|
(1) @rsRES.Update();@
А эт что? Британская королева? (по мотивам анекдота) |
|||
4
acht
21.08.20
✎
10:28
|
(0)
rst.CursorType = adOpenKeyset rst.LockType = adLockOptimistic |
|||
5
acht
21.08.20
✎
10:29
|
Ну и CursorLocation = 3; это adUseClient, что довольно странно
|
|||
6
acht
21.08.20
✎
10:31
|
И присоединюс к (2) - какую строку ты обновляешь-то?
|
|||
7
Ёпрст
21.08.20
✎
10:35
|
ну и проще тупо
update tbl1 set Active=0, UsrID='"+ПолучитьУИДПольз()+"' where msgid = " + msgid_; |
|||
8
seraf
21.08.20
✎
10:37
|
я обновить ожидал весь набор записей, апдейтом могу в принципе, но хотел еще через Recordset
не особо синтаксис этот знаю, по примерам смотрю |
|||
9
NorthWind
21.08.20
✎
10:39
|
(8) как весь? Вашим кодом вы обновите одну запись в обновляемом рекордсете.
|
|||
10
seraf
21.08.20
✎
10:39
|
всю отобранную гранулу можно заапдейтить одинаковым значением?
или при переборе отдельные значения Пока НЕ rsRES.eof() Цикл rsRES.Fields("Active").Value = 0; rsRES.Fields("UsrID").Value = Строка(ПолучитьУИДПольз()); rsRES.Update(); rsRES.MoveNext(); КонецЦикла; |
|||
11
seraf
21.08.20
✎
10:39
|
а какую моим кодом, одну первую что ли?
|
|||
12
NorthWind
21.08.20
✎
10:40
|
(11) да
|
|||
13
NorthWind
21.08.20
✎
10:40
|
(10) да, вот так надо делать
|
|||
14
NorthWind
21.08.20
✎
10:41
|
только... вы Edit забыли
|
|||
15
seraf
21.08.20
✎
10:42
|
Только Update за пределы цикла наверное, да
(14) какой Edit |
|||
16
NorthWind
21.08.20
✎
10:42
|
перед тем как изменять поля, сделайте recordset.Edit ()
|
|||
17
NorthWind
21.08.20
✎
10:43
|
а апдейт, по-моему, из цикла не надо убирать. Он на каждую запись работает. Хотя могу ошибаться, давно не делал, но по-моему, так.
|
|||
18
NorthWind
21.08.20
✎
10:43
|
другое дело что если вы делаете мувнекст, он, по-моему, все равно неявно апдейтит запись
|
|||
19
seraf
21.08.20
✎
10:45
|
ну поиграюсь, проверю, спасибо
а что дают 2,3 в rsRES.Open(CommandText, Connection, 2, 3); без них рекордсет не хотел обновляться, взял из какого-то примера и CursorLocation = 3; |
|||
20
NorthWind
21.08.20
✎
10:48
|
(6) по идее, если он не делает переходов по записям, то апдейтиться будет первая запись (после открытия) в обновляемом рекордсете.
Поскольку у него таблица одна и ключевая инфа явно присутствует (select *), то в общем-то нет никаких препятствий к тому чтобы ADO просралось и правильно поняло чего и как редактировать. |
|||
21
acht
21.08.20
✎
10:54
|
||||
22
NorthWind
21.08.20
✎
10:57
|
(19) третий параметр - тип курсора. Курсор - это набор записей на сервере БД. Для скуля чаще всего используется Keyset (1). Вы поставили 2, это динамический, более ресурсоемкий.
Четвертый - тип блокировки. Если вы хотите править по одной записи и полагаете что никто кроме вас в это время трогать записи не будет, то проще всего юзать оптимистический, тогда записи блокируются только когда вызывается Update. Есть еще работа с пакетами записей (батч оптимистик), это отдельная тема, долго рассказывать. Если другие юзеры тоже ковыряют записи, можно пессимистический. Есть еще рид-онли, это значит необновляемый рекордсет будет |
|||
23
NorthWind
21.08.20
✎
10:57
|
3 - это и есть оптимистический
|
|||
24
seraf
21.08.20
✎
13:39
|
спасибо
|
|||
25
NorthWind
21.08.20
✎
16:41
|
если вы хотите групповое исправление одним значением, лучше адо комманд и апдейт. Рекордсет тут невыгоден, будет пакет апдейтов, это долго.
|
|||
26
Жан Пердежон
21.08.20
✎
16:47
|
(0) DML-запрос нужен тебе
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |