Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обрезаются значения при передаче в stored procedure  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1034
Уважаемый форум,

Проблема: из Аксесса ADP вызывается хранимая процедура на СКЛ Сервере 2008, при этом в эту процедуру передаются параметры
[
'########################### Calculate
Dim supl As ADODB.Parameter, Crop As ADODB.Parameter, bapY As ADODB.Parameter, orig As ADODB.Parameter, ltyp As ADODB.Parameter, stal As ADODB.Parameter, stag As ADODB.Parameter, mpno As ADODB.Parameter

Set db = CurrentProject.Connection
Set Comd = New ADODB.Command
Comd.CommandText = "Calculate_BP"
Comd.CommandType = adCmdStoredProc
Comd.ActiveConnection = db
Set supl = Comd.CreateParameter("@supl", adVarChar, adParamInput)
Set Crop = Comd.CreateParameter("@crop", adVarChar, adParamInput)
Set bapY = Comd.CreateParameter("@bapY", adVarChar, adParamInput)
Set orig = Comd.CreateParameter("@orig", adVarChar, adParamInput, 50)
Set ltyp = Comd.CreateParameter("@ltyp", adVarChar, adParamInput, 50)
Set stal = Comd.CreateParameter("@stal", adVarChar, adParamInput)
Set stag = Comd.CreateParameter("@stag", adVarChar, adParamInput)
Set mpno = Comd.CreateParameter("@mpno", adVarChar, adParamInput)

rs.Open ("SELECT DISTINCT cpa_MOPI_No, fin_Crop, mate_Origin, mate_Type, fin_BAP, fin_Supplier, mate_Stalk, cpa_Stage FROM View_CPA WHERE((cpa_Decision is null or cpa_Decision='') AND fin_Group='BP' AND fin_Purchase_Cat='Regular' and cpa_Stage not in ('OI','SL') and (cpa_Status not in ('X') or cpa_Status is null))"), db, adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
    rs.MoveFirst
    Do
        supl.Value = Left(Trim(rs.Fields("fin_Supplier").Value), 3)
        Crop.Value = Trim(rs.Fields("fin_Crop").Value)
        bapY.Value = Trim(rs.Fields("fin_BAP").Value)
        orig.Value = rs.Fields("mate_Origin").Value
        ltyp.Value = rs.Fields("mate_Type").Value
        stal.Value = Left(Trim(rs.Fields("mate_Stalk").Value), 1)
        stag.Value = Trim(rs.Fields("cpa_Stage").Value)
        mpno.Value = Trim(rs.Fields("cpa_MOPI_No").Value)
        Debug.Print mpno.Value & ", " & supl.Value & ", " & Crop.Value & ", " & bapY.Value & ", " & orig.Value & ", " & ltyp.Value & ", " & stal.Value & ", " & stag.Value
        Comd.Execute , Array(supl, Crop, bapY, orig, ltyp, stal, stag, mpno)
        rs.MoveNext
    Loop Until rs.EOF
    MsgBox "Companion BPs are calculated!", vbInformation, "Action completed"
End If
rs.Close

На сервере в ХП определены переменные, которые принимают передаваемые значения
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Calculate_BP]
	@supl varchar(3), @crop varchar(4), @bapY varchar(4), @orig varchar(50), @ltyp varchar(50), 
	@stal varchar(1), @stag varchar(5), @mpno varchar(11)
AS
	DECLARE @row_cnt int, @row_retr int
BEGIN
	SET NOCOUNT ON;

дальше идет расчет, который значения не имеет.
Проблема в том, что значения передаются обрезанными для параметров @orig и @ltyp - это видно в при сравнении результатов Debug.Print и данных профайлера да и при выводе значений переменных во временную таблицу.

Вопрос: как побороть и с чем это может быть связано? Спасибо заранее!
21 июл 11, 17:40    [11008605]     Ответить | Цитировать Сообщить модератору
 Re: Обрезаются значения при передаче в stored procedure  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Comd.Execute , Array(supl, Crop, bapY, orig, ltyp, stal, stag, mpno)

и зачем вы так извращаетесь?
присваивайте значения каждому именнованому параметру через коллекцию Parameters
21 июл 11, 17:44    [11008645]     Ответить | Цитировать Сообщить модератору
 Re: Обрезаются значения при передаче в stored procedure  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1034
Konst_One
Comd.Execute , Array(supl, Crop, bapY, orig, ltyp, stal, stag, mpno)

и зачем вы так извращаетесь?
присваивайте значения каждому именнованому параметру через коллекцию Parameters


Это как? Можно пример?
21 июл 11, 17:48    [11008672]     Ответить | Цитировать Сообщить модератору
 Re: Обрезаются значения при передаче в stored procedure  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Dim cmd As ADODB.Command
Dim p As ADODB.Parameters


Set db = CurrentProject.Connection
Set Comd = New ADODB.Command
Comd.CommandText = "Calculate_BP"
Comd.CommandType = adCmdStoredProc
Comd.ActiveConnection = db
Set p = Comd.Parameters
...
p.Append Comd.CreateParameter("@orig", adVarChar, adParamInput, 50)
...

'в вашем цикле
...
p.Item("@orig").Value = "value"
...
Comd.Execute
...
21 июл 11, 17:55    [11008724]     Ответить | Цитировать Сообщить модератору
 Re: Обрезаются значения при передаче в stored procedure  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1034
Konst_One,

Не знаю, в чем конкретно было дело, но Ваш вариант сработал - данные не обрезаются. Спасибо огромное!!!
21 июл 11, 18:20    [11008862]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить