Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / параметр в ХП. ошибка 3708. / 12 сообщений из 12, страница 1 из 1
03.03.2004, 18:27
    #32430063
наутилус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
=( торможу наверное...
обьявление хп
Код: plaintext
ALTER PROCEDURE usp_AddRecord (@fldName varchar( 50 ), @fldValue varchar( 50 ), @tblName varchar( 50 ))


дальше пытаюсь выполнить процедуру в модуле формы. Определяю параметры

Код: plaintext
1.
        Set prmTbl = cmd.CreateParameter( "tblName" , adVarChar, adParamInput, ,  "dFirma" )
        .Parameters.Append prmTbl

При добавлении параметров выдаёт ошибку (на второй строчке)

Код: plaintext
run-time error  3708 . Parametr object is improperly defined. Inconsistent or incomplete information was provided. 


Я так понимаю неправильно обьявил параметр? как правильно??

с ув. наутилус
...
Рейтинг: 0 / 0
03.03.2004, 18:46
    #32430123
новый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
а полный код в модуле
можно посмотреть
...
Рейтинг: 0 / 0
03.03.2004, 18:47
    #32430126
наутилус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
Код: 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.
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Dim NewRec As Integer
Dim prmTbl As ADODB.Parameter
Dim prmFld As ADODB.Parameter
Dim prmValue As ADODB.Parameter
Set cmd = New ADODB.Command
    
    With cmd
        .ActiveConnection = CurrentProject.Connection
        .CommandText =  "usp_AddRecord" 
        .CommandType = adCmdStoredProc
        
        Set prm = .CreateParameter( "n" , adInteger, adParamReturnValue)
        .Parameters.Append prm
        
        Set prmTbl = .CreateParameter( "tblName" , adChar, adParamInput, ,  "dFirma" )
        .Parameters.Append prmTbl
        Set prmFld = .CreateParameter( "fldName" , adChar, adParamInput, ,  "NameFirma" )
        .Parameters.Append prmFld
        Set prmValue = .CreateParameter( "fldValue" , adVarChar, adParamInput, ,  "Ââåäèòå" )
        .Parameters.Append prmValue
        .Execute , , adExecuteNoRecords
        NewRec = .Parameters( "n" ) 'ïîëó÷àåì çíà÷åíèå âîçâðàùàåìîå ÕÐ
    End With
...
Рейтинг: 0 / 0
03.03.2004, 18:50
    #32430136
новый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
а почему стоит adChar
а в хп varchar
...
Рейтинг: 0 / 0
03.03.2004, 19:26
    #32430181
наутилус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
ошибочка, но это я уже пробовал. ставил и варчар - та же ошибка =(
при чём первый параметр - ретурнвалуе - без проблем проходит
...
Рейтинг: 0 / 0
04.03.2004, 02:50
    #32430361
параметр в ХП. ошибка 3708.
По крайней мере у меня в аналогичном (работающем!) коде точным указанием на тип параметра и его длиной (четвёртым аргументом метода CreateParameter) не пренебрегаем:

Код: plaintext
1.
2.
3.
4.
5.
6.
Alter Procedure dbo.пцПлатПоручОчерНомер

	(
		@Плательщик int,
		@ВидПП varchar( 3 ),
		@Номер int output
	)


Код: plaintext
cmd.Parameters.Append cmd.CreateParameter( "ВидПП" , adVarChar, adParamInput,  3 , ВидПП)
...
Рейтинг: 0 / 0
04.03.2004, 09:31
    #32430525
новый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
у меня все работает и без 4 параметра
...
Рейтинг: 0 / 0
04.03.2004, 10:08
    #32430615
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
2 наутилус
Во-первых, у тебя в объявлении параметров пройцедуры нет выходного параметра - нафига ты его в аксесе объявляешь?
Во-вторых, писать нужно так, короче и нагляднее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim cmd As New ADODB.Command
With cmd
        .ActiveConnection = CurrentProject.Connection
        .CommandText =  "usp_AddRecord" 
        .CommandType = adCmdStoredProc
        .Parameters.Append .CreateParameter( "@fldName" , adVarChar, adParamInput,  50 ,  "dFirma" )
        .Parameters.Append .CreateParameter( "@fldValue" , adVarChar, adParamInput,  50 ,  "NameFirma" )
        .Parameters.Append .CreateParameter( "@tblName" , adVarChar, adParamInput,  50 ,  "Aaaaeoa" )
        .Execute
    End With

Если нужно что-то вернуть, то заводим переменную, в которую возвращаем, если рекордсет вернёт ХП, то пишем присвоение переменной .execute, если выходной параметр, то переменную такого же типа заводим, при декларации параметров ХП поставляем на вход
Код: plaintext
1.
2.
3.
.Parameters.Append .CreateParameter( "@Result" , adVarChar, adParamReturnValue,  255 )
.execute
[переменная]= .Parameters( "@Result" ).Value
...
Рейтинг: 0 / 0
04.03.2004, 12:35
    #32430975
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
Hummer
Во-первых, у тебя в объявлении параметров пройцедуры нет выходного параметра - нафига ты его в аксесе объявляешь?
Ты не прав, тут у наутилус 'а все правильно. adParamReturnValue это код завершения процедуры, например

CREATE PROCEDURE dbo.nnn
DECLARE @i INT
SELECT @i = COUNT(*) FROM dbo.Table1
RETURN @i
...
Рейтинг: 0 / 0
04.03.2004, 12:44
    #32431012
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
2 Pavel
Был неправ.
Но adParamReturnValue прекрасно работает в случае, если у процедуры есть выходной параметр и RETURN @i я в конце ХП не даю.
В QA я просто пишу
DECLARE @Result varchar(8000)
EXEC dbo.mySP 1, @Result OUTPUT
PRINT @Result
и получаю в переменную выходной параметр ХП, через адодб комманд я получаю его в аксес посредством adParamReturnValue.
...
Рейтинг: 0 / 0
04.03.2004, 13:17
    #32431108
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
Но adParamReturnValue прекрасно работает в случае, если у процедуры есть выходной параметр и RETURN @i я в конце ХП не даю.
Я бы советовал больше так не делать. То что это работает, скорее случайность, и , возможно, в следующих версиях MDAC работать перестанет. Для организации приема параметров процедуры, описанных как OUTPUT в методе CreateParameter существует константа adParamOutput (adParamInputOutput).
...
Рейтинг: 0 / 0
04.03.2004, 13:38
    #32431166
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметр в ХП. ошибка 3708.
2 Pavel
Вполне возможно, но вряд-ли:
adParamOutput 2 Indicates that the parameter represents an output parameter.
adParamReturnValue 4 Indicates that the parameter represents a return value.
Я же всё равно обращаюсь к выходному параметру ХП, когда описываю параметры в Адодб комманд.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / параметр в ХП. ошибка 3708. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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