powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Параметры ADODB Command (MS SQL Server)
17 сообщений из 17, страница 1 из 1
Параметры ADODB Command (MS SQL Server)
    #36408052
fdds
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу передать параметры в объект 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
Параметры ADODB Command (MS SQL Server)
    #36408062
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то не пойму зачем тут вам Command?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И, раз у вас MSSQL, кто мешает использовать процедуры с именованными параметрами?
...
Рейтинг: 0 / 0
Параметры ADODB Command (MS SQL Server)
    #36409848
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если строку прописать как
Код: 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
Параметры ADODB Command (MS SQL Server)
    #36410674
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Период между сообщениями больше года.
Параметры ADODB Command (MS SQL Server)
    #39323722
bormental
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже столкнулся с потребностью отдавать параметры в строку запроса в 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
Параметры ADODB Command (MS SQL Server)
    #39323784
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormental, а в какой строке ошибка.
Так код, на первый взгляд, рабочий
...
Рейтинг: 0 / 0
Параметры ADODB Command (MS SQL Server)
    #39323790
bormental
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тута

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
Параметры ADODB Command (MS SQL Server)
    #39324173
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bormental, мне кажется, Вы просто где-то ошиблись в настройке объектов
1. используете NamedParameters = true и вместо параметра "знак вопроса". Хоть и писали, что ставили вместо оного "@id"

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


будет ошибка или нет
...
Рейтинг: 0 / 0
Параметры ADODB Command (MS SQL Server)
    #39324202
bormental
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
будет.
Будет ошибка описанная мной в первом стартовом посте 3001
...
Рейтинг: 0 / 0
Параметры ADODB Command (MS SQL Server)
    #39324207
bormental
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалось запустить только там пока (без коллекции параметров через 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
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Параметры ADODB Command (MS SQL Server)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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