sql-server - CopyFromRecordset 返回奇怪的字符

标签 sql-server vba excel sql-server-2008 adodb

我有以下代码:

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 的调用中按预期返回吗?

最佳答案

我也遇到了类似的问题,我强烈怀疑您的 RecordSet 中返回的记录数量相当大。因此,CopyFromRecordSet 不起作用。

我建议使用以下方法:

  1. 使用 RecordSet 数据填充 VBA 中的二维数组。

    将 arr 变暗为变体 arr=rs.GetRows() rs.close conn.close

  2. 转置数组(因为这会导致倒排数组)

    arr=Application.WorksheetFunction.Transpose(arr)

  3. 数组转置后,您可以将数组写入工作表范围。

    testWS.Range("A1").Resize(UBound(arr, 1) + 1, UBound(arr, 2)

这对我有用。希望这对你有用!

快乐编码!

关于sql-server - CopyFromRecordset 返回奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42261508/

相关文章:

sql - 选择并为 2 列上具有相同值的唯一 ID 创建新 ID

sql - 即使已定义公共(public)表表达式 (CTE),也会出现“对象名称无效”错误

python - 如何在Excel上按下按钮时执行Python脚本

excel - VBA,处理 E-10

excel - 下标与上标冲突

sql-server - 如何从 SQL 服务器发出 HTTP 请求?

sql-server - 选择没有光标的列的总和

ms-access - 您输入的表达式引用了一个已关闭或不存在的对象错误

vba - 使 .xlsm 文件在使用 VBA 打开时不执行代码

excel - 在范围内查找文本并将下一个 Activecell.offset(1,1)16 单元格复制到目标