powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / параметр в ХП. ошибка 3708.
12 сообщений из 12, страница 1 из 1
параметр в ХП. ошибка 3708.
    #32430063
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=( торможу наверное...
обьявление хп
Код: 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
параметр в ХП. ошибка 3708.
    #32430123
новый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а полный код в модуле
можно посмотреть
...
Рейтинг: 0 / 0
параметр в ХП. ошибка 3708.
    #32430126
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
параметр в ХП. ошибка 3708.
    #32430136
новый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему стоит adChar
а в хп varchar
...
Рейтинг: 0 / 0
параметр в ХП. ошибка 3708.
    #32430181
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибочка, но это я уже пробовал. ставил и варчар - та же ошибка =(
при чём первый параметр - ретурнвалуе - без проблем проходит
...
Рейтинг: 0 / 0
параметр в ХП. ошибка 3708.
    #32430361
По крайней мере у меня в аналогичном (работающем!) коде точным указанием на тип параметра и его длиной (четвёртым аргументом метода 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
параметр в ХП. ошибка 3708.
    #32430525
новый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня все работает и без 4 параметра
...
Рейтинг: 0 / 0
параметр в ХП. ошибка 3708.
    #32430615
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
параметр в ХП. ошибка 3708.
    #32430975
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer
Во-первых, у тебя в объявлении параметров пройцедуры нет выходного параметра - нафига ты его в аксесе объявляешь?
Ты не прав, тут у наутилус 'а все правильно. adParamReturnValue это код завершения процедуры, например

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


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