2016-03-25 25 views
0

DBブラウザを使用してdatabeseを作成しましたが、本当に楽しめますが、QMLで読み込む方法がわかりません。appdata/local/appname/qml/dbのテーブルで新しいdbを作成する方法を知っていますが、私のdbをリソースからロードする方法を知っている人は、私に教えてくれますか?私はそれを見つけた:QMLのリソースからsqliteデータベースをロードする方法はありますか?

var db = LocalStorage.openDatabaseSync("QQmlExampleDB", "1.0", "The Example QML SQL!", 1000000); 

、それが働いているが、私は私のデシベル

var db = LocalStorage.openDatabaseSync("food.db", "1.0", "The Example QML SQL!", 1000000); 

をロードしたい場合には、なぜ、働いていないのですか?

+0

実際に* C++とJavascriptの両方を使用していますか? –

+0

はい。 QML、C++、JS(この同じプロジェクトで) –

+0

あなたが書きたいコードは? –

答えて

0

私が知る限り、現在これはQMLで公開されていません。

独自の永続Dbをデプロイする場合は、sqlモジュール(.proファイルにQT += sqlを追加)で使用可能なC++ APIを使用することができます。 QtCreatorでの使用方法の例がいくつかあります。また、使用する前に必ず文書をお読みください。

リソースに追加すると、読み込み可能になります。
あなたはそれはあなたがすべき書き込み可能にする場合:あなたの.PROファイルで

  1. (プラットフォーム固有である)他のいくつかのメカニズムが付いている船を
  2. はにデシベルを移動するために、あなたのアプリケーションにコードを追加ここでは、プラットフォーム固有の書き込み可能な場所

は.PROファイルに含める内容の一例です:

georecords.files = sestosg.sqlite 
georecords.path = "./" 
macx { 
    georecords.path = "Contents/MacOS" 
} 
android { 
    georecords.path = "/assets" 
} 
QMAKE_BUNDLE_DATA += georecords 
INSTALLS += georecords 

次に、あなたのアプリにデータベースをコピーする時期と場所についての条件を管理する必要があります。以下の例のように。関連するヘッダーを必ずインポートしてください。これはOSX、Android、iOSに対応しています。他のプラットフォームには異なる要件があります。

QString dbName = "sestosg.sqlite"; 

// determine source path 
QString dbSourcePath = QSysInfo::productType() == "android" ? 
      "assets:/" + dbName : 
      QDir(QCoreApplication::applicationDirPath()).filePath(dbName); 
QFileInfo dbSourceInfo(dbSourcePath); 

// determine destination path 
QDir writableLocation(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)); 
if (!writableLocation.exists()) { 
    writableLocation.mkpath("."); 
} 
QString dbDestPath = writableLocation.filePath(dbName); 
QFileInfo dbDestInfo(dbDestPath); 

// determine if the source db has changed 
bool dbSourceUpdated = dbSourceInfo.lastModified() > dbDestInfo.lastModified(); 

// copy or replace db if needed 
if ((!dbDestInfo.exists()) || dbSourceUpdated) { 
    QFile::remove(dbDestPath); 
    if (!QFile::copy(dbSourcePath, dbDestPath)) { 
     qCritical() << "ERROR: source db " << dbSourcePath << " not copied to "<< dbDestPath; 
     return false; 
    } else { 
     qDebug() << "db successfully copied or replaced to " << dbDestPath; 
    } 

} else { 
    qDebug() << "dest db " << dbDestPath << " already exists"; 
} 

// make db writable 
QFile::setPermissions(dbDestPath, QFile::WriteOwner | QFile::ReadOwner); 
qDebug() << "current db: " << m_dbPath; 

最後に、あなたはおそらくモデルを経て、接続/ DBから読み出し/書き込みやQMLのインスタンスまたはコンポーネントとしてこれを公開するためのメソッドを持つクラスを作成する必要があります。

関連する問題