powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Динамическое формирование запроса
6 сообщений из 6, страница 1 из 1
Динамическое формирование запроса
    #33227050
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Использую MySQL 4.1, С++ Builder 6.0, ODBC через компоненты ADO.
В программе динамически формируется запрос (несколько конъюнктивных членов в зависимости от числа ключей). Но когда в качестве ключа указывается строка, записанная кириллицей, то сервер ничего не находит. Хотя, если тот же запрос зашить в свойство SQL компонента TADOQuery и потом, во время выполнения программы, записать в параметры знчения, то все ищется прекрасно. Вот как я формирую запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
     while (i < len && keys[ i ].Criteria == CT_INC)
     {
          if (i >  0 )
               where_clause = where_clause + " and ";
          where_clause = where_clause + Format("r.id IN (select dr.record_id_fk from descr_record_t dr, descriptor_t d where d.descr_type = \'%s\' and d.value = \'%s\' and dr.descr_id_fk = d.id ) ", ARRAYOFCONST((descr_type_markers[ keys[ i ].fd ], keys[ i ].Key)));
          i++;
     }
...
sql = "select r.* from record_t r where " + where_clause + ";";
В чем может быть причина? Формировать запрос нужно только динамически, т.к. число ключей становится изаестно только во время выполнения.
Заранее спасибо.
...
Рейтинг: 0 / 0
Динамическое формирование запроса
    #33228572
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очевидно, проблема в кодировке.
Сравните, в какой кодировке отсылается русская строка в запросе, и в какой кодировке содержимое базы.
...
Рейтинг: 0 / 0
Динамическое формирование запроса
    #33228878
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все это я проверил первым делом.
Искал лишние пробелы и т.д.
Решилось все просто (непонятно, почему): удалил все таблицы, создал их заново и загрузил снова все данные.
В чем была причина, я там и не понял
...
Рейтинг: 0 / 0
Динамическое формирование запроса
    #33228968
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит индексы побились.
...
Рейтинг: 0 / 0
Динамическое формирование запроса
    #33229101
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но теперь еще одна проблема:
при исполтзовавнии в запросе латинских символов (параметр поиска) все нормально, а при задании значения ключа кириллицей запрос отрабатывает

myQuery->Active = true;
while (!myQuery->Eof) // Есть выбранные строки, тут все в порядке
{
...
myQuery->Next(); // Выбрасывает исключение EDatabaseError: Поставщик или другая службка вернула значение E_FAIL
}

Причем это только для русских букв.
Что-то странно все это
...
Рейтинг: 0 / 0
Динамическое формирование запроса
    #33229138
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще несколько экспериментов показали, что такое поведение относится не только к запросам с кириллицей...
Метод Next может отработать несколько раз и потом выбросить исключение. Мне кажется, что MySQL здесь ни при чем. Что-то поставщик даных мутит. Это все в целом называется MDAC, я правильно понял? М.б., скачать обновления?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Динамическое формирование запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]