Russian Qt Forum
Ноябрь 24, 2024, 04:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt+ODBC+CAST  (Прочитано 8990 раз)
hamlo
Гость
« : Декабрь 16, 2009, 12:43 »

Подключаемся так
Код:
QSqlDatabase dbfdb = QSqlDatabase::addDatabase("QODBC", "dbfcon");
QString dbfDriver;
dbfDriver = "DRIVER={Microsoft dBase Driver (*.dbf)};FIL={dBase IV;};DefaultDir="+dbfDirPath;
dbfdb.setDatabaseName(dbfDriver);
dbfdb.open();
return dbfdb.isOpen();

выполняем такой запрос
Код:
QString queryText ="SELECT CAST(N_KMS AS INT) FROM TABLENAME"
query.exec(queryText);

получаем
Цитировать
[Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса (пропущен оператор) в выражении запроса 'CAST(N_KMS AS INT)'

при использовании
Код:
QString queryText ="SELECT CONVERT(INT, N_KMS) FROM TABLENAME"
query.exec(queryText);

получаем
Цитировать
[Microsoft][Драйвер ODBC dBase] Неопределенная функция 'CONVERT' в выражении.

Что делать? Где я не прав...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 16, 2009, 12:47 »

Это не сюда вопрос, ищи синтаксис SQL для ODBC. Сразу предупреждаю, он шизанутый по полной программе. А с dbf вообще тяжело работать. Если есть индексный файл, то подключится не сможешь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
hamlo
Гость
« Ответ #2 : Декабрь 16, 2009, 12:50 »

Не от хорошей жизни таким онанизмом занимаюсь - надо написать модуль для совместимости со старой фоксовой софтиной...
Поэтому, если кто может помочь - отпишитесь плз - весь гугле излазил уже... =(
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Декабрь 16, 2009, 14:30 »

>>SELECT CAST(N_KMS AS INT) FROM TABLENAME
честно говоря я тоже не понимаю этой записи, что ты пытаешься сделать?
Записан

Юра.
hamlo
Гость
« Ответ #4 : Декабрь 16, 2009, 14:48 »

мне надо тип numeric преобразовать к char (или int) в запросе. Как это сделать? А сделать это надобно, потому что слишком большое число в поле numeric, операция SELECT в тандартном MS ODBC драйвере возвращает значение как double в научном формате 0xбла-блаE+степень, преобразование которой назад в число происходит с потерей разрядов (функция QString::numeric).
« Последнее редактирование: Декабрь 16, 2009, 14:51 от hamlo » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Декабрь 16, 2009, 14:59 »

Я работаю с dbf постоянно. На ODBC давно забил из-за убогости реализации SQL. Я написал конвертер в PostgreSQL и с ним работаю. Можно легко переделать для SQLite.
Еще есть класс для прямой работы с dbf, но там SQL нету, т.е. фильтровать данные нужно будет вручную. Кстати, как раз проблему нумерика я обошел конвертом его в double при числе знаков после запятой больше 18.
Если интересно, могу сюда выложить решение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Декабрь 16, 2009, 15:10 »

CAST, если мне не изменяет память, используется в выражении WHERE, опреатора SELECT.

Теперь ещё непонятки:
>>мне надо тип numeric преобразовать к char (или int) в запросе.
>>преобразование которой назад в число происходит с потерей разрядов

первое требование (к INT), уничтожит всё что после запятой
тогда второе замечание совершенно не понятно.
Записан

Юра.
hamlo
Гость
« Ответ #7 : Декабрь 16, 2009, 15:12 »

Кстати, как раз проблему нумерика я обошел конвертом его в double при числе знаков после запятой больше 18.
Если интересно, могу сюда выложить решение.

Как раз то, о чем я говорю. Да интересно, SQL как раз не является обязательным. Выложите пожалуйста. С нетерпением жду.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Декабрь 16, 2009, 17:07 »

Отправил на мыло.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
arial
Гость
« Ответ #9 : Декабрь 16, 2009, 19:47 »

CAST(N_KMS AS INTEGER)
Записан
hamlo
Гость
« Ответ #10 : Декабрь 17, 2009, 11:38 »

Изучил софтину. Свои задачи реализовал. Понял во всей красе, что MS реализация ODBС гумно (начитавшись вдоволь об ограничениях в MS ODBC http://msdn.microsoft.com/en-us/library/ms710252%28VS.85%29.aspx и наплевательского отношения со стороны MS ко всем стандартам... в том числе и к своим - впечатление, что писать под Windows хуже, чем под разные ядра Linux...). Так как для работы есть необходимость реализации многих функции FoxPro, на основании полученного кода (моральная стимуляция =) ) буду пилить собственный НОРМАЛЬНЫЙ драйвер.

ЗЫ
Жалко мне становится разработчиков только под Windows =))
« Последнее редактирование: Декабрь 17, 2009, 11:43 от hamlo » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.