Diskussion zum Artikel "SQL und MQL5: Mit der SQLite Datenbank arbeiten" - Seite 4

 

Serhii Shevchuk:

Mir ist klar, dass es schwer ist, von Ihnen Hilfe zu bekommen.

Wie kann ich Ihnen helfen, wenn Sie mir nicht sagen, wie Sie zu Ihrem Problem gekommen sind.

Vielleicht arbeiten Sie mit einem Mac, oder Sie haben einen Ordner mit Leseberechtigung.

Ich weiß nicht, wie Ihr Dateisystem aussieht.

Aus dem Autoforum:

xxx: Motor knistert nach Austausch des Öldeckels. Hilfe, um die Ursachen zu verstehen und was die Folgen sein könnten

uuu: Es kann viele Ursachen geben, aber die Folgen können unterschiedlich sein.

xxx: Danke.



Ich weiß noch nicht, warum.

Wenn Sie es herausfinden, lassen Sie es mich wissen.

 
Ich habe nicht den ganzen Artikel gelesen, denn diese Bibliotheken sind ein einziges Durcheinander. Allerdings habe ich einige Dinge für mich übernommen, da es das erste war, was ich zu diesem Thema gesehen habe. Dann wurde mir klar, dass ich die offizielle Dokumentation lesen muss, weil man aus einem solchen Artikel nichts lernen kann. In der Tat möchte ich sagen, dass die Informationen über die sqlite3_bind_xxx Funktionen nicht korrekt sind. Der Autor des Artikels ist irreführend. Der Zweck dieser Funktionen ist ein völlig anderer. Wenn der Autor des Artikels das Thema nicht selbst studiert hat oder nicht nur darüber schreiben wollte, wäre es besser nicht zu schreiben. Nachdem ich diesen Unsinn über diese Funktionen in dem Artikel gelesen hatte, musste ich mehr als eine Stunde lang darüber nachdenken. Eben. Ich habe erst vor einer Woche angefangen, mit DBMS zu arbeiten. Ich habe den Dreh langsam raus. Deshalb war es auch nicht leicht zu verstehen. Und als mir klar wurde, wozu die sqlite3_bind_xxx-Funktionen dienen, war ich überrascht. So etwas hätte ich von dem Autor des Artikels nicht erwartet. Ich dachte immer, er sei ein Profi.
 
Ich habe das dem Artikel beigefügte Material nicht getestet, aber ich habe einen ähnlichen Fehler in den Pluspunkten. Ich kann keine Basis auf dem übergebenen Pfad öffnen/erstellen, sie wird immer entweder im Projektverzeichnis oder auf dem vom Projektverzeichnis angegebenen Pfad (/neuer Ordner/myDB.db) erstellt...

Ichhabe die Funktionen zum Erstellen und Schließen der Basisimportiert und versucht, sie zu erstellen. Als Ergebnis habe ich die Datenbank in Lasten erstellt.
 
---:

Es kann viele Ursachen und viele Folgen haben.

Danke, das hat geholfen. Problem gelöst, Frage beseitigt.

 
Ich habe eine sehr interessante Situation) gerade gestern alles erstellt wurde und arbeitete (wenn auch von etwas in der "Downloads"-Ordner) Aber, über Nacht die Basis-Datei gestoppt wird erstellt, aber die Basis selbst funktioniert, wie es sollte für Tests versucht, eine Basis im Speicher platziert sqlite3_open(":memory:"") - die Basis erstellt wird, werden die Daten geladen / gelesen.

Vielleicht ein Problem mit Zugriffsrechten, was denken Sie? wie man dies in Windows weiß, wer zu überprüfen?
 
Andrey Azatskiy:
Ich habe eine sehr interessante Situation) gerade gestern alles erstellt wurde und arbeitete (wenn auch von etwas in der "Downloads"-Ordner) Aber, über Nacht die Basis-Datei gestoppt wird erstellt, aber die Basis selbst funktioniert, wie es sollte für Tests versucht, eine Basis im Speicher platziert sqlite3_open(":memory:"") - die Basis erstellt wird, werden die Daten geladen / gelesen.

Vielleicht ein Problem mit Zugriffsrechten, was denken Sie? wie man dies in Windows weiß, wer zu überprüfen?

Es ist eigentlich einfach zu überprüfen. Versuchen Sie zunächst, die Datenbank in "Eigene Dateien" zu speichern. Wenn es funktioniert, dann ist es keine Frage der Rechte. Aber im Allgemeinen hängt es davon ab, wie Sie es gemacht haben. Ich persönlich habe 2 Wochen gebraucht, bis ich alles erstellt hatte, was ich für die Arbeit mit SQLite3 brauchte. Ich musste die Dokumentation übersetzen, weil es auf Russisch keine ausreichenden Informationen zu diesem Thema gibt. Wie in diesem Artikel gibt es eine Menge Unsinn und Levak. Oben habe ich einen der Momente angezogen. Dann habe ich angehalten und das Thema selbst studiert.

Ich habe einen solchen Wrapper für sie:

//==================================================================================================================================================================================
// Einfacher Wrapper für 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);
}

Hier ist die Funktion stringToUtf8:

//==================================================================================================================================================================================
// Konvertiert eine Zeichenkette in ein utf-8 Byte-Array. =========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // String, der in ein Array in utf-8-Kodierung umgewandelt werden soll
                  uchar& utf8[],                                 // Array in utf-8-Kodierung, in dem die konvertierte Zeichenkette strToConvert abgelegt wird
                  const bool untilTerminator = true) export {    // Anzahl der Zeichen, die in das utf8-Array kopiert und in die utf-8-Kodierung konvertiert werden.
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

Ich habe es in einer separaten Bibliothek.

 
Viktar Dzemikhau:

Das ist eigentlich ganz einfach zu überprüfen. Versuchen Sie zunächst, die Datenbank in "Eigene Dateien" zu speichern. Wenn es funktioniert, dann ist es keine Frage der Rechte. Aber im Allgemeinen hängt es davon ab, wie Sie das alles gemacht haben. Ich persönlich habe 2 Wochen gebraucht, bis ich alles erstellt hatte, was ich für die Arbeit mit SQLite3 brauchte. Ich musste die Dokumentation übersetzen, weil es auf Russisch keine ausreichenden Informationen zu diesem Thema gibt. Wie in diesem Artikel gibt es eine Menge Unsinn und Levak. Oben habe ich einen der Momente angezogen. Dann gab ich auf und studierte das Thema selbst.

Ich habe einen Wrapper für diese:

Und hier ist die Funktion stringToUtf8:

Ich habe es in einer separaten Bibliothek.

Ja, ich hatte 2 Fehler:
1 - Kodierung (vielen Dank für die Funktion, ich wusste nicht, wie man normalerweise zu UTF -8 übersetzen)
2 - Berechtigungen.


 
Andrey Azatskiy:

Ja, ich hatte 2 Fehler:
1 - Kodierung (vielen Dank für die Funktion, ich wusste nicht, wie man normal in UTF -8 übersetzt)
2 - Berechtigungen.


Ja, gern geschehen. Ich weiß noch, wie sehr ich selbst damit zu kämpfen hatte. Mit solchen Wehe-Artikeln. Es gibt nur eine Möglichkeit. Entweder man liest die offizielle Dokumentation oder man fragt nach. Es gab niemanden, den man fragen konnte. Ich musste sie selbst studieren. Der Punkt ist, dass es jemanden gibt, den man fragen kann, wenn man in C++ schreibt. Aber wenn man durch eine Dichtung schreibt und sie nach µl überträgt, gibt es nur wenige Leute, die einem helfen können. Für Plus-Benutzer ist es zu schwer, sich in die Materie einzuarbeiten)))

 

Ich glaube, ich habe ein Speicherleck gefunden:

In SQLite3Base.mqh Zeile 250

::sqlite3_finalize(stmt); // sauber

Sollte sein:

::sqlite3_finalize(pstmt); // sauber
 
Viktar Dzemikhau:

Das ist eigentlich ganz einfach zu überprüfen. Versuchen Sie zunächst, die Datenbank in "Eigene Dateien" zu speichern. Wenn es funktioniert, dann ist es keine Frage der Rechte. Aber im Allgemeinen hängt es davon ab, wie Sie das alles gemacht haben. Ich persönlich habe 2 Wochen gebraucht, bis ich alles erstellt hatte, was ich für die Arbeit mit SQLite3 brauchte. Ich musste die Dokumentation übersetzen, weil es auf Russisch keine ausreichenden Informationen zu diesem Thema gibt. Wie in diesem Artikel gibt es eine Menge Unsinn und Levak. Oben habe ich einen der Momente angezogen. Dann gab ich auf und studierte das Thema selbst.

Ich habe einen Wrapper für diese:

Und hier ist die Funktion stringToUtf8:

Ich habe sie in einer separaten Bibliothek.

und ich verwende sie zum Konvertieren in utf

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