Я пытаюсь подключить в памяти БД к существующему соединению БД через 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, все работает просто отлично
Спасибо за ваши предложения, решение:
во-первых: установите флаг 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);