crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 27.4.2024, 19:41