記事"SQL と MQL5:SQLite データベースとの連携"についてのディスカッション - ページ 4

 

Serhii Shevchuk:

あなたは助けを求めるのが難しい人だと思う。

もし、あなたがどのようにしてこの問題にたどり着いたのかを教えてくれなければ、どうすればいいのでしょう。

多分、あなたはマックで実行されているか、読み取り専用パーミッションのフォルダを持っています。

あなたのファイルシステムがどうなっているのかは知らない。

車のフォーラムから

xxx:オイルキャップを交換した後、エンジンがパチパチする。原因とその結果について教えてください。

uuu:原因はたくさんありますが、結果はさまざまです。

xxx:ありがとう。



原因はまだわかりません。

わかったら教えてください。

 
この手の図書館はゴチャゴチャしているので、記事を全部読んだわけではない。とはいえ、このテーマで最初に目にしたものだったので、いくつか自分のために読んでみた。そして、このような記事からは何も学べないので、公式ドキュメントを読む必要があることに気づいた。実際、sqlite3_bind_xxx 関数に関する情報は正しくない。この記事の著者は誤解を招いています。これらの関数の目的はまったく異なります。記事の著者がこのトピックについて自分で勉強していないのなら、あるいはただ書きたくないのなら、書かない方がよいでしょう。この機能についてのくだらない記事を読んだ後、私は1時間以上考え込んでしまった。その通りだ。週間前にDBMSを使い始めたばかりだ。コツをつかみつつある。だからなかなか理解できなかった。そして、sqlite3_bind_xxx 関数が何のためにあるのかを理解したとき、私は驚いた。 この記事の著者がそんなことをするとは思わなかった。彼はプロだと思っていたのに。
 
記事に添付されている資料をテストしたわけではありませんが、プラスで同じようなエラーがあります。渡されたパスでベースを開く/作成することができません。常にプロジェクトディレクトリか、プロジェクトディレクトリから指定されたパス(/new folder/myDB.db)に作成されます...

ベースの作成とクローズの関数をインポート し、作成を試みました。その結果、loadsにデータベースが作成されました。
 
---:

多くの原因があり、多くの結果があり得る。

ありがとう。問題は解決した。

 
私は非常に興味深い状況を持っている)ちょうど昨日、すべてが作成され、働いていた(しかし、 "ダウンロード "フォルダ内の何かから)しかし、一晩ベースファイルが作成されなくなったが、ベース自体は、テストのためにそれがメモリ上に配置されたベースを作成しようとしたように動作しますsqlite3_open(":memory:"") - ベースは作成され、データがロードされ/読み込まれます。

おそらくアクセス権の問題、あなたはどう思いますか? Windowsでこれをチェックする方法は、誰を知っていますか?
 
Andrey Azatskiy:
私は非常に興味深い状況を持っている)ちょうど昨日、すべてが作成され、働いていた(しかし、 "ダウンロード "フォルダ内の何かから)しかし、一晩ベースファイルが作成されなくなったが、ベース自体は、テストのためにそれがメモリ上に配置されたベースを作成しようとしたように動作します sqlite3_open(":memory:"") - ベースが作成され、データがロードされ/読み込まれます。 おそらくアクセス権の問題、あなたはどう思いますか? Windowsでこれをチェックする方法は、誰を知っていますか?

確認するのは簡単です。手始めにデータベースを「マイドキュメント」に入れてみてください。それで問題なければ、アクセス権の問題ではありません。しかし、一般的には、あなたがどうやったかによります。私自身は、SQLite3で作業する のに必要なものをすべて作るまで2週間かかりました。ロシア語にはこのテーマに関する適切な情報がないので、ドキュメントを翻訳しなければなりませんでした。この記事のように、多くのゴミやレバクがあります。上記のように、私はそのうちのひとつに惹かれた。それから私は立ち止まり、自分自身でこの問題を研究した。

私はそのようなラッパーを持って いる:

//==================================================================================================================================================================================
// 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で作業するために必要なものをすべて作るまで2週間かかりました。ロシア語にはこのテーマに関する適切な情報がないので、ドキュメントを翻訳しなければなりませんでした。この記事のように、ゴミやレバクがたくさんある。上記のように、私はそのうちのひとつに惹かれた。その後、私はあきらめて自分でこの問題を勉強しました。

私はこのためのラッパーを持って いる:

そしてこれがstringToUtf8 関数だ:

別のライブラリにあります。


1 - エンコーディング (関数をどうもありがとう。普通にUTF -8に変換する方法を知らなかったので)
2 - パーミッション。


 
Andrey Azatskiy:


1 - エンコーディング (関数をどうもありがとう。UTF -8 に普通に変換する方法を知らなかったので)
2 - パーミッション。


はい、どういたしまして。自分もこれでどれだけ苦労したことか。このような悲惨な記事で。選択肢はひとつ。公式ドキュメントを読むか、尋ねるかだ。聞ける人がいなかった。自分で勉強するしかなかった。要は、C++で書けば聞く人がいるということだ。しかし、ガスケットを通して書き、それをμlに転送するとなると、助けてくれる人はほとんどいない。プラスユーザーには敷居が高すぎる)))

 

メモリリークを見つけたようです:

SQLite3Base.mqhの250行目

::sqlite3_finalize(stmt); // クリーン

であるべきです:

::sqlite3_finalize(pstmt); // クリーン
 
Viktar Dzemikhau:

実際、確認するのは簡単だ。手始めにデータベースを「マイドキュメント」に入れてみてください。それがうまくいくなら、権利の問題ではない。しかし、一般的には、あなたがどうやったかによります。私自身は、SQLite3で作業するために必要なものをすべて作るまで2週間かかりました。ロシア語にはこのテーマに関する適切な情報がないので、ドキュメントを翻訳しなければなりませんでした。この記事のように、ゴミやレバクがたくさんある。上記のように、私はそのうちのひとつに惹かれた。その後、私はあきらめて自分でこの問題を勉強しました。

私はこのためのラッパーを持って いる:

そしてこれがstringToUtf8 関数だ:

別のライブラリにあります。

utfへの変換に使っています。

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