crossplatform.ru

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


  Ответ в Проблема с запросом SELECT.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 7.6.2010, 19:03
 
Цитата(MoPDoBoPoT @ 7.6.2010, 22:31) *
- Исключается возможность SQL-инъекций
это актуально только для случая, когда запрос формируется из пользовательского ввода, да и то не всюду. А в системах с произвольным открытым доступом
MoPDoBoPoT Дата 7.6.2010, 18:31
 
Цитата(bayah @ 7.6.2010, 16:59) *
query.exec("SELECT CODE_D FROM DIST WHERE NAME_D = '"+name+"'");

Лучше использовать QSqlQuery::prepare() + QSqlQuery::bindValue() + QSqlQuery::exec(), чем QString::arg() + QSqlQuery::exec().
При использовании подготовленных запросов:
- Исключается возможность SQL-инъекций
- Оптимизицация по скорости выполнения запроса на стороне СУБД (в случае, когда используются однообразные запросы - меняются только значения в условии WHERE), но это когда СУБД и драйвер поддерживают
bayah Дата 7.6.2010, 15:59
  Все ясно, разобрались.
Проблема была в том что строка запроса должна была выглядеть так:
SELECT CODE_D FROM DIST WHERE NAME_D = 'beta'

Для этого в QT это должно было выглядеть так:

query.exec("SELECT CODE_D FROM DIST WHERE NAME_D = '"+name+"'");

Всем спасибо за внимание._)
kibsoft Дата 7.6.2010, 15:51
 
Цитата
query.exec("SELECT NAME_D FROM DIST WHERE CODE_D = "+id+";");
query.next();
QString a = query.value(0).toString();

query.next() попробуй заменить на query.first().
bayah Дата 7.6.2010, 15:13
  Возможно я сошел с ума, но...

Есть таблица.



    QSqlQuery query;
    query.exec("CREATE TABLE DIST ("
               "CODE_D INTEGER PRIMARY KEY NOT NULL, "
               "NAME_D VARCHAR(20) UNIQUE NOT NULL"
               ");");


Таблица, к примеру, заполнена значениями:
CODE_D NAME_D

1 alpha
2 beta
3 gama

Дальше я делаю запрос:

        QString id = "1";
        QSqlQuery query;
        query.exec("SELECT NAME_D FROM DIST WHERE CODE_D = "+id+";");
        query.next();
        QString a = query.value(0).toString();


Если же пытаюсь сделать наоборот - по имени получить код, ничего не выходит:

        QString name = "beta";
        QSqlQuery query;
        query.exec("SELECT CODE_D FROM DIST WHERE NAME_D = "+name+";");
        query.next();
        QString a = query.value(0).toString();

query.next() возвращает false. Я что-то не понимаю видимо?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 5:41