Почему Metakit не сохраняет строковые значения после фиксации?

Я разрабатываю встроенное приложение для Raspberry Pi 3, которое хранит свои данные в базе данных Metakit 2.4.9.7. Одна из таблиц состоит из двух столбцов (типы данных: double + string). Двойные значения сохраняются без каких-либо проблем, но строковые значения, по-видимому, отбрасываются, когда я вызываю метод Commit () в базе данных. Смотрите этот код:

#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 (строка), тогда как второй цикл, выполняемый сразу после вызова Commit (), даст только содержимое # 1, как если бы № 2 никогда не был бы заселен.

Что здесь не так? Любые полезные советы приветствуются.

0

Решение

После просмотра группы Metakit Google я получил подсказку сам. Именно эта строка кода, в частности, содержимое в скобках в строке определения, создавало проблемы:

connection_handler.GetAs ("tracks [degrees:D, compass:S]");

В марте 2008 года уже была жалоба пользователя на пробел после двоеточия в определении столбца, вызывающий искажение данных, но в моем случае это был пробел после запятой, разделяющей определения столбца. Там не было никаких намеков на это в документах API! После удаления пустого пространства и восстановления базы данных все неожиданно заработало. 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector