2

ADO 2.5 を使用して SQL Server 2008 データベースと通信する VB6 で記述されたレガシー アプリがあります。その中には、ストアド プロシージャからデータを取得するレポートがあります。varcharストアド プロシージャは、結果セットの 1 つの列として結果を返す UDF を呼び出します。SQL Server Management Studio から呼び出されると、その列が正しく設定されますが、VB6 アプリケーション内から呼び出されると、空の値が返されます。これを引き起こしている可能性のある互換性の問題はありますか?

UDF は次のとおりです。

ALTER FUNCTION dbo.TransferNoteAgreementSummary(@ClientID int, @Year int) 
RETURNS varchar(3000) AS
BEGIN
    DECLARE @ret varchar(3000)
    SET @ret=''

    SELECT @ret = @ret +  
        + CONVERT(varchar, F.NumBins) + ' of ' + B.[Name]+', '+CONVERT(varchar, F.DaysPerWeek)+' lifts, ' + CF.Frequency 
        + ' from ' + CONVERT(varchar, F.StartDate,106)+' to '+CONVERT(varchar, F.EndDate, 106) + dbo.CrLf()
    FROM Accounts A
        JOIN AccountFragments F ON A.AccountID=F.AccountID
        JOIN BinTypes B ON A.BinTypeID=B.BinTypeID
        JOIN ContractFrequencies CF ON F.FrequencyID=CF.FrequencyID
    WHERE A.ClientID=@ClientID AND A.ContractYear=@Year
    ORDER BY B.[Name], A.AccountID, F.StartDate

    RETURN @ret
END

ストアド プロシージャの関連部分は次のとおりです。

ALTER PROC [dbo].[sp_PrintRoundsReport]
AS

          DECLARE @Year int
    DECLARE @Results TABLE([Route] VARCHAR(100), Town VARCHAR(200), ClientID INT, Customer VARCHAR(400), [Address] VARCHAR(MAX),
                                                    [Item Code] VARCHAR(50), Bins INT, [Type] VARCHAR(40), Volume INT, BinDesc VARCHAR(3000), 
                                                    CollectDay VARCHAR(20), DayOrder int)

[ irrelevant lines removed ]                                                    

    SELECT [Route], Town, Customer, [Address], [Item Code], Bins, [Type], Volume, 
        dbo.TransferNoteAgreementSummary(ClientID, @Year) AS BinDesc, CollectDay
    FROM @Results
    ORDER BY DayOrder, [Route], Town, [Address], Volume

最後に、呼び出されるコードは次のとおりです。

  Set cmd = New ADODB.Command
  Set cmd.ActiveConnection = GetConnectionString() 

  cmd.CommandType = adCmdStoredProc
  cmd.CommandText = "sp_PrintRoundsReport"

  Dim rs As New Recordset

  Call rs.Open(cmd)

機能に問題があるようです。定数文字列を返すように変更すると、値が正しく渡されます

これは誰にとっても何か鐘を鳴らしますか?

4

1 に答える 1

0

行方不明じゃない?

cmd.Parameters.Add("@RETURN_VALUE")
于 2012-07-26T11:22:16.940 に答える