Obiekt klasy QSqlDatabase otwiera się tylko raz - wywal database.open() zewsząd oprócz metody open_database().
EDIT:
Odgrzebałem staaareńki (z 2009) projekt w którym używałem bazy danych SQLite w qt. Stworzyłem do tego następującą klasę:
class databaseAcessor : public QObject
{
static databaseAcessor *instance;
QSqlDatabase base;
databaseAcessor(QObject *parent=0);
public:
QSqlQuery query;
static databaseAcessor* getInstance(void);
};
#include "databaseacessor.h"
databaseAcessor::databaseAcessor(QObject *parent):QObject(parent)
{
QSqlDatabase::addDatabase("QSQLITE");
base=QSqlDatabase::database();
//in the future this path shoud be taken from options-in case of other cardgames support
base.setDatabaseName("Databases/Magic/cards.db");
if(!base.open())
{
QMessageBox::warning(NULL,tr("Error during opening cards' database!"),base.lastError().text(),QMessageBox::Ok);
exit(0);
}
QSqlQuery q(base);
query=q;
}
databaseAcessor* databaseAcessor::getInstance(void)
{
if(!instance) instance=new databaseAcessor();
return instance;
}
Zwróć Bracie @Xezolpl uwagę na to co dzieje się po addDatabase(), powinno naprowadzić cię to na rozwiązanie.
No tak, zrobiłem tak jak ty masz ale to samo wychodzi
QSqlDatabase::addDatabase("QSQLITE");
database = QSqlDatabase::database();
może ten path źle zapisuje?
u mnie jest tak:
database.setDatabaseName("C:/Users/Mateusz/Desktop/SupplyManager v2/SupplyManagerV2/supplymanager.db");
u ciebie jest wgl bez dysku itp. czyli po prostu dajesz ścieżke do obecnej czyli jak tam masz ten program w jakimś folderze to ścieżka prowadzi do folderu w tym folderze?
u mnie ten plik jest w tym samym miejscu co cpp i headery, czyli lecz nawet zmieniając nazwę ścieżki na samo supplymanager.db nadal nie działa. Nie mam pojęcia o co chodzi
- Może źle napisany jest plik .db ale raczej nie bo robiłem go przez DB browser i działał.
- Czytałem że jakichś sterowników może nie być i przez to sie ludziom nie łączyło ale pobrałem te najnowsze sterowniki, wrzuciłem serio do każdego folderu gdzie były .dll i nadal nic. Podpięte jest QT += sql i jest w headerze podpięte i QSql i QSqlDatabase
///EDIT
Ok znalazłem problem, chyba query wywoływane było w headerze bez jeszcze włączonej bazy danych, zmieniłem to. lecz model nadal nie zawiera treści, jedyne co się nie pokazuje już to komunikat że Database not opened
///EDIT 2
Dobra, nie ważne naszło mnie natchnienie - przeanalizowałem czyjś program z internetu z taką bazą i za wcześno wywołuję query - teraz działa. Mimo wszystko dziękuję za pomoc :)
Tylko mam pytanie czy ten select() wgl coś daje?
QSqlQuery *query = new QSqlQuery(database);
query->exec("SELECT * FROM products");
MySqlTableModel *model = new MySqlTableModel(this,database);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->mySetQuery(*query);
ui->tableView->setModel(model);
model->select();