2010-11-23 17 views
5

Qt uygulamam için bir SQLite veritabanım var. Veritabanını bir kaynak olarak eklemenin mantıklı olacağını düşünüyorum.Qt uygulamasında katıştırılmış veritabanı

Uygulamam, yerleşik kaynağa derleme yapamıyorum.

connection.h

#ifndef CONNECTION_H 
#define CONNECTION_H 

#include <QMessageBox> 
#include <QSqlDatabase> 
#include <QSqlError> 
#include <QSqlQuery> 

static bool createConnection() 
{ 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName(":/data/ShippingData.db3"); 
    if (!db.open()) 
    { 
     QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text()); 
     return false; 
    } 
    return true; 
} 

#endif // CONNECTION_H 

assets.qrc

<RCC> 
    <qresource prefix="/data"> 
     <file>ShippingData.db3</file> 
    </qresource> 
</RCC> 

Benim sqlite veritabanı şu anda (Qt Creator itibaren) bu

app.pro 
    file.h 
    file.cpp 
    data/ShippingData.db3 

Yapı Sorunu gibidir

No rule to make target `../TimePlotter/Shipping.db3', needed by `debug/qrc_assets.cpp'. Stop. 

Kaynak düzenimi değiştirmeyi denedim çünkü derleyici, veritabanının bulunduğu veri/klasöre gitmediğinden. Seni işe yaramaz QRC dosyasında sqlite veritabanı gömme, sorunları derleme çözmek bile bu kaynak dosyası

<RCC> 
    <qresource> 
     <file>data/ShippingData.db3</file> 
    </qresource> 
</RCC> 

TimePlotter.pro

#------------------------------------------------- 
# 
# Project created by QtCreator 2010-11-21T03:18:17 
# 
#------------------------------------------------- 

QT  += core gui 

TARGET = TimePlotter 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    time.cpp \ 
    clients.cpp \ 
    printTime.cpp 

HEADERS += mainwindow.h \ 
    time.h \ 
    clients.h \ 
    printTime.h \ 
    connection.h 

FORMS += mainwindow.ui \ 
    time.ui \ 
    clients.ui \ 
    printTime.ui 

RESOURCES += \ 
    assets.qrc 
+0

ayrıca .pro dosyayı göndermek misiniz: veritabanı custom.db seçildi Böylece, böyle bir şey yapabilir? Anlamaya yardımcı olur. Teşekkürler. –

+0

Ayrıca, proje ağacınızda varlıklar.qrc dosyanız nerede bulunur? –

+0

.pro dosyasını ekledim, yardım için teşekkürler –

cevap

8

ile tam aynı yapı sorunu olsun. Bakınız örn. Qt Centre Forum veya Qt-interest mailing list’daki tartışma. En iyi çözüm, qrc dosyasına bir veritabanı dökümü eklemek, bir bellek sqlite db oluşturmak ve veritabanındaki SQL deyimlerinden veritabanını yeniden oluşturmak için IMHO olacaktır.

1

Ben en azından QMAKE_BUNDLE_DATA parametre çalışır Mac OSX, bu nasıl yapılacağını biliyorum. Windows için this answer'a bakın.

  1. Proje dizininizde "data" adlı bir dizin oluşturun.
  2. Veritabanı dosyanızı buraya yerleştirin. senin .pro dosyasında
  3. bu bölümü ekleyin: Eğer uygulama yeniden Şimdi, bu İçindekiler/MacOS/veri klasöründe yer alacak mac { Resources.files = data Resources.path = Contents/MacOS QMAKE_BUNDLE_DATA += Resources }

  4. .

    db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db")); 
    
İlgili konular