Ms access 如何阻止存储过程中的返回参数被截断为4000个字符

Ms access 如何阻止存储过程中的返回参数被截断为4000个字符,ms-access,adodb,Ms Access,Adodb,这里提出的问题是:- 是关于某些发票生成的问题,这仍然会导致问题。我现在正试图重写相同的代码,以便使用ADODB,特别是ADODB.Command和一些存储过程,完全在后端SQL Server数据库上工作 我试图解决的一个问题是,在旧系统中,我在客户机中创建了一个本地表(称为tmpukrepeat)。我正在服务器上制作一个类似的表。但是,此表的字段是通过跨两个独立数据库的联接创建的 在我的新系统中,使用存储过程填充与发票相关联的服务器上的等效表更容易,并且在该存储过程中使用FOR XML PA

这里提出的问题是:-

是关于某些发票生成的问题,这仍然会导致问题。我现在正试图重写相同的代码,以便使用ADODB,特别是ADODB.Command和一些存储过程,完全在后端SQL Server数据库上工作

我试图解决的一个问题是,在旧系统中,我在客户机中创建了一个本地表(称为
tmpukrepeat
)。我正在服务器上制作一个类似的表。但是,此表的字段是通过跨两个独立数据库的联接创建的

在我的新系统中,使用存储过程填充与发票相关联的服务器上的等效表更容易,并且在该存储过程中使用
FOR XML PATH(“”)
子句使用如下查询返回以逗号分隔的customerid列表(另一个数据库的键)

SELECT @Subs = (SELECT ''''+SubsID+''',' FROM InvoicingData WHERE SessionID = @SessionID FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)')
SELECT @Customers = LEFT(@Subs,LEN(@Subs)-1)
@Customers是NVARCHAR(MAX)类型存储过程的输出参数,它将包含我将在下一次查询中使用的文本

我可以在SQLServerManagementStudio中运行存储过程,它返回42000个字符的字符串

接下来的查询将是这样的。并可用于将每个客户的项目数填充到工作表中

SQL = "SELECT COUNT(*) As NoItems, CustomerID FROM CustomerItems WHERE CustomerID IN(" & Customers & " )"
因此,我在Access VBA中创建调用,以便像这样运行存储过程

    Dim Customers As String
    With cmd
        Set .ActiveConnection = Conn
        .CommandType = adCmdStoredProc
        .CommandText = "CreateInvoicingData"
        .Parameters.Append .CreateParameter("@SessionID", adVarWChar, adParamInput, 25, TempVars!SessionID)
        .Parameters.Append .CreateParameter("@InvoiceDate", adDate, adParamInput, , Form_Company.InvoiceDate)
        .Parameters.Append .CreateParameter("@Currency", adVarWChar, adParamInput, 15, "Pounds")
        .Parameters.Append .CreateParameter("@Customers", adVarWChar, adParamOutput, 1000000000)
        .Execute
        Customers = .Parameters("@FleetCustomers").Value
    End With
我遇到的问题是客户字符串被截断为4000个字符。我尝试将@Customers参数改为类型adLongVarWChar,但在.Execute语句中引发了一个错误,该语句表示“数据类型Ox63是已折旧的大型对象或LOB,但标记为输出参数。已折旧的大型对象不支持作为输出参数。请改用当前大型对象。”


我应该为@Customers参数使用什么类型,这样它就不会被截断或被视为已折旧?。注意:我尝试将此参数的大小设置为-1,但由于参数错误消息不一致而失败。

这让我想起了我自己的一个问题-也许这会有所帮助。@AndrewArnold不幸的是,没有设置-您只在SQLServer中,但是我可以在SQLServerManagementStudio中运行存储过程,并从中获得42000个字符的返回值。我认为这是一个与参数类型相关的ADODB问题。