Отсоединенный рекордсет, это:В 99% случаев отсоединенные рекордсеты и биндинг.
rs.open
set rs.activeconnection=nothing
cnn.close
… 'редактирование данных пользователем
cnn.open
rs.updatebatch
Поставленная задача: выдача результатов sql запроса в грид, возможность эти данные редактировать (ins,upd,del) и отправлять обратно в базу. При этом уменьшить нагрузку на сеть (если некоторые значения подставляются триггерами, то не тащить на клиента заново всю выборку, а только те записи которые были отредактированы), обеспечить проверку форматов вводимых данных (например, дата только yyyy.mm.dd), для некоторых таблиц возможность редактирования через хранимые процедуры.Тот, который решает поставленную задачу.
Поставленная задача: выдача результатов sql запроса в грид, возможность эти данные редактировать (ins,upd,del) и отправлять обратно в базу. При этом уменьшить нагрузку на сеть (если некоторые значения подставляются триггерами, то не тащить на клиента заново всю выборку, а только те записи которые были отредактированы), обеспечить проверку форматов вводимых данных (например, дата только yyyy.mm.dd), для некоторых таблиц возможность редактирования через хранимые процедуры.
Потому что уже сто лет назад написан весь функционал для редактирования, который кочует из проекта в проект, а так же не нужно избретать всякую хрень для записи данных в базу.
Я работатаю с обычным. Но в принципе без разницы с каким рекордсетом работать, отсоединенным или нет.Wasup! писал(а):Правильно ли я понимаю, что в таком случае я работаю с отсоединенным от базы рекордсетом (rs.activeconnection=nothing)?
Лиично я так бы не делал. Зачем вручную делать Insert/Update базы, если ты пользуешься рекордсетом?Wasup! писал(а):То есть, когда пользователь нажимает кнопку "Сохранить" на форме для редактирования.
Я отправляю в базу оператор cnn.execute "update mytable set … = …" и....
rs.Open "SELECT...", cn, adOpenKeyset, adLockOptimistic
Text1.Text = rs.Fields(0).Value
Text2.Text = rs.Fields(1).Value
.........
rs.Fields(0).Value = Text1.Text
rs.Fields(1).Value = Text2.Text
rs.Update
Unload Me
А значение поля timestamp пользователю должно быть вообще безразлично и выводить его вообще не нужно. Поле типа Timestamp не используется для хранения даты/время -- для этого существует datetime.Wasup! писал(а):значение timestamp подставляется в триггере, поэтому выбираем его из базы
VVitafresh писал(а):Вот и весь процесс редактирования. При этом не нужно вручную обновлять грид, т.к. все изменения текущего рекордсета там автоматически отразятся.
rs.open "select Id1, Value, Id2 from MyTab"
set rs.activeconnection=nothing 'чтобы при работе с рекордсетом изменения не отправлялись в базу
cnn.execute "Call AddNewRecToMyTab(?,?)", NewId1,NewValue 'добавили запись в базу, Id2 подставляется в процедуре
rs2.open "select Id1, Value, Id2 from MyTab where Id1=NewId1" 'получили все поля только что добавленной записи
rs.addnew 'добавили пустую строку к рекордсету
rs(0)=rs2(0) 'заполнили её полученными значениями
rs(1)=rs2(1)
rs(2)=rs2(2)
'Обновили грид
Wasup! писал(а):Это можно упростить?
Wasup! писал(а):А если редактирование таблицы идет через хранимки?
Я никак не вижу простого способа это сделать, не прибегая к отсоединению рекордсета и ручного его обновления.
Это можно упростить?
Сейчас этот форум просматривают: Yandex-бот и гости: 110