【发布时间】:2017-07-04 19:54:59
【问题描述】:
我有以下代码:
Function downloadsqltoexcel(conn As ADODB.Connection, sSQL As String, exceldestinationrangename As String, sqltablename As String, bDownload As Boolean, Optional ws As Worksheet) As Variant
'================================================================================================================================
'== Procedure Name: downloadsqltoexcel
'== Purpose: downloads SQL table data (or query data) to Excel named range or grabs a specific value from an SQL table
'== Notes: ensure that SQL table or query name and Excel named range are identical
'================================================================================================================================
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset
Dim DestinationRange As Range
With rsPubs
.ActiveConnection = conn
.Open sSQL, conn, adOpenStatic, adLockReadOnly, adCmdText
If bDownload Then 'if download switch is on, dump into Excel named range
If ws Is Nothing Then
Set DestinationRange = Range(exceldestinationrangename)
Else
Set DestinationRange = ws.Range(exceldestinationrangename)
End If
With DestinationRange
.ClearContents
.CopyFromRecordset rsPubs
End With
.... more code follows, but not relevant
代码本身执行良好。但是,当我指向新创建的 Prod SQLServer 数据库时,.CopyFromRecordset rsPubs 行返回了非常奇怪的字符数据,该数据库也是直接从 SQLServer 中的 QA 数据库复制的。当我说非常奇怪时,我的意思是像空格混合了日式风格我什至不认识的字符或字体集。
rsPubs 按预期返回准确的记录数,所以我知道我得到了我想要的结果。还确认根据需要将数据写入 SQLServer DB。
任何想法如何解决它,以便值从调用 Prod SQLServer DB 时按预期返回?
【问题讨论】:
-
您的
exceldestinationrangename是单个单元格还是多个单元格范围?如果我没记错的话,范围需要是左上角的单元格only. -
@ThunderFrame - 谢谢,但这不是问题。范围是单个单元格。此外,正如我的问题所述,当指向 QA DB 时,它运行良好。
-
如果您循环播放记录并输出到即时窗口,您会得到什么?一样的吗?
-
@Absinthe - 已经有一段时间了,但我相信当我循环浏览时,即时窗口显示了每条记录的正确结果。我最终在我的最终解决方案中做到了这一点(但从未回答过这个问题,因为它已经不在我的脑海中了)。感谢您的评论。现在我可以清理这个问题并提供一个可持续的答案)。
-
@ScottHoltzman 抱歉,没有注意到发布日期,只是浏览了未答复的部分。为了将来参考,我建议查看表格的文本编码。很高兴您解决了这个问题。
标签: sql-server vba excel sql-server-2008 adodb