Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Параметры ADODB Command (MS SQL Server) / 17 сообщений из 17, страница 1 из 1
13.01.2010, 16:54
    #36408052
fdds
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
Не могу передать параметры в объект Command. Вот фрагмент кода.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Set cmd.ActiveConnection = cnn
cmd.CommandType = adCmdText
cmd.Prepared = True
cmd.NamedParameters = True
cmd.CommandText = "SELECT * FROM Ll_SpProvider WHERE IdProvider=@id"
cmd.Parameters.Append cmd.CreateParameter("@id", adSmallInt, adParamInput, , ParamValue)
Set rst = cmd.Execute
На последней строке вылетает ошибка
Must declare the scalar variable "@id"

Что я неправильно делаю и как надо делать?
...
Рейтинг: 0 / 0
13.01.2010, 16:58
    #36408062
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
что-то не пойму зачем тут вам Command?

Код: plaintext
1.
2.
set rst = new adodb.recordset
SQL= "SELECT * FROM Ll_SpProvider WHERE IdProvider=" & ID
rst.open SQL, cnn
...
Рейтинг: 0 / 0
13.01.2010, 17:11
    #36408098
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
fddsMust declare the scalar variable "@id"

Что я неправильно делаю и как надо делать?

Вы просто не врубились, что такое "параметр" и для чего нужен объект Command

Параметры используются при вызове процедур, объект Command обеспечивает поддержку коллекции параметров.
А при вызове обычного SQL-запроса ни то ни другое вам не нужно, см. пример выше.
...
Рейтинг: 0 / 0
13.01.2010, 19:16
    #36408366
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
Shocker.ProВы просто не врубились, что такое "параметр" и для чего нужен объект Command

Параметры используются при вызове процедур, объект Command обеспечивает поддержку коллекции параметров.
А при вызове обычного SQL-запроса ни то ни другое вам не нужно, см. пример выше.Тут ты одновременно и прав и не прав :)

Параметры нужны только при использовании повторяющихся запросов. В этом случае можно подготовить запрос, создать для него набор параметров а потом изменяя параметры запускать. По идее это будет работать быстрее чем запуск отдельных похожих запросов на каждый из которых сервер базы данных должен будет запускать парсер sql команды ( подготавливать то есть).

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

А ошибка fdds скорее всего в том, что именованые параметры, как они понимаются его драйвером, начинаются с двоеточия а не с собаки.
...
Рейтинг: 0 / 0
13.01.2010, 19:57
    #36408417
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
Ну да, в общем-то, просто я не пользуюсь этой возможностью. :)

А из поста автора неясно, куда он вообще коннектится, стало быть сложно дать рекомендации.
...
Рейтинг: 0 / 0
14.01.2010, 09:29
    #36408865
fdds
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
Если собаку заменить на двоеточие вообше вылетает ошибка
Incorrect syntax near ':'

База у мена Microsoft SQL Server Express 2005. Понимание синтаксиса параметров по-моему не от драйвера (провайдера) зависит, а от СУБД. Или здесь я не прав?

А моя софтина требует именно использование именованных параметров, поэтому динамически формировать строку SQL-запроса не получится. Можно конечно подменивать параметры в строке запроса с пом. регулярных выражений или операций со строками, но это очень крайний случай.
...
Рейтинг: 0 / 0
14.01.2010, 10:29
    #36409007
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
> Автор: fdds

ADO.Command какой версии? По моему, у последних версий было свойство использовать именованые параметры или нет.
Точно
Object BrowserProperty NamedParameters As Boolean
Member of ADODB.Command

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.01.2010, 10:38
    #36409043
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
> Автор: Игорь Горбонос

Сори не увидел в коде этот вызов

Тогда подойдем с другой стороны
У меня параметры при создании указываются без @, но для ХП и для FireBird.
Код: plaintext
cmd.Parameters.Append cmd.CreateParameter("id", adSmallInt, adParamInput, , ParamValue)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.01.2010, 10:43
    #36409065
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
fddsА моя софтина требует именно использование именованных параметров, поэтому динамически формировать строку SQL-запроса не получится.

Почему? Не могу придумать ситуации.

И, раз у вас MSSQL, кто мешает использовать процедуры с именованными параметрами?
...
Рейтинг: 0 / 0
14.01.2010, 14:15
    #36409848
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
а если строку прописать как
Код: plaintext
cmd.CommandText = "SELECT * FROM Ll_SpProvider WHERE IdProvider=?"

в ином случае, придется сначала объявить переменную
Код: plaintext
cmd.CommandText = "delcare @id int; SELECT * FROM Ll_SpProvider WHERE IdProvider=@id"

Скуль требует точного определения переменных

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
14.01.2010, 18:01
    #36410674
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
fddsЕсли собаку заменить на двоеточие вообше вылетает ошибка
Incorrect syntax near ':'Ну значит действительно собака нужна... или вопросительный знак если можно использовать неименованые параметры.

fddsБаза у мена Microsoft SQL Server Express 2005. Понимание синтаксиса параметров по-моему не от драйвера (провайдера) зависит, а от СУБД. Или здесь я не прав?Не прав. Параметры это как раз дело драйвера (ODBC или OLEDB) который используется внутри твоего ADODB.Connection.
Там на самом деле размазаная логика, часть компиляции запроса выполняется сервером, часть драйвером. В частности имена параметров вытаскиваются из строки запроса драйвером, потом сервер сообщает какого типа должны быть эти параметры, а потом уже драйвер занимается жесткой типизацией параметров.

fddsА моя софтина требует именно использование именованных параметров, поэтому динамически формировать строку SQL-запроса не получится. Можно конечно подменивать параметры в строке запроса с пом. регулярных выражений или операций со строками, но это очень крайний случай.Попробуй не трогать Parameters.Append, сделай:
Код: plaintext
1.
2.
3.
cmd.CommandText = "SELECT * FROM Ll_SpProvider WHERE IdProvider=@id"
cmd.Parameters.Refresh()
cmd.Parameters( 1 ) = ParamValue
Set rst = cmd.Execute
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.10.2016, 12:59
    #39323722
bormental
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
Тоже столкнулся с потребностью отдавать параметры в строку запроса в Vbsript.
Но не срастается :
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
On error resume next

WScript.Timeout = 45000

Dim R3 
Dim func 
Dim cmd 
Dim conStr,galconStr,WriteReceivedData
Dim opera
Dim usernrec

WScript.Echo "Начинаем синхронизацию"

'параметры
Set objArgs = WScript.Arguments
ingr_PATH	= objArgs(2)
ingr_galUSR	= objArgs(0)
ingr_galPAS	= objArgs(1)

usernrec=100
conStr ="Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=DENIS\MYSERV;Initial Catalog=data3;User Id=" & ingr_galUSR	& ";Password=" &ingr_galPAS& ";Current Language=English"

Set cmd = CreateObject("ADODB.Command")
set cn  = CreateObject("ADODB.Connection")
if Err.Number <> 0 then 
    WScript.echo "ошибка1"
end if 

cn.ConnectionString = conStr
cn.ConnectionTimeOut = 0
cn.CommandTimeout = 0

cn.Open
if Err.Number <> 0 then 
    WScript.echo "ошибка2" & cStr(Err.Number)
end if 

cmd.Activeconnection=cn
cmd.CommandText="select distinct XBLNR from dbo.ingr_sklfo_import where isnull(opera,'') <>'' and XBLNR<>'' and blart='D1' and strec=?"
cmd.commandType=1
cmd.NamedParameters=True

cmd.parameters.Append cmd.CreateParameter("@id",adInteger,adParamInput,4,usernrec)

if Err.Number <> 0 then 
	WScript.echo "ошибка param: " & cStr(Err.Number) 
end if
..
..



вместо ? пробовал @id - все одно...получаем 'ошибка param 3001'

Нашел описание ошибки 3001 :

adErrInvalidArgument

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. This error is often caused by a typographical error in an SQL SELECT statement. For example, a misspelled field name or table name can generate this error. This error can also occur when a field or table named in a SELECT statement does not exist in the data store.

Может подскажет кто что не так то ? Спасибо.
...
Рейтинг: 0 / 0
10.10.2016, 14:08
    #39323784
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
bormental, а в какой строке ошибка.
Так код, на первый взгляд, рабочий
...
Рейтинг: 0 / 0
10.10.2016, 14:13
    #39323790
bormental
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
тута

if Err.Number <> 0 then
WScript.echo "ошибка param: " & cStr(Err.Number)
end if

я нашел пока сношался со своей проблемкой

https://www.experts-exchange.com/questions/26606760/ADO-Command-object-using-Named-Parameters.html#answer34923468



авторI will upload the connection string tomorrow. This thread also shows good evidence to support theory that ADO does not support Named Parameters. Please do not delete it as other developers will have to go through the same trouble.


Что то готов согласиться уже с этим мнением )
...
Рейтинг: 0 / 0
11.10.2016, 07:54
    #39324173
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
bormental, мне кажется, Вы просто где-то ошиблись в настройке объектов
1. используете NamedParameters = true и вместо параметра "знак вопроса". Хоть и писали, что ставили вместо оного "@id"

для начала сделайте просто
уберите NamedParameters = true и выполните простой запрос
Код: sql
1.
select ? as d


будет ошибка или нет
...
Рейтинг: 0 / 0
11.10.2016, 09:25
    #39324202
bormental
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
будет.
Будет ошибка описанная мной в первом стартовом посте 3001
...
Рейтинг: 0 / 0
11.10.2016, 09:33
    #39324207
bormental
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры ADODB Command (MS SQL Server)
Удалось запустить только там пока (без коллекции параметров через cmd.execute(..))


Код: vbnet
1.
2.
3.
4.
5.
cmd.Activeconnection=cn
cmd.CommandText="select distinct XBLNR from dbo.ingr_sklfo_import where isnull(opera,'') <>'' and XBLNR<>'' and blart='D1' and strec=?"
cmd.commandType=1

set rs=cmd.execute(rows_affected, Array(usernrec))
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Параметры ADODB Command (MS SQL Server) / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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