2016-07-01 7 views
0

Быстрый вопрос, новый для этого сайта, особенно для программирования.Обновление набора записей в VB6

Я пытаюсь выбрать данные из SqlServer, а затем обновить его, пока он все еще является набором записей. Я не хочу обновлять фактическую таблицу данными .... Итак, если у меня есть поле под названием RS! («FirstName»), и я хочу добавить к нему строку, например «MR»

Вот как я это сделать

str = "Select FirstName from tblClient" 
rs.Open SQL, g_cn, adOpenStatic 

rs.movefirst 
do while not rs.eof 
    rs("FirstName") = "MR" & rs("FirstName") <--- this is what i'm trying to do but it tells me I cannot update it. 
    rs.movenext 
loop 

Как это исправить

+0

Это сложно? я делаю неправильно? это невозможно? проклятый хотя бы комментарий или еще что-то – BubbaSparxx

+0

Прошло много лет с тех пор, как я сделал VB6, но я посмотрел на наш старый код, и у него есть такие вещи, как: 'rs! [FirstName] =" MR "& rs! [FirstName]' , – Mark

+1

@mark Я думаю, что это имеет какое-то отношение к курсору, я пробовал адаптироваться и все это, но ошибка просто говорит, что текущий набор записей не позволяет обновлять – BubbaSparxx

ответ

0

Вы должны показать весь код, чтобы сделать его проще, чтобы помочь вам.

Из того, что вы показываете - очевидным решением является использование переменной str. Он будет отображаться быстрее, если вы добавите Option Explicit на самом верху своего модуля, тогда вы можете сказать, что не указали некоторые из ваших варов.

В любом случае, если вы используете sql, который вы объявили - и - изменить тип набора записей, он должен работать

Изменение:

str = "Select FirstName from tblClient" 
rs.Open SQL, g_cn, adOpenStatic 

To:

str = "Select FirstName from tblClient" 
rs.Open str, g_cn, adOpenDynamic, adLockOptimistic 

Loop:

rs.Edit 
rs("FirstName") = "MR" & rs("FirstName") 
rs.Update 
rs.movenext 
+0

str объявляется как строка. С rs.open, что вы изменили его на не работает, он подходит к обработчику ошибок, давая мне ошибку 3001 - аргументы неправильного типа, вне диапазона.Если я выберу одно из этих запятых, это то, когда он работает, но он не позволяет мне обновлять – BubbaSparxx

+0

Удалить дополнительные запятые - использовать 'rs.Open str, g_cn, adOpenDynamic, adLockOptimistic' - добавить Edit before и Update после – dbmitch

+0

Спасибо за вашу помощь в этом. – BubbaSparxx

1

Настоящий ответ заключается в создании нового отсоединенного набора записей. Вы можете сделать это так, как хотите, и просто ничего не делаете, когда закончите. Вы можете сделать это специально для набора записей, который вы хотите изменить или написать более общий метод, который копирует исходный набор записей.

Вот общий пример. rsOriginal - это набор записей, который передается и используется позже в коде. rsUpdateable - это локальный набор записей, созданный как копия оригинала, а затем назначенный исходной переменной набора записей. Теперь он полностью обновляется и изменения не могут быть возвращены в исходную таблицу.

... 

'clone a recordset into a new updateable recordset 
Dim rsUpdateable As New ADODB.Recordset 
Dim fld As ADODB.Field 
'errors here are unlikely, but if happens I don't want to alert the user 
On Error Resume Next 
'build the table schema 
For Each fld In rsOriginal.Fields 
    rsUpdateable.Fields.Append fld.Name, fld.Type, fld.DefinedSize 
Next fld 
rsUpdateable.Open 
'populate the new recordset with the original values 
rsUpdateable.AddNew 
For Each fld In rsOriginal.Fields 
    rsUpdateable.Fields(fld.Name).Value = fld.Value 
Next fld 
Set rs = rsUpdateable 'done 
On Error GoTo OriginalErrorHandler 'restore error handler 

... 
+0

Я не пытаюсь создать новый набор записей - я хотел бы обновить данные в своем наборе записей до того, как он будет загружен в поле со списком. Таким образом, в основном, если мой recorset состоит из таких значений, как: Майк, Джон, Боб, Джейн (каждое из этих значений имеет идентификатор), а затем на основе идентификатора (в этом случае я бы сделал оператор case), я хочу добавить " MR "перед каждым мужчиной (на основе идентификатора), чтобы он выглядел так: MR. Майк, г-н Джон, г-н Боб, а затем использовать эти значения для загрузки моих списков. – BubbaSparxx

+0

@ user6539508 Я разработал это, потому что я был в похожей ситуации, когда мне нужно было обновлять данные в исходном наборе записей, которые никогда не будут сохранены обратно в базу данных. Это был простой метод, который я использовал для того, чтобы обойти оригинальный набор записей, который нельзя обновлять. – jac

Смежные вопросы