Diskussion zum Artikel "Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift" - Seite 14

 
Pavel Kolchin:

immer wieder auftauchen, was bedeutet das?

wenn ich meinen Code in dieser Zeile ausführe.

if(DB==-1){DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

In MQL sind alle Zeichenfolgen Unicode und Sie übergeben sie anstelle von ANSI.

Deshalb stürzt die Dllka ab.

 
MetaQuotes Software Corp.:

In MQL sind alle Strings Unicode und Sie übergeben sie anstelle von ANSI.

Das ist, warum die Dll abstürzt.

Wenn ich die Bedingung zu entfernen, alles funktioniert, im Allgemeinen, können Sie es anders wiederholen, ich verstehe nur nicht, warum es abstürzt.

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

 
MetaQuotes Software Corp.:

In MQL sind alle Strings Unicode und Sie übergeben sie anstelle von ANSI.

Das ist der Grund, warum die DLL abstürzt.

In der DLL wird die Umkodierung durchgeführt
 
Pavel Kolchin:

Wenn ich die Bedingung zu entfernen, alles funktioniert, in der Regel, können Sie es anders zu machen, nur nicht verstehen, warum es abstürzt

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

Was ist die Logik? Haben Sie eine Verbindung vor diesem Code? Was ist DB gleich vor der Bedingung? Wenn die DB-Variable nicht initialisiert ist, liegt es wahrscheinlich daran.

Und im letzten Beispiel öffnen Sie eine normale Verbindung zur Datenbank, weshalb der Cursor auch funktioniert.

Funktionieren die mit der DLL gelieferten Skripte?
 

Grüße Eugene!

Vielen Dank für das Skript. Ich habe beschlossen, es in meinem Projekt zu implementieren. Aber in der Phase des Testens der Skripte, die Sie dem Projekt beigefügt haben, habe ich 1 Fehler, nicht klar. ReadIni funktioniert nicht. Vielleicht mache ich etwas falsch, aber es gibt immer leere Werte aus der Ini zurück. Was könnte der Grund dafür sein? Ich vermute, dass es die Datei auf dem angegebenen Pfad nicht findet, aber ich habe von verschiedenen Verzeichnissen aus geprüft, dass alles korrekt und an seinem Platz ist.

Wenn ich die Daten für die Verbindung im Code direkt vorschreibe, funktioniert alles einwandfrei.

Ich verwende mt4.
 
Und hier ist ein weiteres Problem: Russischer Text wird in karakaziaby eingefügt. Natürlich verstehe ich, dass die dll ist Umkodierung, aber meine Datenbank ist UTF-8. Was sollte ich tun, um lesbaren russischen Text einzufügen...? es wird mein Leben viel einfacher machen...?
 
Anton Gaisin:

Grüße Eugene!

Vielen Dank für das Skript. Ich habe beschlossen, es in meinem Projekt zu implementieren. Aber in der Phase des Testens der Skripte, die Sie dem Projekt beigefügt haben, habe ich 1 Fehler, nicht klar. ReadIni funktioniert nicht. Vielleicht mache ich etwas falsch, aber es gibt immer leere Werte aus der Ini zurück. Was könnte der Grund dafür sein? Ich vermute, dass es die Datei auf dem angegebenen Pfad nicht findet, aber ich habe von verschiedenen Verzeichnissen aus geprüft, dass alles korrekt und an seinem Platz ist.

Wenn ich die Daten für die Verbindung im Code direkt vorschreibe, funktioniert alles einwandfrei.

Ich verwende mt4.

Du solltest die Pfade überprüfen... UAC wirkt sich höchstwahrscheinlich aus. Welchen Pfad stellst du auf INI? Auf das Terminalverzeichnis oder Data?

 
Anton Gaisin:
Und hier ist ein weiteres Problem: Russischer Text wird in karakaziaby eingefügt. Natürlich verstehe ich, dass die dll ist Umkodierung, aber meine Datenbank ist UTF-8. Was soll ich tun, um lesbaren russischen Text einzufügen...? das würde mein Leben viel einfacher machen...?

Ja, die Konvertierung in ASCII ist im Gange, es gibt auch eine Bemerkung dazu von chinesischen Kollegen. Sobald ich Zeit habe, werde ich versuchen, dies zu beheben.

 
Eugeniy Lugovoy:

Sie müssen die Pfade überprüfen... UAC beeinflusst es wahrscheinlich. Welchen Pfad stellen Sie für INI ein? Auf das Terminalverzeichnis oder Data?

Es gibt Beispiele in deinem Archiv... in denen habe ich alles so gelassen, wie es ist. Ich habe nur die Ini geändert.

Das Problem ist gelöst. Ich war selbst dumm. Früher waren der Ordner mit MT4 und der Ordner mit den Daten zusammengelegt. Jetzt ist der Ordner für Daten in einem speziellen Bereich von Windows gespeichert. Jetzt ist der Pfad richtig, TerminalInfoString(TERMINAL_DATA_PATH) statt TerminalPath() zu nehmen.

 
Anton Gaisin:

Es gibt Beispiele in deinem Archiv ... in denen ich alles so gelassen habe, wie es war. Ich habe nur die ini geändert.

Das Problem ist gelöst. Ich war selbst dumm. Früher waren der Ordner mit MT4 und der Ordner mit den Daten zusammengelegt. Jetzt ist der Ordner für Daten in einem speziellen Bereich von Windows gespeichert. Jetzt ist der Pfad richtig, TerminalInfoString(TERMINAL_DATA_PATH) statt TerminalPath() zu nehmen.

Hmm... es ist irgendwo in der alten Bibliothek, in den neuesten Versionen (in der Diskussion gepostet) habe ich es korrigiert, wenn ich mich richtig erinnere :)

Ok. Dann bleibt noch das UTF-Problem. Ich werde versuchen, es diese Woche bis zum Wochenende zu lösen, wenn ich nicht überarbeitet bin.