文章 "SQL 与 MQL5: 与 SQLite 数据库集成" - 页 4

 

Serhii Shevchuk:

我知道你很难得到帮助。

如果你不告诉我问题是怎么来的,我怎么帮你?

也许你用的是苹果电脑,或者你的文件夹有只读权限。

我不知道你的文件系统是怎样的。

来自汽车论坛:

XXX:更换机油盖后发动机噼啪作响。帮助了解原因和可能造成的后果

uuu:原因可能很多,但后果可能不同。

xxx: 谢谢。



我还不知道原因。

找到原因后,请告诉我。

 
我没有读完整篇文章,因为这些图书馆真是一团糟。尽管如此,我还是从中汲取了一些东西,因为这是我看到的关于这个主题的第一篇文章。然后我意识到,我需要阅读官方文档,因为你无法从这样一篇文章中学到任何东西。事实上,我要说的是,关于sqlite3_bind_xxx 函数的信息并不正确。文章作者在误导读者。这些函数的目的完全不同。如果文章作者自己没有研究过这个主题,或者不想只是写写这个主题,那么最好不要写。当我读完文章中关于该功能的废话后,我不得不思考了一个多小时。没错。我一周前才开始使用 DBMS。我正在逐渐掌握它。这就是我不容易理解的原因。当我意识到sqlite3_bind_xxx 函数的作用时,我感到非常惊讶。 我没想到这篇文章的作者会做这样的事情。我一直以为他是个专业人士。
 
我还没有测试文章所附的材料,但我在 Pluses 中遇到了类似的错误。我无法在传递的路径上打开/创建数据库,它总是在项目目录下创建,或者在项目目录指定的路径上创建(/new folder/myDB.db)......

导入了 创建和关闭数据库的功能,并尝试创建它。结果,我在下载中创建了数据库。
 
---:

原因可能很多,后果也可能很多。

谢谢,我明白了。问题解决了,问题消除了。

 
我有一个非常有趣的情况)就在昨天,一切都被创建和工作(虽然从 "下载 "文件夹中的东西),但一夜之间,基地文件停止创建,但基地本身的工作,因为它应该进行测试,试图创建一个基地放置在内存中sqlite3_open(":memory:"") - 基地创建,数据加载/读取。

也许是访问权限的问题,你有什么感想?如何检查这在 Windows 知道谁?
 
Andrey Azatskiy:
我有一个非常有趣的情况)就在昨天,一切都被创建和工作(虽然从 "下载 "文件夹中的东西),但一夜之间,基地文件停止创建,但基地本身的工作,因为它应该进行测试,试图创建一个基地放在内存中的 sqlite3_open(":内存:"") - 基地创建,数据加载/读取。 也许是访问权限的问题,你有什么感想?如何检查这在 Windows 知道谁?

其实很容易检查。首先尝试将数据库放在 "我的文档 "中。如果能用,那就不是权限问题。但总的来说,这取决于你是怎么做的。我个人花了两周时间,直到创建了使用 SQLite3 所需的一切。我不得不翻译文档,因为在俄语中没有足够的相关信息。就像这篇文章一样,里面有很多垃圾和废话。以上就是我的一个经历。然后我停下来,自己研究了这个问题。

我有这样一个封装

//==================================================================================================================================================================================
// 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 函数:

//==================================================================================================================================================================================
// 将字符串转换为 utf-8 字节数组。=========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // 以 utf-8 编码将字符串转换为数组
                  uchar& utf8[],                                 // 将转换后的字符串 strToConvert 放在其中的 utf-8 编码数组
                  const bool untilTerminator = true) export {    // 将被复制到 utf8 数组并转换为 utf-8 编码的字符数。
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

我把它放在一个单独的库中。

 
Viktar Dzemikhau:

其实很容易检查。首先试着把数据库放到 "我的文档 "中。如果能用,那就不是权限问题了。但总的来说,这取决于你是怎么做的。我个人花了两周时间,直到创建了使用 SQLite3 所需的一切。我不得不翻译文档,因为在俄语中没有足够的相关信息。在这篇文章中,有很多垃圾信息。以上是我遇到的其中一个问题。后来我放弃了,自己研究这个问题。

我有一个包装

这里是stringToUtf8 函数:

我把它放在一个单独的库中。

是的,我遇到了 2 个错误:
1 - 编码(非常感谢这个函数,我不知道如何正常转换为 UTF -8)
2 - 权限。


 
Andrey Azatskiy:

是的,我有 2 个错误:
1 - 编码(非常感谢你的功能,我不知道如何正常翻译成 UTF -8)
2 - 权限。


是的,不客气。我还记得自己在这个问题上有多纠结。文章写得如此糟糕。有一个选择。要么阅读官方文档,要么去问别人。没有人可以问。我只能自己研究。关键是,如果你用 C++ 编写,就会有人来问你。但当你通过垫圈编写并将其传输到 µl 时,能帮你的人就很少了。这对 Plus 用户来说太难了。)

 

我想我发现了内存泄漏:

SQLite3Base.mqh 第 250 行中

::sqlite3_finalize(stmt); // 清洁

应该是

::sqlite3_finalize(pstmt); // 清洁
 
Viktar Dzemikhau:

其实很容易检查。首先试着把数据库放到 "我的文档 "中。如果能用,那就不是权限问题了。但总的来说,这取决于你是怎么做的。我个人花了两周时间,直到创建了使用 SQLite3 所需的一切。我不得不翻译文档,因为在俄语中没有足够的相关信息。在这篇文章中,有很多垃圾信息。以上是我遇到的其中一个问题。后来我放弃了,自己研究这个问题。

我有一个包装

这里是stringToUtf8 函数:

我把它放在一个单独的库中。

我用它来转换为 utf

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