Witam.
Pomyślałem sobie, że zrobię program serwisowy na własne potrzeby w Qt.
Wszystko szło idealnie aż do momentu gdy z głównego okna otwieram okno dialogowe i chcę by oba okna miały połączenie z bazą danych.
Połączenie z okna głównego wygląda tak
db = QSqlDatabase::addDatabase("QSQLITE","Serwis");
db.setDatabaseName("c:\\serwis\\baza.sqlite");
if(db.open()){
komunikaty->setText("Połączono z bazą danych");
}
Połączenie z okna dialogowego wygląda tak
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE","Nowe");
db.setDatabaseName("c:\\serwis\\baza.sqlite");
if(db.open()){
lInfo->setText("Połączenie OK");
}
IF w obu przypadkach zwraca prawdę, ale gdy chcę się połączyć w oknie dialogowym z bazą aby odczytać dane to dostaję
QSqlQuery::prepare: database not open
Ale właśnie db.open() zwraca true
Funkcja która nie działa wygląda tak
void Nowe::uzupelnijInputy(){
QSqlQuery query(db);
query.prepare("select * from [w.kategoria]");
query.exec();
while (query.next()) {
iKategoria->addItem(query.value(0).toString());
}
}
A funkcja która działa, tak
void Serwis::pobierzZleceniaStart(){
QSqlQuery query(db);
QString q;
q=listaStart("",0,0,0);
query.prepare(q);
query.exec();
int liczbaWierszy=0;
QVector <QString> r[9];
QStringList v;
while (query.next()) {
liczbaWierszy++;
v<<(query.value(0).toString());
for(int i=1;i<9;i++){
r[i].append(query.value(i).toString());
}
}
tabelaZlecen->setRowCount(liczbaWierszy);
tabelaZlecen->setVerticalHeaderLabels(v);
for(int i=0;i<r[1].size();i++){
for(int j=1;j<9;j++){
tabelaZlecen->setItem(i,j-1,new QTableWidgetItem(r[j].at(i)));
}
}
}
Okno dialogowe jest dzieckiem okna głównego. Problem jest w kilku połączeniach z bazą w obrębie jednego programu. I utknąłem.
EDYCJA
Problem rozwiązany. W drugim połączeniu jest
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE","Nowe");
A powinno być
db=QSqlDatabase::addDatabase("QSQLITE","Nowe");
I już wszystko działa. Zamykam.