Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» VB 6.0: Проблема с ADODB.Connection

Автор: vbstudent
Дата сообщения: 06.11.2004 19:29
Приветствую!
Спецы VB нужна помощь!
Проблема в следующем коде. Почему я не могу открыть еще одно соединение?

Вот кусок кода:

Private Sub Create_Click()
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String

dsn = "DSN=mysql; Uid=test; PWD="
Conn.Open (dsn)

Sql= “Select * Table1”
Rs.Open sql, Conn
Set prefix = rs(“prefix”)
Do Until rs.EOF

< Вот тут мне надо создать еще один рекодсет
Что то типа
………………………………………………..
Dim Conn2 As New ADODB.Connection
Dim rs2 As New ADODB.Recordset
Dim sql2 As String

Sql2 = “Select * From Table2 where prefix = ” & prefix
Rs2.Open sql2, Conn2
Set id = rs2(“id”)
Do until rs2.EOF
Rs2.MoveNext
Loop
…………………………………………………….
Но вот к сожалению я получаю тут ошибку, что объект используется.


Rs.MoveNext
Loop


End Sub


Помогите, только пожалуйста не предлагайте INNER JOIN, нужно именно создать цикл внутри цикла. Заранее благодарю.
Автор: z2Rus
Дата сообщения: 10.01.2005 04:48
Я не понимаю зачем создавать для второго запроса еще одно отдельное соединение - это лишняя трата времени на клиенте и ресурсов на сервере, вместо этого можно вполне использовать уже существующее наприме так:

Rs2.Open sql2, Conn

Но это еще не все. Правилом хорошего тона является явное указание типа курсора и типа блокировки. Т. е. намного лучше будет так:
-------------------------------------------------------------
Rs2.Open sql2, Conn, adOpenStatic, adLockReadOnly
---------------------------------------------------------------

Вместо adLockReadOnly можно использовать (в зависимости от постановки задачи)

adOpenForwardOnly - Default for server-side Recordsets; opens a Recordset that supports scrolling forward only

adLockPessimistic - ADO relies on the OLE DB provider to ensure that your update attempt will succeed.


Ну наконец последнее - надо убедиться, что второй рекордсет вообще чем-то заполняется
(это можно проверить свойством recordCount).

-------------------------------------------------------------------------------------------

Ну и наконец последнее, если надо выбрать запрос вида Select * from table это можно сделать вообще в одну строчку:

rs.Open "your_table_name", conn, adOpenStatic, adLockReadOnly, adCmdTable







adLockOptimistic - The data is not locked until you call Update.

adLockBatchOptimistic Modifications to your data are cached until you call UpdateBatch.



Вместо adOpenStatic (в зависимости от постановки задачи)

adOpenForwardOnly - Default for server-side Recordsets; opens a Recordset that supports scrolling forward only

adOpenStatic - Default and only possible value for client-side Recordsets; supports scrolling forward and backward; changes made by other users are not visible

adOpenKeyset - Supports scrolling forward and backward; modifications and deletions by other users are visible

adOpenDynamic - Supports scrolling forward and backward; modifications, deletions, and insertions made by other users are visible




Автор: anyany
Дата сообщения: 21.12.2012 10:03
А как тогда вот здесь поступить (конектимся к MS SQL) - проверить наличие записи и если она есть обновить новыми значениями, если её нет - добавить новую запись.

SendTable = "dbo.xxx"
conn.Provider = "SQLOLEDB"
conn.Properties("Data Source").Value = "xxxx.com"
conn.Properties("Initial Catalog").Value = "SIS"
conn.Properties("Integrated Security").Value = "SSPI"
conn.CommandTimeout = 300

conn.Open '
conn.BeginTrans

Set rs = New ADODB.Recordset
rs.CursorType = adOpenKeyset
rs.LockType = adLockPessimistic


rs.Open "Select ... where дата=21.12.2012", conn, adOpenKeyset, adLockPessimistic
if rs.recordCount = 1
rc.update ? или
...
else
rc.add ?
....
end if

Тут как правильно написать?

Можно было бы написать хранимую процедуру на MSSQL, что то типа

if (select count(поле1) from таблица where поле1 = @Data) = 0
INSERT INTO таблица (Поле1, Поле2) VALUES (@Data, @SationValues)
else
UPDATE таблица SET Поле2 = @SationValues WHERE (Поле1 = @Data);

но чегото не разобрался пока

Страницы: 1

Предыдущая тема: Проверка орфографии


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.