| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > проблема с mysql (оператор IF) |
| Автор: admsasha 22.1.2010, 11:32 | ||||
| Пишу, в теме mysql т.к. больше такой глюк нигде не проявляется строка для подключения к базе
Есть вот такой код
На выводе (row(0).value) получаю "????". Почему так ? Буквы латинские. С консоли показывает данные (вывод "aaabbbccc") нормально. |
| Автор: Akina 22.1.2010, 12:19 |
Вот именно так - строка длиной 4 байта с четырьмя знаками вопроса? Добавлено через 37 секунд И покажи определение переменной Row. |
| Автор: admsasha 22.1.2010, 13:39 | ||
Да, именно так. Почему я и уточнил, что буквы английские, что это не из-за кодировки. Причем если слово в IF будет длинным, то и знаков "?" будет больше. Dim Row As ADODB.Recordset |
| Автор: Akina 22.1.2010, 14:01 |
Но при "слове" в 9 символов даётся именно 4 знака вопроса, так? А это - честные знаки вопроса, CHR(&H3F)? проверь... |
| Автор: admsasha 22.1.2010, 15:24 |
| интересно, что через каждые три знака добавляется этот символ эти проверки через "окно отладки", курсивом выделил вывод ? asc(mid(row(0).Value,1,1)) 63 ? mid(row(0).Value,1,1) = CHR(&H3F) False StrSQL="select IF(1=1,'1234',3)" Set Row = cnnADO.Execute(StrSQL, , adCmdText) ? row(0).Value ?? StrSQL="select IF(1=1,'aaaaaa',3)" Set Row = cnnADO.Execute(StrSQL, , adCmdText) ? row(0).Value ??? StrSQL="select IF(1=1,'1234567',3)" Set Row = cnnADO.Execute(StrSQL, , adCmdText) ? row(0).Value ??? StrSQL="select IF(1=1,'123456',3)" Set Row = cnnADO.Execute(StrSQL, , adCmdText) ? row(0).Value ??? StrSQL="select IF(1=1,'12345678',3)" Set Row = cnnADO.Execute(StrSQL, , adCmdText) ? row(0).Value ???? StrSQL="select IF(1=1,'123456789',3)" Set Row = cnnADO.Execute(StrSQL, , adCmdText) ? row(0).Value ???? вообще не понимаю Добавлено через 3 минуты и 52 секунды И вот еще, версия mysql 5.1.34 |
| Автор: Akina 22.1.2010, 16:20 | ||||
Посмотрел хелп по ADO. Посмотрел пример... так вот - текстовые значения возвращаются с типом adLongVarWChar (203) - a long null-terminated Unicode string value, которое надо бы попробовать конвертировать во что-нить более пригодное к использованию. Потому как если написАть
результат получается предсказанно-корректный. Добавлено через 2 минуты и 50 секунд PS. Использовал коннектор 5.1.8. PPS. MS Access через DSN соединяется без проблем и получает все данные корректно, в т.ч. строковые. Добавлено через 4 минуты и 20 секунд PPPS. Содержимое DSN-файла в общем вполне предсказуемо:
|
| Автор: admsasha 22.1.2010, 16:39 | ||||
Да, так выводит как надо и даже StrSQL="SELECT if(1=1,'aaa','bbb') выводит правильно. Вообще в оригинале мне нужен вот такой код:
т.е. если показывать дату либо ничего не показывать... Но выводит точно также несколько знаков "?" :( Добавлено через 3 минуты и 55 секунд Вот что получается, если в IF типы одинаковые, то выводит нормально т.е.
выводит всё номально, НО мне нужно именно '' (пустое значение) |
| Автор: Akina 22.1.2010, 16:53 | ||
а если нечто типа
|
| Автор: admsasha 22.1.2010, 17:22 |
| Поразительно ! Сработало !!! Я так понял, "баг" обошелся через преобразование типа в char. Но всё же интересно, зачем так, хотя уже и не так важно |