【问题标题】:Unexpected white space after SQL Server stored procedureSQL Server 存储过程后出现意外的空白
【发布时间】:2015-12-29 09:12:14
【问题描述】:

使用 ADODB 对象从 Excel 中的 VBA 调用存储过程时,似乎得到了意外的空白。从 SQL Server Management Studio 运行该过程时不会出现此问题。

exec usp_testloginalert '2015-11-29 00:00:00','2015-11-30 00:00:00',N'screen'                                                           

更新

来自 vba 的代码

Function querylogs(ByVal todate As Date, ByVal fromdate As Date, ByVal desc As String)
Dim cn As ADODB.Connection
Dim cmdProd As ADODB.command
Dim prs As New ADODB.Recordset

sQuery = "usp_testloginalert"
Set cn = New ADODB.Connection
With cn
    .Provider = "SQLOLEDB"
    sConnection = "dbconn"
    .ConnectionString = sConnection
    .ConnectionTimeout = 1000
    .CommandTimeout = 1000
End With
cn.Open sConnection

Set cmdProd = New ADODB.command
With cmdProd
    .ActiveConnection = cn
    .CommandType = adCmdStoredProc
    .CommandText = "usp_testloginalert"
    .CommandTimeout = 1000
End With
Dim prmFromDate As ADODB.Parameter
Set prmFromDate = cmdProd.CreateParameter("@FromDate", adDBDate,adParamInput)
prmFromDate.Value = fromdate
cmdProd.Parameters.Append prmFromDate

Dim prmToDate As ADODB.Parameter
Set prmToDate = cmdProd.CreateParameter("@ToDate", adDBDate, adParamInput)
prmToDate.Value = todate
cmdProd.Parameters.Append prmToDate

Dim prmDescritpion As ADODB.Parameter
cmdProd.Parameters.Append cmdProd.CreateParameter("Descritpion",adBSTR,adParamInput, 100, desc)

Set prs = New Recordset
prs.CursorLocation = adUseClient
prs.Open cmdProd.Execute

Application.EnableCancelKey = True
cn.Close

Set querylogs = prs
End Function

【问题讨论】:

  • 显示调用 SP 的代码
  • 我想你有CHAR数据类型的参数
  • 不使用 varchar(200) 作为 desc
  • @jennous 没有帮助,如果不能解决问题,就不需要在这里。所以应该尽可能保持清洁。

标签: sql sql-server excel adodb vba


【解决方案1】:

当我们看不到您的程序代码时很难回答,但我可以建议您使用 LTRIMRTRIM 删除前导/尾随空格。

在以下:LTRIM(RTRIM( /* character_xpression */ ))

更新

如果不是 SQL 问题,请尝试查看相关帖子:

Remove leading or trailing spaces in an entire column of data

Delete blanks from start and end of a string in vba

http://www.excelitems.com/2009/03/remove-extra-spaces-from-cell-value.html

【讨论】:

  • 已经在procedure中使用了LTRIM和RTRIM,我们已经对存储过程进行了全面测试,问题似乎出在vba端
【解决方案2】:

问题已解决,将参数长度设置为传递的变量的长度。

将lendesc设为整数

lendesc = Len(desc) + 1

Dim prmDescritpion As ADODB.Parameter
cmdProd.Parameters.Append cmdProd.CreateParameter("Descritpion", adBSTR,adParamInput, lendesc, desc)

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多