私は、そのデータをMetakit 2.4.9.7データベースに保存するRaspberry Pi 3用の組み込みアプリケーションを開発しています。テーブルの1つは2つの列(データ型:double + string)で構成されています。 double値は問題なく保存されますが、データベースでCommit()メソッドを呼び出すと、文字列値は明白に破棄されます。 (第2ループの実行に対しちょうどコミットした後、列#1(ダブル)及び#2(文字列):コミット後にMetakitが文字列値を格納しないのはなぜですか?
#include <iostream>
#include <map>
#include <mk4.h>
#include "database.h"
using namespace std;
database::database (string file_name)
: connection_handler (file_name.c_str(), 1),
table_tracks (connection_handler.GetAs ("tracks [degrees:D, compass:S]"))
{
cout << "Opening database " << file_name << "." << endl;
if (table_tracks.GetSize() == 0) {
c4_DoubleProp degrees ("degrees");
c4_StringProp compass ("compass");
c4_Row track;
int i;
string compass_points [17] = {"N", "NNE", "NE", "ENE",
"E", "ESE", "SE", "SSE",
"S", "SSW", "SW", "WSW",
"W", "WNW", "NW", "NNW",
"N"};
cout << "Database is vanilla. Setting it up now." << endl;
for (i = 0; i <= 16; i++) {
degrees (track) = 22.5 * (double) i;
compass (track) = (compass_points [i]).c_str();
table_tracks.Add (track);
}
for (i = 0; i < table_tracks.GetSize(); i++) {
cout << (double) degrees (table_tracks [i]) << " " << (string) compass (table_tracks [i]) << endl;
}
connection_handler.Commit();
for (i = 0; i < table_tracks.GetSize(); i++) {
cout << (double) degrees (table_tracks [i]) << " " << (string) compass (table_tracks [i]) << endl;
}
}
}
最初のループは私の以前のデータで満たされたテーブルの完全な内容を与える:このコードを参照してください。 )呼び出しは#1の内容を与えるだけで、#2が一度も入力されていないかのようになります。
ここで何が間違っていますか?有用なヒントがあれば幸いです。