首页 > 解决方案 > 当数据为数字时,VBA SQL 查询不会将值始终作为数字拉取

问题描述

我有一个 excel 数据库,我编写了 VBA 代码以根据项目类别按宽度和高度创建价格网格。我正在使用 3 个 SQL 语句来实现这个网格。一个用于高度,一个用于宽度,一个用于每个宽度 x 高度的价格 我正在使用 SQL 查询从工作表中提取数据。我有其他代码首先触发以根据列将数据转换为数字或文本。这样,高度和宽度列将始终是数字,而不是保存为文本的数字,混合文本和数字的项目类别列将是存储为文本的数字。这样 StrSql 语句就可以拉取数据而不会出现不匹配的情况。问题是,虽然整列是工作表上正确的数据类型,并且 sql 语句为一个网格提取正确的数字类型的数据,然后下一个网格将数字数据作为字符串提取。我检查了工作表中的数据,它确实被转换为数字,并且该列被格式化为数字。一些网格创建正常,但其他网格出现数据不匹配错误。什么会导致 SQL 查询有时仅将数字数据作为字符串提取?

StrSql=SELECT DISTINCT [GRIDDATA$].[WIDTH] FROM [GRIDDATA$] WHERE [GRIDDATA$].[ItemCategory] = '" CAT.Fields("ItemCategory")"' ORDER BY [GRIDDATA$].[Width]
Width.Open strSQL, cnn, adOpenKeyset, adLockOptimistic

'more code

StrSql= SELECT DISTINCT [GRIDDATA$].[Price] FROM [GRIDDATA$] WHERE [GRIDDATA$].[WIDTH] = " & Width.Fields("Width") & " AND [GRIDDATA$].[HEIGHT] = " & Height.Fields("Height") & " AND [GRIDDATA$].[ItemCategory] = '"CAT.Fields("ItemCategory")"'
PriceVal.Open strSQL, cnn, adOpenKeyset, adLockOptimistic 

只有 PriceVal 查询在 Width.Fields("Width") 上有错误数据错误类型错误。它有时会将存储为数字的数字作为字符串提取。

下面是我的 Prep 数据代码

'Convert Width to Numbers

LastRow = sht.Cells(sht.Rows.Count, "Q").End(xlUp).Row

Set SelectR = sht.Range("Q2:Q" & LastRow)

SelectR.TextToColumns Destination:=Range("Q2"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True

标签: sqlexcelvba

解决方案


推荐阅读