MS SQL 2000 : Взаимодействие объектов Recordset, Command

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Шмульке
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.08.2003 (Чт) 8:17
Откуда: Владивосток

MS SQL 2000 : Взаимодействие объектов Recordset, Command

Сообщение Шмульке » 20.01.2004 (Вт) 4:26

Итак, постановка вопроса...

СУБД: MS SQL Server
Клиент: VB6, Janus GridEX (но это не очень важно)

вызывается хранимая процедура:
Код: Выделить всё
    Set CN = New ADODB.Connection
    CN.CursorLocation = adUseServer
    CN.ConnectionString = "Provider=SQLOLEDB..........."
    CN.Mode = adModeReadWrite
    CN.Open
   
    Set CMD = New ADODB.Command
    CMD.CommandText = "lsp_GetEXOdd"
    CMD.CommandType = adCmdStoredProc

    Set CMD.ActiveConnection = CN

    Set RS = New ADODB.Recordset
    RS.CursorLocation = adUseServer
    RS.CursorType = adOpenDynamic
    RS.LockType = adLockOptimistic

    Set RS = CMD.Execute
   
    GridEX1.HoldFields
    Set GridEX1.ADORecordset = RS

Подводные камни:
1.
Код: Выделить всё
Set RS = CMD.Execute
почему-то упрямо изменяет свойство LockType на adLockReadOnly, хотя я явно перед этим выставил другое значение (а мне нужно изменять RecordSet)

Может есть способ вызывать хранимые процедуры НЕ используя объект Command ?

Еще вопрос:
Объясните пожалйста ПО-РУССКИ: чем отличается adUseServer от adUseClient ? Что предпочтительней использовать ?
Просто Janus GridEX не хочет работать в режиме adUseServer (не знаю почему), и в тоже время слышал, что
наборы записей, возвращаемые ADODB.COMMAND, имеют CursorLocation = adUseServer? ВСЕГДА! И всвязи с этим полученные наборы нельзя использовать в качестве источника данных для bound-контроллов (в частном случае TrueDBGrid)
это что правда ? :(

вот такое невеселое положение дел...

ИТАК:
1. Почему Command измяняет LockType на adLockReadOnly (можно ли с этим бороться) ?
2. Можно ли вызывать хранимые процедуры без Command
3. adUseServer vs adUseClient

Заранее спасибо всем ответившим... :!:

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 20.01.2004 (Вт) 12:59

на твои вопросы есть ответы тут:
http://msdn.microsoft.com/library/defau ... topic5.asp

если кратко, то:
1) комбинация adOpenDynamic и adLockOptimistic не поддерживается
попробуй использовать adOpenKeyset и adLockOptimistic
2) насколько я понимаю, нет.
3) различие в том, где находится курсор - на клиенте или на сервере. Должна быть разница в скорости выполнения запроса и разница в данных для многопользовательского приложения. В моем понимании, если приложение многопользовательское и открыт курсор на сервере, то данные будут всегда последние. Но голову на отсечение не дам. :) Если клиентский, то чтобы получить новые данные надо насильно просить закачать новые данные. Но если требуется сортировка и фильтрация, то курсор ДОЛЖЕН быть клиентский (это требование провайдера).

Приведенная тобой цитата, надо сказать, странная. Когда я разрабатывала БД-приложение, то оспользовала клиентский курсор и, естественно, связанный контрол, TrueDBGrid, кстати. Обновляла данные всегда через параметризованные запросы. Наверное, не все было сделано правильно и наверняка производительность можно было бы увеличить, но это работало. Сортировала и фильтрвала данные. Откуда была цитата?

http://bbs.vbstreets.ru/viewtopic.php?t=5119
сюда еще глянь в самый конец - тебе будет интересно.

Шмульке
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 21.08.2003 (Чт) 8:17
Откуда: Владивосток

Сообщение Шмульке » 23.01.2004 (Пт) 5:31

на твои вопросы есть ответы тут:
http://msdn.microsoft.com/library/defau ... topic5.asp

Ссылка на миллион долларов ! Спасибо :o Все фурычит

К Уважаемым Модераторам: т.к. эта ссылка попала в "золотой фонд" думаю, что И ЭТУ тему можно successful закрыть


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList