Russian Qt Forum

Qt => Базы данных => Тема начата: Maz от Июнь 18, 2007, 12:31



Название: QSqlRelationalTableModel + LEFT JOIN
Отправлено: Maz от Июнь 18, 2007, 12:31
У меня такая ситуация:
Нужно выполнить запрос с LEFT JOIN. В получиченных данных есть вторичные ключи. Их и хотелось бы "правильно" отображать, т.е. чтобы значения брались со справочников. Каким образом это можно сделать подскажите пожалуйста.


Название: QSqlRelationalTableModel + LEFT JOIN
Отправлено: Kainit от Июнь 18, 2007, 14:25
Я немного не в тему, но скажите мне, почему у меня не получается вытащить форены из QSqlRelationalTableModel?

Подключаюсь к базе (MySQL), всё хорошо, всё нормально. Делаю

QSqlRelationalTableModel *model = new QSqlRelationalTableModel ( this, db);
model->setTable("testTable");

for(int i=0; i<model->columnCount(); i++)
{
   editor->append((model->headerData(i,Qt::Horizontal)).toString());

   if( !model->relation(i).isValid () )
      editor->append("INVALID");
   else
   {
      editor->append(model->relation(i).displayColumn());
      editor->append(model->relation(i).indexColumn());
      editor->append(model->relation(i).tableName());
   }
}

И несмотря на то что в таблице есть 2 форена, я всё равно по всем колонка получают INVALID...
Или QSqlRelationalTableModel не берёт форены из базы, а работает только с теми что я назначил? Но это было бы странно.
Есть у кого-нибудь такая же проблема?


Название: QSqlRelationalTableModel + LEFT JOIN
Отправлено: SABROG от Июнь 18, 2007, 14:44
Kainit: а где ты вызываешь model->setRelation() ?


Название: QSqlRelationalTableModel + LEFT JOIN
Отправлено: Kainit от Июнь 18, 2007, 16:30
Цитата: "SABROG"
Kainit: а где ты вызываешь model->setRelation() ?

Я нигде не вызываю!
У меня на MySQL база в которой все связи проставлены. Foreign Keys, называются. И по идее, используя MySQL C API, эти связи очень легко получить... А Qt-шный драйвер на MySQL именно этим API и пользуется. И я, честно говоря, твёрдо уверен был что связи должны были быть восстановлены...

Именно поэтому я и спросил
Цитировать
"Или QSqlRelationalTableModel не берёт форены из базы, а работает только с теми что я назначил?"

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


Название: QSqlRelationalTableModel + LEFT JOIN
Отправлено: SABROG от Июнь 18, 2007, 16:38
Посмотри исходники Qt и поклянись самому себе :)


Название: QSqlRelationalTableModel + LEFT JOIN
Отправлено: Kainit от Июнь 18, 2007, 16:46
Посмотрел... Похоже что так и есть, но это же неправильно...

Вместо того чтобы всё произошло само собой, я должен какими-то сторонними средствами получить все связи, потом создать QSqlRelationalTableModel и проставить все связи вручную.....

А как я могу получить связи, если QSqlDatabase не предоставляет таких механизмов?!

Кто-нибудь, скажите, как получить информацию о Foreign Keys в Qt ?