powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA. ADO. Запрос с параметрами к MS SQL.
14 сообщений из 14, страница 1 из 1
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260155
VBA_Kiddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите с решением проблемы.

Хочу разобраться как написать параметризованный запрос к MS SQL 2008 из VBA(Excel).
Добавляется строка в таблицу [my_table]
Процедура выдаёт ошибку на строке "oCmd.Execute": "Необходимо объявить скалярную переменную @TT_Param"

Как сделать правильно?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub SQL_temp()
Dim Conn As ADODB.Connection
Dim strConn As String 
Dim oCmd As ADODB.Command
Dim oPara As ADODB.Parameter

Set Conn = New ADODB.Connection
Conn.ConnectionString = _
"Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=My_Database;Data Source=(local);"
Conn.Open

Set oCmd = CreateObject("adodb.command")
oCmd.ActiveConnection = Conn.ConnectionString
oCmd.CommandText = "insert into my_table (TT) values(@TT_Param)"
Set oPara = oCmd.CreateParameter("@TT_param", adInteger, adParamInput)
oCmd.Parameters.Append oPara
oCmd.Parameters( 0 ) = "123"

oCmd.Execute

Conn.Close
Set Conn = Nothing
End Sub
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260215
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Set oCmd = CreateObject("adodb.command")
oCmd.ActiveConnection = Conn.ConnectionString
oCmd.CommandText = "declare @TT_Param varchar(3) set @TT_Param='123' insert into my_table (TT) values(@TT_Param)"
'Set oPara = oCmd.CreateParameter("@TT_param", adInteger, adParamInput)
'oCmd.Parameters.Append oPara
'oCmd.Parameters(0) = "123"

oCmd.Execute
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260220
VBA_Kiddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest33,
Понятно, что можно так сделать, но я хотел подставлять параметры непосредственно из программы VBA.
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260248
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно, не получится. Надо использовать ХП
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260249
VBA_Kiddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выяснил, что можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
oCmd.CommandText = "insert into tt (TT,P) values(?,?)"
Set oPara1 = oCmd.CreateParameter("@TT_param", adInteger, adParamInput)
Set oPara2 = oCmd.CreateParameter("@TT_param2", adInteger, adParamInput)
oCmd.Parameters.Append oPara1
oCmd.Parameters.Append oPara2
oCmd.Parameters( 0 ) = "123"
oCmd.Parameters( 1 ) = "222"
oCmd.Execute

Тогда возникает вопрос: можно ли вписать названия параметров в тексте SQL запроса?
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260405
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA_Kiddy...
Тогда возникает вопрос: можно ли вписать названия параметров в тексте SQL запроса?

Что мешает Вам программно создать SQL текст и только потом присвоить в "CommandText"?
А для параметров либо будете спрашивать у пользователя через Inputbox (правда не очень красивое решение), либо создаёте специальную "UserForm", где должен будет пользователь ввести в нужные поля нужные параметры, либо в отдельном листе в отдельных ячейках пользователь должен будет ввести значения параметров заранее до запуска макроса.
Если пофантазировать вариантов куча, это ещё не предел. Можно придумывать и придумывать.
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260628
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как получилось:
Код: plaintext
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.
Sub SQL_temp()
Dim Conn As ADODB.Connection
Dim strConn As String
Dim oCmd As ADODB.Command
Dim oPara As ADODB.Parameter

Set Conn = New ADODB.Connection
Conn.ConnectionString = _
GetConnectOLEDB
Conn.Open

Set oCmd = CreateObject("adodb.command")
oCmd.ActiveConnection = Conn.ConnectionString
oCmd.CommandText = "execute sp_executesql " & _
          "N'insert into edin_izm (signific) values (@Term)', " & _
          "N'@Term varchar(10)', " & _
          "@Term = ?"

Set oPara = oCmd.CreateParameter("@Term", adVarChar, adParamInput,  10 )
oCmd.Parameters.Append oPara
oCmd.Parameters( 0 ) = "###"

oCmd.Execute

Conn.Close
Set Conn = Nothing
MsgBox "OK!"
End Sub
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37260722
basicv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenЧто мешает Вам программно создать SQL текст и только потом присвоить в "CommandText"?

Если имел в виду динамически создавать SQL запрос посредством обединения строк, то это плохая практика.
Параметризованные запросы выигрывают:
1. Повторные запросы будут выполнятся быстрее.
2. Повышается безопасность - так как затрудняется SQL Injection.
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37267112
VBA_Kiddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за обсуждение!
Вопрос был о правильном синтаксисе :)

Для моей задачи было удобнее сформировать строку запроса один раз, а потом подставлять параметры.
К тому же, через параметры, как мне кажется, проще работать с датами и числами - не приходится их преобразовывать в строку в коде и думать о форматах. Ну и, конечно же, аргументы, приведённые basicv имеют место быть.
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37267258
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA_Kiddy,

А как Вы будете передавать значение "Null" для определённого параметра? Или у Вас параметры никогда не могут быть с нулевым значением?
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37267334
VBA_Kiddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

А в чём может быть проблема? У меня параметры подставляются как значения ячеек Excel. Пустые ячейки автоматически заносятся в MS SQL как NULL.
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37267401
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
Sub sp_ExecuteSQL()
Dim Conn As ADODB.Connection
Dim strConn As String
Dim oCmd As ADODB.Command
Dim oPara As ADODB.Parameter

Set Conn = New ADODB.Connection
Conn.ConnectionString = _
GetConnectOLEDB
Conn.Open

Set oCmd = CreateObject("adodb.command")
oCmd.ActiveConnection = Conn.ConnectionString
oCmd.CommandText = "execute sp_executesql " & _
          "N'insert into _kontrct (signific, name_kontr, organiz_kt) " & _
          "values (@Sig, @Ktr,@org)', " & _
          "N'@Sig varchar(10),@Ktr varchar(40),@Org varchar(50)', " & _
          "@Sig = ?,@Ktr=?,@Org=?"

Set oPara = oCmd.CreateParameter("@Sig", adVarChar, adParamInput,  10 )
oCmd.Parameters.Append oPara

Set oPara = oCmd.CreateParameter("@Ktr", adVarChar, adParamInput,  40 )
oCmd.Parameters.Append oPara

Set oPara = oCmd.CreateParameter("@Org", adVarChar, adParamInput,  50 )
oCmd.Parameters.Append oPara

oCmd.Parameters( 0 ) = "##5"
oCmd.Parameters( 1 ) = "klop"
oCmd.Parameters( 2 ) = Null
oCmd.Execute

oCmd.Parameters( 0 ) = "##6"
oCmd.Parameters( 1 ) = Null
oCmd.Parameters( 2 ) = "klop"
oCmd.Execute

Conn.Close
Set Conn = Nothing
MsgBox "OK!"
End Sub
...
Рейтинг: 0 / 0
VBA. ADO. Запрос с параметрами к MS SQL.
    #37267549
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно может со стороны сервера, через объектную модель экселя может проще/удобнее будет ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VBA. ADO. Запрос с параметрами к MS SQL.
    #39530846
JohnBMW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest33, Большое спасибо! Всё заработало ...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA. ADO. Запрос с параметрами к MS SQL.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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