Обсуждение статьи "SQL и MQL5: Работаем с базой данных SQLite" - страница 4

 

Serhii Shevchuk:

Я понял, что от Вас сложно добиться помощи по делу.

как же вам помочь, если вы не рассказываете ничего как дошли до своей проблемы.

может вы на маке запускаете, или у вас папка с правами ридонли

я хз что у вас там может быть с файловой системой

С автомобильного форума:

ххх: треск в двигателе после замены маслосъёмных колпачков. Помогите разобраться в причинах и какие могут быть последствия

ууу: причин может быть множество , а последствия могут быть разными .

ххх: Спасибо



Почему - пока не знаю.

как узнаете, расскажите

 
Всю статью не читал, т.к. в этих библиотеках какой-то бардак присутствует. Хотя, кое-что я для себя взял т.к. это было первое что я увидел по этой тематике. Дальше понял, что нужно читать оф. документацию т.к. по такой статье не научишься ничего. По сути, скажу, что по поводу функций sqlite3_bind_хх информация не верная. Автор статьи вводить в заблуждение. Назначение этих функций совсем другое. Если автор статьи сам не изучил тему или не хотел об этом просто писать, лучше бы не писал. После того, как я в статье прочитал тот бред по этому функционалу, пришлось не один час всё это обдумать. Именно так. С СУБД я только начал неделю назад работать. Осваиваюсь. Поэтому не просто было понять. А когда понял для чего нужны функции sqlite3_bind_хх удивился.Не ожидал от автора статьи такого.. Раньше думал, что он профессионал.
 
Конкретно материал приложенный к статье не тестировал, однако у меня в плюсах есть похожая ошибка. Я не как не могу открыть / создать базу по переданному пути, она всегда создается либо в директории проекта, либо по пути указанному от директории проекта (/new folder/myDB.db)... 

Импортировал функции создания и закрытия базы и попробовал создать ее. В результате у меня база создалась в загрузках.
 
---:

ууу: причин может быть множество , а последствия могут быть разными .

Спасибо, помогло. Проблема решена, вопрос снят.

 
У меня очень интересная ситуация) буквально вчера все создавалось и работало (правда от чего то в папке "Загрузки") Но, за ночь файл базы перестал создаваться, однако сама база работает как надо для тестов пробовал создать базу размещенную в памяти sqlite3_open(":memory:") - база создается, данные загружаются / считываются. 

Возможно проблема с правами доступа, как считаете? как бы это в виндовс проверить знает кто? 
 
Andrey Azatskiy:
У меня очень интересная ситуация) буквально вчера все создавалось и работало (правда от чего то в папке "Загрузки") Но, за ночь файл базы перестал создаваться, однако сама база работает как надо для тестов пробовал создать базу размещенную в памяти sqlite3_open(":memory:") - база создается, данные загружаются / считываются. 

Возможно проблема с правами доступа, как считаете? как бы это в виндовс проверить знает кто? 

Это легко проверить, на самом деле. Попробуй для начала в "Мои документы" запихнуть БД. Если получится, значит дело не в правах. А вообще, смотря как ты это всё делал. Я лично недели 2 продолбался, пока создал себе всё что нужно для работы с SQLite3. Пришлось переводить документацию, т.к. на русском языке нет адекватной информации по этому поводу. Как и в этой статье много мусора и левака. Выше я привл один из моментов. Потом я забил и сам изучил вопрос.

У меня есть для этого такой wrapper:

//==================================================================================================================================================================================
// Basic wrapper for sqlite3_open_v2. ==============================================================================================================================================
int SQLite3 :: sqlite3_open(const string& filename, intptr_t& dbHandle, int flags) {
  uchar utf8_filename[];
  stringToUtf8(filename, utf8_filename);
  return sqlite3_open_v2(utf8_filename, dbHandle, flags, 0);
}

А вот и функция stringToUtf8:

//==================================================================================================================================================================================
// Convert a string to a utf-8 byte array. =========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // Строка, которую необходимо преобразовать в массив в кодировке utf-8
                  uchar& utf8[],                                 // Массив в кодировке utf-8, в который будет помещена преобразованная строка strToConvert
                  const bool untilTerminator = true) export {    // Количество символов, которые будут скопированы в массив utf8 и соот-но преобразованны в кодировку utf-8
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

Она у меня в отдельной библиотеке.

 
Viktar Dzemikhau:

Это легко проверить, на самом деле. Попробуй для начала в "Мои документы" запихнуть БД. Если получится, значит дело не в правах. А вообще, смотря как ты это всё делал. Я лично недели 2 продолбался, пока создал себе всё что нужно для работы с SQLite3. Пришлось переводить документацию, т.к. на русском языке нет адекватной информации по этому поводу. Как и в этой статье много мусора и левака. Выше я привл один из моментов. Потом я забил и сам изучил вопрос.

У меня есть для этого такой wrapper:

А вот и функция stringToUtf8:

Она у меня в отдельной библиотеке.

Да, у меня было 2 ошибки:
1 - кодировка (спасибо огромное за функцию, я уже не знал как перевести нормально в UTF -8) 
2 - права доступа. 


 
Andrey Azatskiy:

Да, у меня было 2 ошибки:
1 - кодировка (спасибо огромное за функцию, я уже не знал как перевести нормально в UTF -8) 
2 - права доступа. 


Да, пожалуйста. Сам вспоминаю, сколько продолбался с этим. С такими горе-статьями.. Вариант один есть. Берёшь читаешь оф. документацию, либо спрашиваешь.. Спрашивать было не у кого. Пришлось изучать самостоятельно. Тут суть в том, что если писать на С++ спросить есть у кого. А когда через прокладку писать и передавать в мкл, тут уже мало кто может помочь. Влом плюсовцам в этом вникать))

 

Кажется, я обнаружил утечку памяти:

В SQLite3Base.mqh строка 250

::sqlite3_finalize(stmt); // чистый

Должно быть:

::sqlite3_finalize(pstmt); // чистый
 
Viktar Dzemikhau:

Это легко проверить, на самом деле. Попробуй для начала в "Мои документы" запихнуть БД. Если получится, значит дело не в правах. А вообще, смотря как ты это всё делал. Я лично недели 2 продолбался, пока создал себе всё что нужно для работы с SQLite3. Пришлось переводить документацию, т.к. на русском языке нет адекватной информации по этому поводу. Как и в этой статье много мусора и левака. Выше я привл один из моментов. Потом я забил и сам изучил вопрос.

У меня есть для этого такой wrapper:

А вот и функция stringToUtf8:

Она у меня в отдельной библиотеке.

а я использую для преобразования к utf

int u2a(string txt,uchar &out[]){ return(StringToCharArray(txt,out))};