Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行SQL存储过程时,在VBA中将varchar转换为date_Sql_Sql Server_Vba - Fatal编程技术网

运行SQL存储过程时,在VBA中将varchar转换为date

运行SQL存储过程时,在VBA中将varchar转换为date,sql,sql-server,vba,Sql,Sql Server,Vba,我有下面的VBA脚本,用于提取SQL(存储过程)并获取Excel。我允许excel单元格“B1”输入日期,但我面临错误消息 将varchar转换为datetime时出错 我尝试将Excel列“B1”更改为最新格式,但错误仍然存在。请帮忙。谢谢 Sub-puldata() 作为ADODB.连接的Dim oConn 将rs设置为ADODB.Recordset 作为ADODB.字段的Dim fld 将mssql设置为字符串 将行设置为整数 作为整数的Dim col Dim DateTo As Date

我有下面的VBA脚本,用于提取SQL(存储过程)并获取Excel。我允许excel单元格“B1”输入日期,但我面临错误消息

将varchar转换为datetime时出错

我尝试将Excel列“B1”更改为最新格式,但错误仍然存在。请帮忙。谢谢

Sub-puldata()
作为ADODB.连接的Dim oConn
将rs设置为ADODB.Recordset
作为ADODB.字段的Dim fld
将mssql设置为字符串
将行设置为整数
作为整数的Dim col
Dim DateTo As Date
将ws设置为此工作簿
设置ws=ThisWorkbook
Application.ScreenUpdating=False
Set oConn=新的ADODB.Connection
Set rs=New ADODB.Recordset
'oConn.Parameters.Append oConn.CreateParameter(“DateTo”,adDate,adParamInput,10,范围(“D1”).Text)
mssql=“exec dbo.HP_received@DateTo=”&Cells(1,2)和“;”
ocann.ConnectionString=“Driver={SQL Server本机客户端11.0};Server=10.88.71.32;Database=HCMY;UID=sa;PWD=Hcmy@sap"
'oConn.ConnectionTimeout=30
奥康,开门
开放式mssql,奥康
如果是rs.EOF那么
MsgBox“未找到匹配的重新记录”
rs.Close
奥康,结束
出口接头
如果结束
行=3
col=1
对于rs字段中的每个fld
Sheet1.单元格(行、列).Value=fld.Name
col=col+1
下一个
先走一步
行=行+1
做而不做
col=1
对于rs字段中的每个fld
表1.单元格(行、列)。值=fld
col=col+1
下一个
行=行+1
下一个
环
rs.Close
奥康,结束
端接头

看起来您的存储过程返回的是您期望的不同类型-VARCHAR而不是DATE。没有足够的信息说明这一问题的根本原因是什么,即数据库设置/列类型或出于任何原因转换为varchar的存储过程。在工作表上填充数据后或填充时,可能需要将结果转换为日期。既然您目前没有对recodset执行任何其他操作,为什么不使用?在
单元格(1,2)
中有什么值?在即时窗口中尝试
?单元格(1,2)
。还要记住格式,SQL Server会将
2019年9月10日
(即:今天的日期)转换为
2019年10月9日
@FAB,这取决于连接的类型。“将varchar转换为datetime时出错”是SQL Server的错误。唯一可以从中获取它的地方是
单元格(1,2)
中的值。你不应该在第一位。显式创建
ADODB.Command
,并将日期添加为参数.debug.print mssql。获取结果,并尝试在SSMS或直接执行查询的其他客户端中执行。它有用吗?为什么?