Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с mysql (оператор IF) 
V
    Опции темы
admsasha
Дата 22.1.2010, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Пишу, в теме mysql т.к. больше такой глюк нигде не проявляется

строка для подключения к базе
Код

"DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.0.1;PORT=3306;DATABASE=mydb;UID=myname;PWD=mypwd; OPTION=3;STMT=set names cp1251;"


Есть вот такой код
Код

   StrSQL="SELECT if(1=1,'aaabbbccc',2)"
   Set Row = cnnADO.Execute(StrSQL, , adCmdText)
   

На выводе (row(0).value) получаю "????". 

Почему так ? 

Буквы латинские. С консоли показывает данные (вывод "aaabbbccc") нормально.





Это сообщение отредактировал(а) admsasha - 22.1.2010, 11:34
PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 22.1.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(admsasha @  22.1.2010,  12:32 Найти цитируемый пост)
На выводе (row(0).value) получаю "????". 

Вот именно так - строка длиной 4 байта с четырьмя знаками вопроса?

Добавлено через 37 секунд
И покажи определение переменной Row.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 22.1.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Цитата(Akina @ 22.1.2010,  19:19)
Цитата(admsasha @  22.1.2010,  12:32 Найти цитируемый пост)
На выводе (row(0).value) получаю "????". 

Вот именно так - строка длиной 4 байта с четырьмя знаками вопроса?

Добавлено @ 12:19
И покажи определение переменной Row.

Да, именно так. Почему я и уточнил, что буквы английские, что это не из-за кодировки.  Причем если слово в IF будет длинным, то и знаков "?" будет больше.


Dim Row As ADODB.Recordset
PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 22.1.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(admsasha @  22.1.2010,  14:39 Найти цитируемый пост)
если слово в IF будет длинным, то и знаков "?" будет больше.

Но при "слове" в 9 символов даётся именно 4 знака вопроса, так?
А это - честные знаки вопроса, CHR(&H3F)? проверь...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 22.1.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



интересно, что через каждые три знака добавляется этот символ

эти проверки через "окно отладки", курсивом выделил вывод

? 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
????



вообще не понимаю  smile

Добавлено через 3 минуты и 52 секунды
И вот еще, версия mysql 5.1.34

Это сообщение отредактировал(а) admsasha - 22.1.2010, 15:25
PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 22.1.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Посмотрел хелп по ADO. Посмотрел пример... так вот - текстовые значения возвращаются с типом adLongVarWChar (203) - a long null-terminated Unicode string value, которое надо бы попробовать конвертировать во что-нить более пригодное к использованию. Потому как если написАть 
Код

StrSQL="SELECT if(1=1,123,456)"

результат получается предсказанно-корректный.

Добавлено через 2 минуты и 50 секунд
PS. Использовал коннектор 5.1.8.
PPS. MS Access через DSN соединяется без проблем и получает все данные корректно, в т.ч. строковые.

Добавлено через 4 минуты и 20 секунд
PPPS. Содержимое DSN-файла в общем вполне предсказуемо:
Цитата

[ODBC]
DRIVER=MySQL ODBC 5.1 Driver
UID=test
DFLT_BIGINT_BIND_STR=1
PORT=3306
DATABASE=test
SERVER=192.168.0.254



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 22.1.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Цитата(Akina @  22.1.2010,  23:20 Найти цитируемый пост)
StrSQL="SELECT if(1=1,123,456)"

Да, так выводит как надо и даже StrSQL="SELECT if(1=1,'aaa','bbb') выводит правильно.

Вообще в оригинале мне нужен вот такой код:
Код

SELECT IF(`date`>0,FROM_UNIXTIME(`date`),'') FROM ...


т.е. если показывать дату либо ничего не показывать... Но выводит точно также несколько знаков "?" :(

Добавлено через 3 минуты и 55 секунд
Вот что получается, если в IF типы одинаковые, то выводит нормально
т.е.

Код

SELECT IF(`date`>0,FROM_UNIXTIME(`date`),FROM_UNIXTIME(0)) FROM ...

выводит всё номально, НО мне нужно именно '' (пустое значение)

PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 22.1.2010, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(admsasha @  22.1.2010,  17:39 Найти цитируемый пост)
мне нужно именно '' (пустое значение)

а если нечто типа
Код

SELECT IF(`date`>0, CAST(FROM_UNIXTIME(`date`) AS CHAR),'') FROM ...
?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 22.1.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Поразительно ! Сработало !!!

Я так понял, "баг" обошелся через  преобразование типа в char. Но всё же интересно, зачем так, хотя уже и не так важно smile

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.