ADODB对象忽略excel中的文本

Posted

技术标签:

【中文标题】ADODB对象忽略excel中的文本【英文标题】:ADODB object ignoring text in excel 【发布时间】:2014-02-07 16:14:43 【问题描述】:

我在 excel 中有一个数据表,其中商店编号列中包含数字和文本。我需要通过 VBA 中的 ADODB 对象使用 sql 来获取列中商店编号的列表。我正在使用以下内容来设置 ADODB。

问题:如果查询首先遇到一个数字,那么该字段将被视为数字并忽略文本。如果首先点击文本,则忽略数字。

我正在使用以下内容来设置 ADODB。这些在工作表模块提示me. 中。

Public Function Query(qry As String) As ADODB.Recordset
Dim cn As ADODB.Connection '* Connection String
Dim rs As ADODB.Recordset '* Record Set
Dim sQuery As String '* Query String
Dim FileName As String

On Error GoTo QryErr

Set cn = New ADODB.Connection
FileName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & _
    ";Extended Properties=Excel 8.0;Persist Security Info=False"
cn.ConnectionTimeout = 40
cn.Open

Set rs = New ADODB.Recordset
Select Case LCase(qry)
    Case "dry": sQuery = SQLDry
    Case "frz": sQuery = SQLFrz
    Case "fsh": sQuery = SQLFsh
    Case "temp": sQuery = SQLTemp
    Case Else: GoTo QryErr
End Select
rs.ActiveConnection = cn
rs.Source = sQuery
rs.Open

Set Query = rs
If Not rs Is Nothing Then Set rs = Nothing
If Not cn Is Nothing Then Set cn = Nothing

QryErr:
If Err <> 0 Then
Debug.Assert Err = 0
MsgBox Err.Description
End If

End Function

对于 SQL 部分,我有以下内容。

Private Function SQLTemp() As String
Dim Name As String
Name = Me.Name
SQLTemp = "SELECT str([" & Name & "$].Store) as Store " & _
"FROM [" & Name & "$] " & _
"GROUP BY [" & Name & "$].Store"
End Function

如您所见,我尝试将字段转换为 str(),但没有帮助。

如何让查询将列视为文本,以便返回所有值。我想避免在我所有的数字前面加上 '。

【问题讨论】:

请问,为什么要用adodb来做这个? 我需要在 excel 中发生这种情况。除了 adodb 之外,我还可以尝试吗?我会尝试添加 IMEX=1,pnuts。 我让 IMEX=1 工作,但它不能解决我的问题。 Schema.ini : msdn.microsoft.com/en-us/library/ms709353(v=vs.85).aspx 【参考方案1】:

5 年前问过!我有同样的问题。我的解决方案是将违规列(具有“特殊字符”和“TEXT”数据类型的列)的数据类型更改为“VARCHAR”,或者您可以在查询中删除特殊字符,或者通过以下方式更改 CharacterSet Schema.ini,正如@Tim Williams 建议的那样 (msdn.microsoft.com/en-us/library/ms709353(v=vs.85).aspx)。

【讨论】:

以上是关于ADODB对象忽略excel中的文本的主要内容,如果未能解决你的问题,请参考以下文章

IMEX=0 的 Excel ADODB 查询不从第一行返回数据

OleDB读取Myxls生成的Excel文本,结果只能读取到第一列的值

excel vba 调用ADODB 问题?

Oracle 数据库中的 VBA ADODB DATE 字段类型

将 ADODB 记录集拆分为 Excel 工作表?

如何从 adodb 记录集中访问存储过程中的变量?