vb6: что не так с этим вызовом процедуры tsql? - PullRequest
0 голосов
/ 18 октября 2010

У меня следующий вызов процедуры в vb6:

dim rs as adodb.command 
dim cnn as adodb.connection 

with rs
    set .activeconnection = cnn 
    .CommandType = adCmdStoredProc 
    .CommandText = "sp_qryUpdate" 
    .CommandTimeout = 0 
    .Parameters("@uidbatch").value = lngBatchID 
    .Execute , , adExecuteNoRecords 
end with 

Я получаю сообщение об ошибке «Переменная объекта или переменная блока не установлена»

ошибка выдается после установки .activeconnection

есть идеи, что это значит? полученная строка подключения верна.

Ответы [ 4 ]

1 голос
/ 18 октября 2010

Странно, rs обычно используется для обозначения набора записей, а не команды, но, вероятно, для каждой из них.

Я вижу некоторые потенциальные проблемы. Я не совсем уверен в разнице, поскольку мое знакомство с VB6 было приятно кратким, но весь код, который я делал, был:

dim rs as new adodb.recordset

(т.е. с ключевым словом new). Это может быть причиной проблемы.

Я также предполагаю, что у вас есть какой-то код между вторым dim и with, да?

Потому что в противном случае вы на самом деле не открываете соединение для использования.

Здесь есть некоторый учебный код здесь , который может помочь. Я бы сказал "Наслаждайся!" но я не думаю, что это вариант: -)

0 голосов
/ 30 октября 2010

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

Кроме того, несмотря на то, что правильно создавать экземпляры переменных объекта, делать это в одной строке не рекомендуется.В отличие от .Net, это фактически не создает экземпляр переменной.Скорее, при каждой ссылке на переменную среда выполнения проверяет, существует ли экземпляр, и создает его, если нет.Это создает ненужные накладные расходы.Рекомендуется использовать ключевое слово Set в новой строке.

0 голосов
/ 18 октября 2010

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

.Parameters("@uidbatch").value

Предполагается, что он уже существует.

0 голосов
/ 18 октября 2010

Вы должны создать экземпляр adodb.command и adodb.connection перед его использованием.

Попробуйте это

dim rs as New adodb.command 
dim cnn as New adodb.connection 
...