Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.07.2018, 17:44
|
|||
|---|---|---|---|
|
|||
Ошибка при поиске текстовых переменных в текстовых полях таблиц MySql |
|||
|
#18+
Братцы, помогите, пожалуйста!! Совсем уже выбился из сил… Не могу уже видеть эту ошибку… Вторые сутки не сплю и не ем. По порядку: Подключаюсь к базе MySQL из VBA (MS Excel) посредством “MySQL ODBC 5.3 ANSI Driver” (последняя версия 5.03.09.00 от 18.07.2017). Сам MySQL сервер на компьютере не установлен, но это не мешало на протяжении многих лет подключаться к базе, считывать и добавлять данные в таблицы SQL. Процедура подключения: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Процедура поиска текстовой строки в таблице SQL Код: vbnet 1. 2. 3. 4. 5. 6. Строка rs9.Open "SELECT COUNT(*) AS Chk FROM category_description WHERE name = " & "test", conn, adOpenDynamic, adLockOptimistic вызывает ошибку “Драйвер ODBC не поддерживает требуемые свойства” Работа над ошибкой: Как видите, “проблемная” строка пытается найти количество вхождений строки “test” в текстовом поле “name” таблицы “category_description”. Структура таблицы “category_description” такая: Команда SHOW VARIABLES LIKE 'char%' как для таблицы “category_description” так и для всей базы выдает такое: Замечено, что строка макроса, выдающая ошибку, корректно работает с нетекстовыми полями таблиц SQL и поиском в них только цифровых значений. К примеру, в поле “category_id” та же “проблемная” строка легко находит значение “222”: Код: vbnet 1. Возвращает rs9.Fields("Chk") = 2 При попытке искать текстовые значения в любых полях таблицы, любые комбинации “проблемной" строки процедуры: rs9.Open "SELECT COUNT(*) AS Chk FROM category_description WHERE category_id = " & "test", conn, adOpenDynamic, adLockOptimistic rs9.Open "SELECT COUNT(*) AS Chk FROM category_description WHERE name = " & "test", conn, adOpenDynamic, adLockOptimistic rs9.Open "SELECT COUNT(*) AS Chk FROM category_description WHERE name = " & "тест", conn, adOpenDynamic, adLockOptimistic возвращают все ту же ошибку «Драйвер ODBC не поддерживает требуемые свойства». Сделал вывод, что проблема связана с кодировками… Танцы с бубнами вокруг изначального подключения коннектора к базе SQL: 1. Начитался про параметр SET NAMES utf8. Согласно инструкциям подключаюсь к базе так: Подключение происходит нормально, но на “проблемная” строка кода выдает все ту же ошибку, ровно как и с другими параметрами: "STMT=SET character_set_results = 'utf8';" & _ "STMT=SET character_set_client = 'utf8';" & _ "STMT=SET character_set_connection = 'utf8';" & _ "STMT=SET character_set_database = 'utf8';" & _ "STMT=SET character_set_server = 'utf8';" & _ 2. Прочел, что при проблемах с кодировками, многим помог параметр CHARSET=utf8. У меня с этим параметром подключение происходит нормально, но поиск текста вызывает все ту же ошибку «Драйвер ODBC не поддерживает требуемые свойства»: Танцы с бубнами вокруг дампов: Пробовал решить проблему, как описывалось на многих форумах, посредством редактирования дампов таблицы. Подумал, что необходимо все мои кодировки (типа “utf8mb4”) свести к “UTF-8”. Чтобы команда “SHOW VARIABLES LIKE 'char%'” выдавала результат, подобный этому (результат не мой, взял для примера): Создал дамп таблицы “category_description”. В нем строка с “utf8mb4” встречается только один раз. Пробовал заменить эту строку на SET NAMES utf8; и выгрузить дамп обратно в базу, но не помогло. При запросе “VARIABLES” наблюдается все та же картинка с кодировками “utf8mb4” Многие советуют внести исправления в файл настройки SQL "my.ini". Но, на моем локальном компьютере этого файла нет (сервер SQL не установлен), а на самом сервере я также не могу его найти. Подскажите, пожалуйста, хотя бы в какую сторону копать. Я не программист, многие вещи делаю наугад и методом “проб и ошибок”. Вторые сутки воюю с этой ошибкой, совсем потерялся и уже не знаю, что делать… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.07.2018, 20:45
|
|||
|---|---|---|---|
Ошибка при поиске текстовых переменных в текстовых полях таблиц MySql |
|||
|
#18+
tinkandrКак видите, “проблемная” строка пытается найти количество вхождений строки “test” в текстовом поле “name”Не видим. Строка - это 'test'. А test без кавычек (или в обратных кавычках) - это имя поля таблицы. Ваша конкатенация запроса из кусочковавтор Код: sql 1. эквивалентна Код: sql 1. Чтобы строку искал должно быть Код: sql 1. Ну с регистром разберетесь. А то в одном месте Test, в другом test. Хотя, для ci это без разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.07.2018, 21:22
|
|||
|---|---|---|---|
Ошибка при поиске текстовых переменных в текстовых полях таблиц MySql |
|||
|
#18+
tinkandr Код: vbnet 1. Собирайте текст запроса в отдельную переменную. Тогда можно будет вывести его куда-нибудь для отладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.07.2018, 13:43
|
|||
|---|---|---|---|
|
|||
Ошибка при поиске текстовых переменных в текстовых полях таблиц MySql |
|||
|
#18+
vkle, ну, конечно же!! Одинарные кавычки! Ура!!! ))) Спасибо огромное за подсказку! Выложил свой пример с конкатенацией, т.к. в рабочем макросе вместо "тест" использую переменную. Сбило то, что с числами макрос работал и без кавычек. Числам не нужны одинарные кавычки! Блин, как же все просто! ) А я в такие дебри залез!! Вот, рабочий вид процедуры (за одним, перешел на более лучший способ проверки наличия строки в результатах запроса): Код: vbnet 1. 2. 3. 4. 5. 6. Спасибо всем огромное за ответы и помощь!) Мой сумасшедший проект спасен! ) vkle, будете в Москве, обязательно заходите на пиво/чай/кофе ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1829717]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 131ms |

| 0 / 0 |
