База данных памяти Sqlite c ++ ATTACH

Я пытаюсь подключить в памяти БД к существующему соединению БД через API C ++, например:

void InMemoryDbtest(){
sqlite3 *db;
int rc = sqlite3_open("E:/VS_workspace/ConsoleSQLITE/Debug/TPCH.sqlite", &db);
if (rc){
cout << "nie moge otworzyc bazy danych ";}
else{
cout << "otwarcie bazy ---- udalo sie\n";}
char *err;

sqlite3_exec(db, "ATTACH DATABASE 'file::memory:?cache=shared' as pom",0,0,&err);

cout << "error" << err << endl;
string q = "create table pom.bla as select n_name from NATION ";
sqlite3_exec(db, q.c_str(), 0, 0, &err);
cout << "error" << err << endl;
}

Я получаю 2 сообщения об ошибках

невозможно открыть базу данных: файл: память
а также
неизвестная база данных

Есть идеи? Когда я пытаюсь присоединить БД в консоли sqlite, все работает просто отлично

1

Решение

Спасибо за ваши предложения, решение:

во-первых: установите флаг SQLITE_USE_URI в sqlite3.c на 1 вместо 0 (просто с помощью флага SQLITE_OPEN_URI с sqlite3_open_v2 () недостаточно)

#ifndef SQLITE_USE_URI
# define  SQLITE_USE_URI 1
#endif

тогда вы можете использовать URI со всеми функциями sqlite3.

Правильный URI для Windows это:

int rc2 = sqlite3_open("file:///E:/VS_workspace/ConsoleSQLITE/Debug/TPCH.sqlite", &db);
0

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


По вопросам рекламы [email protected]