Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выборка из базы данных
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
AD
Подскажите, пожалуйста, как я могу получить значени поля 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
Я не большой специалист в 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
Цитата(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.
inviZ
Хм, что-то немного непонятно, а что именно ты хочешь получить-то? Какой исходный тип у secrKey ?
Может нужно как-нибудь так, если ты все же хочешь получить 8 байт?
QByteArray bytes = query.value(0).toByteArray();
AD
Цитата(inviZ @ 17.6.2010, 19:34) *
Хм, что-то немного непонятно, а что именно ты хочешь получить-то? Какой исходный тип у secrKey ?
Может нужно как-нибудь так, если ты все же хочешь получить 8 байт?
QByteArray bytes = query.value(0).toByteArray();

Да нет же. Sql-запрос, который приведен, это запрос, преобразующий строку, состоящую из черт-знает каких символов в их шестнадцатеричные коды. Мне надо взять эту строку кодов исходной строки, т.е. secrKey, а не саму строку.
Litkevich Yuriy
Цитата(inviZ @ 17.6.2010, 22:34) *
Какой исходный тип у secrKey ?
там же простое приведение типа к binary( 8 )
AD, по идее ты именно secrKey и получаешь и ничего больше. Поэтому i больше нуля должно приводить к аварийному завершению программы. Просто ты сразу возвращаемое значение к строке приводишь:
query.value(i).toString();
BRE
Какая БД используется?
Этот запрос в sqlbrowser дает нужный результат?
AD
Ладно, чтобы было понятно, вот результат выборки через СУБД и выборка программы.

Запрос
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§=Ђ�Я

Так вот мне нужен результат, подобный тому, что я получаю в СУБД.
Litkevich Yuriy
Цитата(AD @ 17.6.2010, 22:54) *
Так вот мне нужен результат, подобный тому, что я получаю в СУБД.
ты послушай проверь, как BRE советует
inviZ
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')));
}


Пробуй.
AD
Цитата(inviZ @ 17.6.2010, 20:13) *
Пробуй.

Ты гений. СПАСИБО! :)
inviZ
Смысл в том, что SQL Server возвращает на твой запрос просто 8 байт данных. Естественно, если ты попытаешься представить их в виде строки, у тебя получится белиберда.

Цитата
<|p§=Ђ�Я

Например, '<' здесь это 0x3C, '|' - 0x7C, ну и так далее.
И клиент, который выдает тебе "0x3C7C70A73D8098DF", тоже аналогичным образом форматирует эти байты в удобном для тебя виде.
AD
Цитата(inviZ @ 17.6.2010, 20:26) *
Смысл в том, что SQL Server
Цитата
<|p§=Ђ�Я

Например, '<' здесь это 0x3C, '|' - 0x7C, ну и так далее.
И клиент, который выдает тебе "0x3C7C70A73D8098DF", тоже аналогичным образом форматирует эти байты в удобном для тебя виде.

Фишка не в этом! :) Он и должен выдавать билибердовую строку, это ведь секретный ключ! ;) Дело в том, что в зависимости от кодировки, шестнадцатеричный код некоторых символов отличается, что есть очень плохо. А вот сейчас эти отличия нивелируются.
BRE
Так может проще использовать:
QByteArray QByteArray::toHex () const
AD
Цитата(BRE @ 17.6.2010, 20:41) *
Так может проще использовать:
QByteArray QByteArray::toHex () const

Да! :) Я уже так и сделал! :)
inviZ
Цитата(BRE @ 18.6.2010, 3:41) *
Так может проще использовать:
QByteArray QByteArray::toHex () const


Ха, точно, тупица я, не знал про этот метод)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2021 IPS, Inc.