powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 2 вопроса про редактирование Recorset'a
10 сообщений из 10, страница 1 из 1
2 вопроса про редактирование Recorset'a
    #33117691
Azart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Добавляю записать
Код: plaintext
rs.AddNew "UserName", "MMM"
- всё работает. А теперь представим что я не знаю имени таблицы и делаю так:
Код: plaintext
1.
2.
3.
4.
Dim aFields() As String
For i =  1  To rs.Fields.Count -  1 
        aFields(i) = oRsOut.Fields(i).Name
        rs.AddNew aFields(i), "MMM"
Next i
То ругается на aFields(i) = oRsOut.Fields(i).Name, кричит Object required. Что не так?

2. Как добавить запись в рекордсет, что бы НЕ произошли изменене таблицы на сервере? Т.е. мне нужно добавить 2-3 строки в рекордсет локально и вывести их в Датагриде, но в таблицу на сервере эти 2-3 строки не должны попасть. Пытался закрывать конекшен или рекордсет - говорит что операция не доступно, т.к. рекордсет закрыт.

Нижи код подключения к БД.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim rs As ADODB.Recordset
Dim con As ADODB.Connection
Dim constr As String
Dim query As String

constr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=OrwellDBTest;Data Source=HAMMER;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=HAMMER;Use Encryption for Data=False;Tag with column collation when possible=False"
query = "Select * from Profiles"

Set con = New ADODB.Connection
con.Open constr

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open query, con, adOpenDynamic, adLockOptimistic
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117761
Azart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С первым вопросом проблема решена:
Код: plaintext
aFields(i) = oRsOut.Fields(i).Name
заменил на
Код: plaintext
aFields(i) = rs.Fields(i).Name
А со вторым так и не в курсе, подскажите.
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117774
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim rs As ADODB.Recordset
Dim con As ADODB.Connection
Dim constr As String
Dim query As String

constr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=OrwellDBTest;Data Source=HAMMER;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=HAMMER;Use Encryption for Data=False;Tag with column collation when possible=False"
query = "Select * from Profiles"

Set con = New ADODB.Connection
con.Open constr

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open query, con, adOpenDynamic, adLockOptimistic
set rs.ActiveConnection = Nothing
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117825
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:
Код: plaintext
rs.Open query, con, adOpenStatic, adLockBatchOptimistic, adCmdText
(Без разрыва ActiveConnection)
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117863
Azart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, помогло. Возник ещё вопрос.
Метод Addnew добавляет новую запись, как сразу записать данные во все поля новой записи?
Есть пишу так,
Код: plaintext
1.
2.
3.
4.
5.
aFields( 1 ) = rs.Fields( 1 ).Name
aFields( 2 ) = rs.Fields( 2 ).Name
aFields( 3 ) = rs.Fields( 3 ).Name
rs.AddNew aFields( 1 ) = "MMM"
rs.AddNew aFields( 2 ) = "MMM"
rs.AddNew aFields( 3 ) = "MMM"
Получается не верно - это и логично :), добавляется 3 новых записи, в которых заполняется только 1 поле.
Так тоже не работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
aFields( 1 ) = rs.Fields( 1 ).Name
aFields( 2 ) = rs.Fields( 2 ).Name
aFields( 3 ) = rs.Fields( 3 ).Name
With rs
.AddNew
!aFields( 1 ) = "MMM"
!aFields( 2 ) = "MMM"
!aFields( 3 ) = "MMM"
End With
Этот цикл тоже не помогает, работат как и первый случай.
Код: plaintext
1.
2.
3.
For i =  1  To  3 
        aFields(i) = rs.Fields(i).Name
        rs.AddNew aFields(i), "MMM"
Next i
Вот незнаю как цикл орканизовать :(
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117960
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rs.AddNew Array(Поле1, Поле2), (Значение1, Значение2)
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117964
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поторопился:

rs.AddNew Array(Поле1, Поле2), Array(Значение1, Значение2)
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33117991
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, можно и так:
Код: plaintext
1.
2.
3.
rs.AddNew Поле1, Значение1
rs(Поле2) = Значение2
rs(Поле3) = Значение3
rs.Update
И, если используется BatchOptimistic, то (есл все NotNull-поля до команды Update определены) вас не будут мучить констрейнты, которые "услужливо" рекордсет взял из источника данных.
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33119661
Azart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
rs.AddNew Поле1, Значение1
rs(Поле2) = Значение2
rs(Поле3) = Значение3
rs.Update
Спасибо за метод он работает, но я за ранее не знаю сколько будет полей в возвращённом рекордсете, поэтому заранее не могу написать структуру, надо цикл какой то мутить:(

Возник ещё 1 вопрос: в возвращённом рекордсете, первое поле это счётчик, если НЕ писать Set rs.ActiveConnection = Nothing, то при вставке новой записи счётчик увеличивается на 1, но мне необходимо отключать конекшен, но при этом счётчик вставляет "0" в новую запись, что не есть правильно, а сам я вставить в его поле значение не могу "Multiple-step operation generated errors. Check each status value.". Возможно это как нибудь обойти(лучшим вариантов было бы вставлять нужный номер ручками, ну если нельзя то увеличивать на 1 счётчик)?
...
Рейтинг: 0 / 0
2 вопроса про редактирование Recorset'a
    #33119686
Azart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цикл придумал:
Код: plaintext
1.
2.
3.
rs.AddNew aFields( 1 ), "MMM"
For j =  2  To  3 
    rs(aFields(j)) = "MMM"
Next j

А вот со счётчиком пока что хз :(
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 2 вопроса про редактирование Recorset'a
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]