Проблема с запросом SQL из VBA при попытке выбрать поля типа 'Widestring' (файл Access .mbd)
Я пытаюсь импортировать некоторые данные из.mbd-файла в Excel. Я могу скопировать всю базу данных в электронную таблицу, никаких проблем нет. Я также могу использовать такое утверждение
sSQL = "SELECT HOEHE " & "FROM h_datei WHERE HOEHE >= 53 "
Проблема возникает при использовании WHERE в поле с типом, отличным от int или float. (У меня нет MS Access, но MDB Plus сообщает мне, что тип текстовых полей в моем.mdb называется 'Widestring')
Я получаю это в MsgBox из Excel: ошибка времени выполнения '-2147217913 (80040e07)': ошибка автоматизации
Я довольно долго гуглял и ковырялся, но я застрял. Под мой код VBA. Я не знаю, имеет ли это отношение к провайдеру (Microsoft.ACE.OLEDB.12.0), но я пробовал несколько других. Я также думаю о Юникоде, так как эта база данных из немецкой геодезической программы.
sConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & _
sPath & "Oskarb04.mdb"
sSQL = "SELECT HOEHE " & "FROM h_datei WHERE PNR >= 53 "
Set rsData = New ADODB.Recordset
Debug.Print sSQL
rsData.Open sSQL, sConnect, adOpenForwardOnly, adLockReadOnly, adCmdUnknown
1 ответ
Для сравнения строк вы обычно используете оператор "Мне нравится", например
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Вы можете комбинировать это с подстановочными знаками, чтобы получить частичные совпадения. Пример из этой ссылки:
Для точного соответствия вы можете использовать "="
SELECT column1, column2, ...
FROM table_name
WHERE columnN = 'myString';
Если что-то вроде ">="
работает со строковым полем, тогда я подозреваю, что поле было установлено неправильно, я предполагаю, что оно незнакомо с рассматриваемым программным обеспечением, и / или может быть выполнено неявное преобразование, которое приводит к снижению производительности и может быть взломано.
Если это строка в юникоде, что быстрый Google, кажется, подразумевает widestring
тип данных, то
WHERE columnN = N'myString'
В противном случае вы всегда можете попробовать привести столбец к другому типу, например
StrConv(PNR,128) = '309'