我正在从SQL ADODB连接拉入Excel VBA,似乎有些字段返回时为空,但在SQL中有值。我对VBA非常绿色(只是回到旧版应用程序中,尝试将所有内容迁移到SQL数据库存储而不是CSV)
下面是返回值的示例(只是一个“我们应该拥有的位置“示例数据|QRSTE/ S179399”)
要提取的代码:
Sub GetDFInfoByDf(recordID As String, connectionString as String)
Dim connectionString As String
connectionString = connectionString
Dim command As String
command = "Select * FROM data_table WHERE id = '" & recordID & "'"
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open connectionString
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic
Set rs = conn.Execute(command)
Dim rsMatrix As Variant
rsMatrix = rs.GetRows(1)
If IsNull(rs) Then
'rs is null
MsgBox "Pulled recordset is null"
Else
Call FillObjValuesFromRecordSet(rs)
End If
我看到我们有一个有点特殊的角色在那里(|)
就任何SQL编码配置而言:它最有可能是UTF-8。我认为我必须在VBA或SQL端将其转换为ANSI,但我一直在兜圈子试图弄清楚这一点。
请注意,此字段在SQL中为NVARCHAR
关于如何处理这个问题有什么想法吗?据我所知,关于这个问题的文档非常少。
谢谢你!
我尝试过的事情:
1.添加会话模式=ANSI;连接字符串
预期结果:-SQL存储varchar“示例数据|QRSTE/ S179399”(字段中没有引号)-我希望Select返回确切的varchar/string值,而不是图像(“)中的返回值
1条答案
按热度按时间fgw7neuy1#
解决方法:
带有varchar(max)或nvarchar(max)的SQL表列无法转换回来。
我的初始表的大小超出了需要的大小,因此将这些列更改为varchar(8000)和nvarchar(4000)解决了这个问题!
谢谢