sql - 当数据为数字时,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
解决方案
推荐阅读
- php - 如何在 laravel spatie 中更新/编辑 custom_properties?
- javascript - 如何延迟/开始/去抖动获取数据,直到用户停止输入?
- c++ - 为什么这个 constexpr 不在可变参数函数模板常量中?
- python - 如果此列表中的值不在此嵌套字典的键之一内,如何删除该值?
- ffmpeg - ffmpeg 输出无法在多个设备上播放
- jmeter - __FileToString 方法在请求失败的 Http 请求正文中添加一些垃圾字符串“# JMeter 生成的头文件”
- c++ - 有条件地删除 C++ 单链表中的元素
- javascript - 查找 JS 数组中的最大数并返回变量名
- swift - 添加换行符后 UITextView 高度变为可滚动
- mysql - HMAC SQL Server 转 MySQL 功能