Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error '450': Wrong number of arguments / 16 сообщений из 16, страница 1 из 1
30.10.2014, 14:42
    #38791749
Kaimen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Добрый день. Необходимо передать параметры из 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
30.10.2014, 15:06
    #38791795
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Вы объявили параметр как текстовый, а присваиваете ему число - наверное в этом дело.
...
Рейтинг: 0 / 0
30.10.2014, 15:43
    #38791854
Kaimen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Shocker.ProВы объявили параметр как текстовый, а присваиваете ему число - наверное в этом дело.

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

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

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

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

тут вы обращаетесь к ОДНОМУ параметру как к коллекции параметров
...
Рейтинг: 0 / 0
30.10.2014, 16:27
    #38791921
Kaimen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
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
30.10.2014, 16:34
    #38791931
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Kaimenибо везде, где читал, написано ровно вот так вотБыть такого не может. Процитируйте то, что написано, я укажу, где неправильно поняли или где ошиблись в копипасте.
...
Рейтинг: 0 / 0
30.10.2014, 16:39
    #38791939
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Также рекомендую вот это - это поможет вам избавиться от подобных косяков (именно с помощью объявления переменной я понял, где у вас ошибка)
...
Рейтинг: 0 / 0
30.10.2014, 16:56
    #38791964
Kaimen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
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
30.10.2014, 17:00
    #38791974
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Kaimenправильный синтаксис передачи значения переменной из Excel через Vba в базу OracleКак ни странно, это относится к синтаксису используемых вами провайдеров ADODB. Вне зависимости от используемого приложения-клиента. Хоть прямо из WSH пишите...
...
Рейтинг: 0 / 0
30.10.2014, 17:06
    #38791995
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
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
30.10.2014, 17:41
    #38792086
Kaimen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error '450': Wrong number of arguments
Shocker.Pro,

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

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


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