powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error '450': Wrong number of arguments
16 сообщений из 16, страница 1 из 1
Run-time error '450': Wrong number of arguments
    #38791749
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Необходимо передать параметры из Excel в базу данных Oracle для запуска хранящейся в ней процедуры. Тип данных в БД - varchar2. Компилятор выдает ошибку: "Run-time error '450': Wrong number of arguments or invalid property assignment". Строка, на которой появляется ошибка, указана в образце ниже. В чем может быть проблема?


Код: 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.
50.
51.
Sub test()

Dim newconn As New ADODB.Connection
Dim ConnStr


ConnStr = "Driver={Oracle in instantclient};Dbq=172.17.1.60:1521/orcl; Uid=otk;Pwd=otk;"

newconn.Open ConnStr


If newconn.State = adStateOpen Then
  MsgBox "Connection Successful"
Else
   MsgBox "no connection"
End If

'rsRecords.Close
'Set rsRecords = Nothing

Dim cmd As ADODB.Command

Set cmd = New ADODB.Command

cmd.ActiveConnection = newconn
cmd.CommandText = “Procedure2”

cmd.CommandType = adCmdStoredProc

Set Parameters = cmd.CreateParameter("user_ceh", adVarWChar, adParamInput, 2)
Parameters("user_ceh").Value = 12 -- ОШИБКА В ЭТОЙ СТРОКЕ

Set Parameters = cmd.CreateParameter("user_dat", VarChar, adParamInput, 6)
Parameters("user_dat").Value = 182014

Set Parameters = cmd.CreateParameter(“user_pr”, adVarWChar, adParamInput, 2)
Parameters.Value = "2"

Dim rs2 As ADODB.Recordset

Set rs2 = cmd.Execute()

Debug.Print rs2.GetString

newconn.Close

Set newconn = Nothing

Set cmd = Nothing

End Sub


...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791795
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы объявили параметр как текстовый, а присваиваете ему число - наверное в этом дело.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791854
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProВы объявили параметр как текстовый, а присваиваете ему число - наверное в этом дело.

Я скорее всего не очень хорошо разбираюсь в типах данных в ADO, т.к. думал, что в символьный тип может входить и число. Подскажите, на что поменять типы данных, если в БД Oracle они хранятся в varchar2.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791869
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Parameters("user_ceh").Value = "12"
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791894
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Да, пробовал с кавычками. Ровно та же ошибка.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791912
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, стоп, не в этом же ошибка, непонятно, что вы вообще хотите сделать:
Код: vbnet
1.
Set Parameters = cmd.CreateParameter("user_ceh", adVarWChar, adParamInput, 2)

создает ОДИН параметр

Код: vbnet
1.
Parameters("user_ceh").Value = 12

тут вы обращаетесь к ОДНОМУ параметру как к коллекции параметров
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791921
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProА, стоп, не в этом же ошибка, непонятно, что вы вообще хотите сделать:
Код: vbnet
1.
Set Parameters = cmd.CreateParameter("user_ceh", adVarWChar, adParamInput, 2)

создает ОДИН параметр

Код: vbnet
1.
Parameters("user_ceh").Value = 12

тут вы обращаетесь к ОДНОМУ параметру как к коллекции параметров

Я пытаюсь передать в параметр user_ceh значение "12" (по-хорошему нужно будет запрашивать нужное значение у пользователя, но пока делаю как проще). Объясните правильный синтаксис, ибо везде, где читал, написано ровно вот так вот, а собственного опыта в VBA к сожалению нет.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791931
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kaimenибо везде, где читал, написано ровно вот так вотБыть такого не может. Процитируйте то, что написано, я укажу, где неправильно поняли или где ошиблись в копипасте.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791939
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также рекомендую вот это - это поможет вам избавиться от подобных косяков (именно с помощью объявления переменной я понял, где у вас ошибка)
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791964
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Сначала пробовал делать так:
http://custom-designed-databases.com/wordpress/2011/how-to-write-vba-sub-routine-that-calls-a-sql-stored-procedure/

но тут тоже возникали ошибки, поэтому заменил на то как есть сейчас. Вот тут есть похожее:

http://stackoverflow.com/questions/11810843/how-can-one-set-parameter-values-of-an-insert-sql-query-through-vba-in-microsoft.

Но в целом, суть не в ссылках. Интересует просто правильный синтаксис передачи значения переменной из Excel через Vba в базу Oracle.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791974
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kaimenправильный синтаксис передачи значения переменной из Excel через Vba в базу OracleКак ни странно, это относится к синтаксису используемых вами провайдеров ADODB. Вне зависимости от используемого приложения-клиента. Хоть прямо из WSH пишите...
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38791995
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KaimenShocker.Pro,

Сначала пробовал делать так:
http://custom-designed-databases.com/wordpress/2011/how-to-write-vba-sub-routine-that-calls-a-sql-stored-procedure/

но тут тоже возникали ошибки, поэтому заменил на то как есть сейчас. Вот тут есть похожее:

http://stackoverflow.com/questions/11810843/how-can-one-set-parameter-values-of-an-insert-sql-query-through-vba-in-microsoft.

Но в целом, суть не в ссылках. Интересует просто правильный синтаксис передачи значения переменной из Excel через Vba в базу Oracle.вторая ссылка вообще не о том - там про DAO, а не про ADODB

а по первой ссылке совершенно четкий пример
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
cmd.Parameters.Append cmd.CreateParameter(“@CustomerID”, adWChar, adParamInput, 5)
 cmd.Parameters(“@CustomerID”).Value = CustID

cmd.Parameters.Append cmd.CreateParameter(“@CompanyName”, adWChar, adParamInput, 40)
 cmd.Parameters(“@CompanyName”).Value = CompanyName

cmd.Parameters.Append cmd.CreateParameter(“@ContactName”, adWChar, adParamInput, 30)
 cmd.Parameters(“@ContactName”).Value = ContactName

что у вас не получилось?
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38792086
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Сейчас к сожалению уже не на работе, не могу перепроверить. Обязательно отпишусь завтра утром.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38792513
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Все заработало, большое спасибо. Ошибка, не поверите, была в том, что с приведенных по ссылкам примеров код скопировался в том виде, в котором там написан - с кавычками нестандартной формы. Исправил, сразу заработало.
В связи с этим еще один вопрос. Подскажите, есть ли простейший способ организации через VBA диалога с пользователем (в моем случае Excel), т.к. значения приведенных в коде переменных мне нужно запрашивать. Наверняка есть стандартный шаблон. Просто хотелось бы сэкономить время, а не тратить целый день на отлов чужих, а потом своих ошибок.
Заранее спасибо.
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38792527
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InputBox
...
Рейтинг: 0 / 0
Run-time error '450': Wrong number of arguments
    #38792547
Kaimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Ок, спасибо, почитаю.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error '450': Wrong number of arguments
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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