Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 2 вопроса про редактирование Recorset'a / 10 сообщений из 10, страница 1 из 1
15.06.2005, 15:39:11
    #33117691
Azart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
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
15.06.2005, 16:02:23
    #33117761
Azart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
С первым вопросом проблема решена:
Код: plaintext
aFields(i) = oRsOut.Fields(i).Name
заменил на
Код: plaintext
aFields(i) = rs.Fields(i).Name
А со вторым так и не в курсе, подскажите.
...
Рейтинг: 0 / 0
15.06.2005, 16:06:11
    #33117774
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Код: 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
15.06.2005, 16:26:35
    #33117825
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Или так:
Код: plaintext
rs.Open query, con, adOpenStatic, adLockBatchOptimistic, adCmdText
(Без разрыва ActiveConnection)
...
Рейтинг: 0 / 0
15.06.2005, 16:37:53
    #33117863
Azart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Спасибо, помогло. Возник ещё вопрос.
Метод 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
15.06.2005, 17:11:08
    #33117960
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
rs.AddNew Array(Поле1, Поле2), (Значение1, Значение2)
...
Рейтинг: 0 / 0
15.06.2005, 17:11:38
    #33117964
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Поторопился:

rs.AddNew Array(Поле1, Поле2), Array(Значение1, Значение2)
...
Рейтинг: 0 / 0
15.06.2005, 17:19:52
    #33117991
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Кстати, можно и так:
Код: plaintext
1.
2.
3.
rs.AddNew Поле1, Значение1
rs(Поле2) = Значение2
rs(Поле3) = Значение3
rs.Update
И, если используется BatchOptimistic, то (есл все NotNull-поля до команды Update определены) вас не будут мучить констрейнты, которые "услужливо" рекордсет взял из источника данных.
...
Рейтинг: 0 / 0
16.06.2005, 14:38:55
    #33119661
Azart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Код: 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
16.06.2005, 14:45:03
    #33119686
Azart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 вопроса про редактирование Recorset'a
Цикл придумал:
Код: plaintext
1.
2.
3.
rs.AddNew aFields( 1 ), "MMM"
For j =  2  To  3 
    rs(aFields(j)) = "MMM"
Next j

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


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