crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Выборка из базы данных
AD
  опции профиля:
сообщение 17.6.2010, 17:23
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Подскажите, пожалуйста, как я могу получить значени поля secrKey в следующем запросе:
Select cast(secretKey as binary(8)) as secrKey from DeviceList where serialNumber = '22021   '

Код следующий:
QString select_query("Select cast(secretKey as binary(8)) as secrKey from DeviceList where serialNumber = '%1'");
//////////////////////////////////
select_query = select_query.arg(serialNumber);
        bool rt = query.exec(select_query);
        int i = 0;
        while(query.next())
        {
            QString fs = query.value(i).toString();
            ++i;
        }

Я получаю в функции fs только строку secretKey, а вот как мне узнать secrKey? Заранее благодарю за оперативный ответ. В ассистенте не нашел как это сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.6.2010, 17:48
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Я не большой специалист в SQL, но попробуй следующий код:
QSqlQuery query;
query.prepare("select secretKey from DeviceList where serialNumber = :serNum");
query.bindValue( ":serNum", serialNumber );
if( query.exec() && query.next() )
    QString fs = query.value( 0 ).toString();


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 17.6.2010, 17:56
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(BRE @ 17.6.2010, 18:48) *
Я не большой специалист в SQL, но попробуй следующий код:
QSqlQuery query;
query.prepare("select secretKey from DeviceList where serialNumber = :serNum");
query.bindValue( ":serNum", serialNumber );
if( query.exec() && query.next() )
    QString fs = query.value( 0 ).toString();

Не. Ты меня не понял. Простой запрос выборки он выполняет на УРА. Мне необходимо взять результат выборки, находящийся в псевдониме secrKey.

Сообщение отредактировал AD - 17.6.2010, 17:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
inviZ
  опции профиля:
сообщение 17.6.2010, 18:34
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.6.2010
Пользователь №: 1781

Спасибо сказали: 4 раз(а)




Репутация:   1  


Хм, что-то немного непонятно, а что именно ты хочешь получить-то? Какой исходный тип у secrKey ?
Может нужно как-нибудь так, если ты все же хочешь получить 8 байт?
QByteArray bytes = query.value(0).toByteArray();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 17.6.2010, 18:43
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(inviZ @ 17.6.2010, 19:34) *
Хм, что-то немного непонятно, а что именно ты хочешь получить-то? Какой исходный тип у secrKey ?
Может нужно как-нибудь так, если ты все же хочешь получить 8 байт?
QByteArray bytes = query.value(0).toByteArray();

Да нет же. Sql-запрос, который приведен, это запрос, преобразующий строку, состоящую из черт-знает каких символов в их шестнадцатеричные коды. Мне надо взять эту строку кодов исходной строки, т.е. secrKey, а не саму строку.

Сообщение отредактировал AD - 17.6.2010, 18:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.6.2010, 18:47
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(inviZ @ 17.6.2010, 22:34) *
Какой исходный тип у secrKey ?
там же простое приведение типа к binary( 8 )
AD, по идее ты именно secrKey и получаешь и ничего больше. Поэтому i больше нуля должно приводить к аварийному завершению программы. Просто ты сразу возвращаемое значение к строке приводишь:
query.value(i).toString();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.6.2010, 18:49
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Какая БД используется?
Этот запрос в sqlbrowser дает нужный результат?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 17.6.2010, 18:54
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ладно, чтобы было понятно, вот результат выборки через СУБД и выборка программы.

Запрос
select cast(secretKey as binary(8)) as secretKey from dbo.DeviceList where secretKey <> '' and serialNumber = '22021   '

Результат СУБД SQL Server:
0x3C7C70A73D8098DF


программный код
bool rt = query.exec(select_query);
query.next();
QString str(query.value(0).toString());

Результат кода:
<|p§=Ђ�Я

Так вот мне нужен результат, подобный тому, что я получаю в СУБД.

Сообщение отредактировал AD - 17.6.2010, 18:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.6.2010, 19:04
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(AD @ 17.6.2010, 22:54) *
Так вот мне нужен результат, подобный тому, что я получаю в СУБД.
ты послушай проверь, как BRE советует
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
inviZ
  опции профиля:
сообщение 17.6.2010, 19:13
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.6.2010
Пользователь №: 1781

Спасибо сказали: 4 раз(а)




Репутация:   1  


bool rt = query.exec(select_query);
query.next();
QByteArray bytes = query.value(0).toByteArray();

QString str = "0x";
foreach(quint8 b, bytes)
{
    str.append(QString("%1").arg((uint)b, 2, 16, QChar('0')));
}


Пробуй.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.12.2020, 14:20