powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / В чем ошибка?
16 сообщений из 16, страница 1 из 1
В чем ошибка?
    #32066982
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите пожалуйста найти ошибку.
У хранимой процедуры 1 входной параметр и 2 выходных.
Она вызывается на ASP странице.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 dim a, b
set RSproc = Server.Createobject( "ADODB.Command" )
RSproc.ActiveConnection = OBJdbConnection
RSproc.CommandType = adCmdStoredProc
RSproc.CommandText =  "gruListplant @LIST = '" & per & " ' " 
 --per - переменнаяранее определенная
 
RSproc.Parameters.Refresh
RSproc.Execute
a = cmd.Parameters( "@S1" )
b = cmd.Parameters( "@S2" )

Мне выводится
ADODB.Command ошибка '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
и указатель на строку №4 ,т.е. где RSproc.CommandType = adCmdStoredProc
Почему?
...
Рейтинг: 0 / 0
В чем ошибка?
    #32066996
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так правильно

Код: plaintext
1.
2.
3.
4.
5.
RSproc.CommandText =  "gruListplant" 
cmd.Parameters.Refresh
cmd.Parameters( "@LIST" )=per
cmd.Parameters( "@S1" ).Direction=adParamOutput
cmd.Parameters( "@S2" ).Direction=adParamOutput
rsproc.execute


Основная ошибка - незнание документации. Sorry
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067012
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Это действительно - основная ошибка.
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067246
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, ужасно неудобно, но ... все равно не получается.
Подскажите еще разок ... ну пожаааалуйста. Девушкам ведь надо помогать в освоении этой сложной науки :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set RSproc = Server.Createobject( "ADODB.Command" )
RSproc.ActiveConnection = OBJdbConnection
RSproc.CommandType = adCmdStoredProc
RSproc.CommandText =  "gruListplant" 
cmd.Parameters.Refresh
cmd.Parameters( "@LIST" )=per
cmd.Parameters( "@s1" ).Direction = adParamOutput
cmd.Parameters( "@s2" ).Direction = adParamOutput
rsProc.Execute

И опять та же ошибка, на строку RSproc.CommandType = adCmdStoredProc

ADODB.Command ошибка '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

Эх,...
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067260
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
set RSproc = Server.Createobject( "ADODB.Command" )
Set RSproc.ActiveConnection = OBJdbConnection
RSproc.CommandText =  "gruListplant" 
RSproc.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters( "@LIST" )=per
cmd.Parameters( "@s1" ).Direction = adParamOutput
cmd.Parameters( "@s2" ).Direction = adParamOutput
rsProc.Execute


Обратите внимание, оператор присваивания во второй строке начинается с ключевого слова Set.

Ну и я обычно сначала присваиваю имя команде, а затем тип. Если команда только что создана такой порядок позволяет обойтись без Parameters.Refresh
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067264
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, появляется все та же ошибка....
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067278
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совсем забыл, что в VBS не определены константы ADO.
Решение проблемы описано ниже в разделе Workaround. Надеюсь, вы читаете по-английски

PRB: 800a0bb9 Error: "Application Is Using Arguments that Are of the Wrong Type"
ID: Q254517


--------------------------------------------------------------------------------
The information in this article applies to:

ActiveX Data Objects (ADO), versions 1.5, 2.0, 2.01, 2.1, 2.1 SP1, 2.1 SP2, 2.5, 2.6

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


SYMPTOMS
When you view an Active Server Pages (ASP) page that makes parameterized calls to ASP objects, the following error message appears:

error '800a0bb9'

The application is using arguments that are of the wrong type, or are out of acceptable range, or are in conflict with one another.

/ProjectName/Page.asp, line X
This is often an ADODB.Recordset error.



CAUSE
This problem is often caused by the code using ADO constants that have not been defined for the page. For example:


<%
set cn=server.CreateObject("ADODB.Connection")
CN.Open "DSN=Gallery"
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From Customers", CN, adOpenStatic, adLockOptimistic
%>
ASP does not inherently know the values of ADO constants, and therefore the two constants (in this case adOpenStatic and adLockOptimistic) are empty.



WORKAROUND
There are several difference ways that you can work around this problem:

Use the actual constant values:



<%
set cn=server.CreateObject("ADODB.Connection")
CN.Open "DSN=Gallery"
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From Customers", CN, 3, 3
%>
Set the constants:



<%
Const adOpenStatic = 3
Const adLockOptimistic = 3
set cn=server.CreateObject("ADODB.Connection")
CN.Open "DSN=Gallery"
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From Customers", CN, adOpenStatic, adLockOptimistic
%>
Include the Adovbs.inc file with all the constants. You can copy the Adovbs.inc file to your Web projects directory on the Web server from [drive]:\Program files\Common files\System\ADO.



<!--#include file="adovbs.inc"-->
<%
set cn=server.CreateObject("ADODB.Connection")
CN.Open "DSN=Gallery"
set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From Customers", CN, adOpenStatic, adLockOptimistic
%>
If the page is part of a project that was written in Microsoft Visual InterDev, you can set a reference to the ADO type libraries in the project by following these steps:


Open the project in Visual InterDev.


From the Project menu in Visual InterDev, choose Project References.


In the References dialog box, select Microsoft ActiveX Data Objects Library and click OK.





STATUS
This is by design.
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067279
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, это делается намного проще и совсем по-другому.
Вот пример от Микрософт.
Посмотрите и переделайте, если возникнут трудности - постараемся помочь. За работоспособность данного способа ручаюсь, у меня все работает как надо.
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067285
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NNN:

ИМХО Единственное существенное отличие, которое есть в приведенном примере, так это то, что в нем программист сам заполняет коллекцию Parameters в команде ADO. В чем упрощение?

А вообще примерами пользоваться конечно надо.
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067317
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Chicago

> В чем упрощение?

вы уже сами ответили на этот вопрос:

> программист сам заполняет коллекцию Parameters в команде ADO.

Следовательно, больше контроля на кодом. Таким образом возможно отследить тип каждого отдельного параметра (бывает так, что заявленные типы параметров в vb и sql server не совсем совпадают, кажись мы натыкались на такое ). Кроме того, в примере объявлен тип передаваемой команды (adCmdStoredProc), что позволяет не указывать в текст команды параметры (со временем ведь что-то может измениться).
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067352
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NNN:

А кто предлагает писать параметры в тексте команды? Если вы внимательно посмотрите на примеры, то я всегда предлагал писать так

Код: plaintext
1.
2.
RSproc.CommandText =  "gruListplant" 
RSproc.CommandType = adCmdStoredProc
cmd.Parameters( "@LIST" )=per


В предлагаемом коде параметры действительно вытягиваются с сервера автоматически. Но на контроль над кодом это не влияет никак. Все необходимые значения свойств можно изменить сразу после автоматического заполнения коллекции Parameters. Что опять-таки видно из моих примеров

Код: plaintext
1.
cmd.Parameters( "@s1" ).Direction = adParamOutput
cmd.Parameters( "@s2" ).Direction = adParamOutput


Таким образом, объем кодирования сокращается. Ведь выставляются только необходимые значения свойств параметров. Все возможности сохраняются. Так что же проще? :-)
...
Рейтинг: 0 / 0
В чем ошибка?
    #32067401
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Inebs

Что-то код мне Ваш не нравится

откуда там cmd взялось?

Я бы так написала (правда, JavaScript, но переделать не проблема)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var connect;
 connect = Server.CreateObject( "ADODB.Connection" );
.......

var cmd = Server.CreateObject( "ADODB.Command" );
  cmd.CommandText =  "gruListplant" ;
  cmd.CommandType = adCmdStoredProc;
  cmd.ActiveConnection = connect;

 var LIST=cmd.CreateParameter(
      "LIST" , ad..., adParamInput, ..., per);
var a = cmd.CreateParameter(
       "S1" , ad...., adParamOutput, ...,  0 );
      
  var b = cmd.CreateParameter(
       "S2" , ad..., adParamOutput, ...,  0 );
cmd.Parameters.Append(LIST);
  cmd.Parameters.Append(S1);
  cmd.Parameters.Append(S2);
 cmd.Execute();
  connect.Close();


ad... - это ADO-константы типов данных
... - это размер

Этот код меня не подводил, однако Ваша ошибка м.б. и от того, что действительно неправильные типы данных,
например, из HTML формы можно получать только текстовые поля, соответственно NULL форма дать не может, только "". И.т.д.
Всего доброго!
...
Рейтинг: 0 / 0
В чем ошибка?
    #32068228
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы сказали, что можно в случае чего обратиться....
Я попробовала все переделать по советам, получилось вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 Это процедура:
CREATE PROCEDURE gruListplant 	@LIST  VARCHAR( 70 ),  @S1 VARCHAR ( 2000 ) output,@S2 VARCHAR( 100 ) output
AS BEGIN ... END
Это я её вызываю на asp
    Set  cmdProc= Server.CreateObject( "ADODB.Command" )
    cmdProc.CommandText =  "gruListplant" 
    cmdProc.CommandType = adCmdStoredProc
   
    Set prmIn = cmdProc.CreateParameter( "@LIST" , adVarChar,adParamInput)
    cmdProc.Parameters.Append prmIn
    prmIn.Value = per
    Set prmOut1 = cmdProc.CreateParameter( "@S1" ,  adVarChar , adParamOutput )
    cmdProc.Parameters.Append prmOut1
    prmOut1.Value = ''
    Set prmOut2 = cmdProc.CreateParameter( "@S2" ,  adVarChar , adParamOutput )
    cmdProc.Parameters.Append prmOut2
    prmOut2.Value = ''
    
    Set cmdProc.ActiveConnection = OBJdbConnection
    Set rstProc = cmdProc.Execute

Ошибка та же.

ADODB.Command ошибка '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
...
Рейтинг: 0 / 0
В чем ошибка?
    #32068241
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста, прочитайте мое предыдущее сообщение. Мне кажется, оно и содержит ответ на ваш вопрос (там приведена соответствующая статья из Microsoft Knowledge Base).

По умолчанию VBScript ничего не знает о константах ADO. Поэтому, когда в коде встречается
Код: plaintext
cmdProc.CommandType = adCmdStoredProc
Транслятор воспринимает adCmdStoredProc как переменную (вспомните, предварительного объявления переменной в языке не требуется) и присваивает ей значение по умолчанию, то есть Null. Именно это значение получает свойство CommandType и именно out of acceptable range.

Решение проблемы см. в моем предыдущем сообщении раздел Workaround
...
Рейтинг: 0 / 0
В чем ошибка?
    #32068258
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<#include file="adovbs.inc">
Но это может сказаться на производительности, если в каждом скрипте добавлять интерпретатору обработку достаточно большого файла. Можно выучить константы и просто писать RSproc.CommandType=4
...
Рейтинг: 0 / 0
В чем ошибка?
    #32068326
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Урра! До меня наконец-то дошло что от меня требуется. Всем большое спасибо. Теперь я хоть поняла, в чем дело и куда смотреть,чтобы исправить.
И наверное из-за этого, когда я писала всякие курсоры по названию они не работали,да? Ох, теперь пойду разбираться .... надеюсь, получится.
Спасибо!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / В чем ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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