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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QSqlCursor и связанные таблицы. QT 3.3.6  (Прочитано 14574 раз)
Alex03
Гость
« Ответ #15 : Сентябрь 28, 2006, 05:58 »

Не знаю как MySQL но некоторые СУБД поддерживают такой вложенный запрос:

select a, b, (select name from tab2 where tab2.id=tab1.ref_id) as c, d from tab1 where ...
Може поможет.

В отличаи от джойнов этот внутренний select выполняется на этапе фетча со всеми + и -
т.е.
- Ошибка может вылезти уже во время фетча.
+ Сам (главный) запрос выполняется быстро.
Записан
bigirbis
Гость
« Ответ #16 : Сентябрь 28, 2006, 08:42 »

Отсутствие подобной функциональности мне пока попалось только в Firebird
Записан
Вячеслав
Гость
« Ответ #17 : Сентябрь 28, 2006, 14:02 »

Цитата: "bigirbis"
Отсутствие подобной функциональности мне пока попалось только в Firebird

Мдя ? Месье давно его(птица) видел ? Не надо клеветать - есть оно там .
Записан
bigirbis
Гость
« Ответ #18 : Сентябрь 28, 2006, 14:27 »

В 1.5 не попадалось
Записан
Вячеслав
Гость
« Ответ #19 : Сентябрь 28, 2006, 19:30 »

Цитата: "bigirbis"
В 1.5 не попадалось

ну уже 2 есть Подмигивающий собственно и в 1.5.3 оно кажись было(но могу ошибаться)
Записан
TukiNov
Гость
« Ответ #20 : Сентябрь 29, 2006, 00:32 »

Цитата: "Вячеслав"
Цитата: "bigirbis"
В 1.5 не попадалось

ну уже 2 есть Подмигивающий собственно и в 1.5.3 оно кажись было(но могу ошибаться)

мне от этого не легче

добавлено спустя 4 часа 25 минут:

 О великий google  Веселый  Веселый  как я был слеп  :oops:  :oops:
всего навсего :
в заголовочном файле :
Код:

class InvoiceItemCursor : public QSqlCursor
    {
        public:
         InvoiceItemCursor();
       protected:
            QVariant calculateField( const QString & name );
    };
class Form1 : public QMainWindow
{
    Q_OBJECT

public:
    Form1( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
    ~Form1();
    [b][u]InvoiceItemCursor * invoiceItemCursor;[/u][/b]
protected:

protected slots:
    virtual void languageChange();

private:
    void init();

};

в cpp :
Код:

InvoiceItemCursor::InvoiceItemCursor() :
    QSqlCursor( "db_termin" )
{
    QSqlFieldInfo productName( "razdel_name", QVariant::String );
    append( productName );
    setCalculated( productName.name(), TRUE );
}


QVariant InvoiceItemCursor::calculateField( const QString & name )
{
    if ( name == "razdel_name" ) {

QSqlQuery query( "SELECT R_NAME FROM db_razdel WHERE R_ID=" +
    field( "RAZDEL" )->value().toString() );
if ( query.next() ){
   return query.value( 0 );
}
        if(!query.isActive()){
query.lastError().showMessage();}
    }

    return QVariant( QString::null );
}

и присваеваем таблице курсор :
Код:

invoiceItemCursor = new InvoiceItemCursor;
terminTable->setSqlCursor(invoiceItemCursor);
Записан
bigirbis
Гость
« Ответ #21 : Сентябрь 29, 2006, 09:38 »

Принципиально от твоего прошлого варианта этот отличается только тем, что создается указатель на курсор (в прошлом ты в качестве аргумента передавал ссылку на курсор - по выходе из области видимости он подыхал - распространенная ошибка).
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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