VBA SQL Query не получает значения последовательно как числовые, когда данные являются числовыми - PullRequest
0 голосов
/ 22 октября 2019

У меня есть база данных Excel, в которой я написал код VBA для создания сетки цен по ширине и высоте в зависимости от категории товара. Я использую 3 оператора SQL для достижения этой сетки. Один для высоты, один для ширины и один для цены для каждой ширины х высоты. Я использую 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...