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

 
Was ist mit caching_sha2_password Unterstützung? Gibt es eine Möglichkeit, damit umzugehen, oder sollte ich einfach mysql_native_password installieren?
 
Dmitri Custurov:
Was ist mit caching_sha2_password Unterstützung? Gibt es eine Möglichkeit, damit umzugehen oder einfach mysql_native_password zu installieren?

Hy wird bisher nur nativ unterstützt. Braucht jemand wirklich sha2 Unterstützung in dieser Lösung?

Ihr Datenbankserver befindet sich also nicht lokal oder sogar unter vpn?

 

Hallo @EugeniyLugovoy und vielen Dank für Ihre harte Arbeit!

Gibt es in der aktuellen Version Ihrer Implementierung eine Möglichkeit, die "LAST_INSERT_ID" nach einem INSERT-Vorgang (in einer Tabelle mit einer AUTO_INCREMENT-Spalte) abzurufen?

Vielen Dank im Voraus und noch einen schönen Tag :)
 
arsenico42:

Hallo @EugeniyLugovoy und vielen Dank für Ihre harte Arbeit!

Gibt es in der aktuellen Version Ihrer Implementierung eine Möglichkeit, die "LAST_INSERT_ID" nach einem INSERT-Vorgang (in einer Tabelle mit einer AUTO_INCREMENT-Spalte) abzurufen?

Vielen Dank im Voraus und noch einen schönen Tag :)


Hallo arsenico42, Sie können versuchen, die Einfügung in einer Abfrage zu machen und dann LAST_INSERT_ID in einer anderen auszuwählen, aber ich kann diesen Weg nicht empfehlen, weil LAST_INSERT_ID eine Funktion ist, die eine globale Datenbankvariable zurückgibt, und eine andere Einfügung (von einem anderen Benutzer, die gleichzeitig läuft) zwischen Ihrer ursprünglichen Einfügung und der Auswahl von LAST_INSERT_ID den Wert von LAST_INSERT_ID beeinflussen kann.

Das hängt nicht von der Bibliothek ab, sondern davon, wie mysql/mariadb funktioniert.

Aber ich kann Ihnen raten, eine Funktion auf der Datenbankseite zu erstellen, um die erforderlichen Werte einzufügen, LAST_INSERT_ID auszuwählen und diese ID als Funktionswert zurückzugeben. es könnte so aussehen:

CREATE FUNCTION `import_funds_add`(
        `p_file_name` varchar(64),
        `p_full_path` varchar(2000),
        `p_status` VARCHAR(10),
        `p_error` VARCHAR(2000)
)
RETURNS bigint(20)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
BEGIN
     declare id bigint;
     INSERT INTO import_funds(`file_name`, `full_path`, `status`, `error`, `creation_date`) 
     VALUES (p_file_name, p_full_path, p_status, p_error, now());
     SELECT LAST_INSERT_ID() INTO id;
     RETURN(id);
END;;

Und in MQL müssen Sie einen Cursor für die Abfrage öffnen:

qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id";

dann den Wert aus dem üblichen Cursor holen und den Cursor schließen.

Anstatt diese Befehle separat in MQL zu verwenden, können Sie sie einfach auf der DB-Seite zu einer Funktion kombinieren.

Das ist nur ein Beispiel aus dem Live-System.

 
Carmine Marrone:

Hallo elugovoy

Toller Artikel und tolle Bibliotheken.

Ich versuche, Ihre Beispiele unter MT5 zu verwenden, aber ich bekomme diesen Fehler:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' ist keine 64-bit Version

Führen Sie MT5 unter einer 32-Bit-Umgebung aus?

Könnten Sie mir bitte dabei helfen?

Herzlichen Dank!

Carmine Marrone.

Hallo Carmine, Sie können die x64-Version aus den Quellen auf github herunterladen.

https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL/x64/Release

 

Hallo @Eugeniy Lugovoy, zunächst einmal vielen Dank für die vielen Beiträge zur Community


Ich stecke hier fest:

"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]

"Aufruf von 'ReadIni' nicht möglich, '..\libraries\MQLMySQL.dll' ist nicht geladen"
 
MARCOS DALCIN ALVES DINIZ:

Hallo @Eugeniy Lugovoy, zunächst einmal vielen Dank für den Beitrag zur Gemeinschaft


Ich stecke hier fest:

"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]

"Aufruf von 'ReadIni' nicht möglich, '..\libraries\MQLMySQL.dll' ist nicht geladen"

Stellen Sie sicher, dass sich die Dateien MQLMySQL.dll & MQLMySQL.def in Ihrem Ordner "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\" befinden.

Wie Sie sehen können, wenn Sie MQL-Programme im Tester-Modus ausführen, wäre der Pfad zu den Bibliotheken anders (wegen der UAC)

 

Multi-Insert bekommt Fehler.

Query =         "INSERT INTO `test_table` (id, code, start_date) VALUES (1,\'EURUSD\',\'2014.01.01 00:00:01\');";
Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (2,\'EURJPY\',\'2014.01.02 00:02:00\');";
Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (3,\'USDJPY\',\'2014.01.03 03:00:00\');";
      

Fehler bei mehreren Anweisungen: Sie haben einen Fehler in Ihrer SQL-Syntax; lesen Sie im Handbuch zu Ihrer MySQL-Serverversion nach, um die richtige Syntax für die Verwendung bei ...



 
Unterstützt es den Befehl modify sql?
 
Yu Zhang:

Multi-Insert erhalten Fehler.

Fehler bei mehreren Anweisungen: Sie haben einen Fehler in Ihrer SQL-Syntax; lesen Sie im Handbuch zu Ihrer MySQL-Serverversion nach, um die richtige Syntax für die Verwendung bei ...



Vergewissern Sie sich, dass Sie beim Öffnen der Datenbankverbindung das Multi-Statement-Client-Flag gesetzt haben.

int ClientFlag = CLIENT_MULTI_STATEMENTS; // Setzen des Kennzeichens für Mehrfachanweisungen
int DB; 

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // Verbindung zur Datenbank