Discussione sull’articolo "Come accedere al database MySQL da MQL5 (MQL4)" - pagina 8

 
Eugeniy Lugovoy:

Ciao James,

Attualmente sto lavorando su Upwork solo su un grande progetto. Quindi, non ho molto tempo libero al giorno d'oggi. Qual è il problema che hai con le librerie? Come posso aiutarti?

Ciao,

Alla fine l'ho capito, ma grazie comunque per la libreria.... Molto utile!!!

Giacomo
 

Perché tutto ha smesso di funzionare dopo l'aggiornamento alla build 890 di mt4?

Il log dice che la violazione dell'accesso viene letta a 0x00000000 in 'D:\MT4\MQL4\libraries\MQLMySQL.dll'.

[Eliminato]  
interessati anche a ...
 
Itum:
anche interessato a ...
Ragazzi, cercherò di controllare nei prossimi giorni.
 
Non vedo l'ora!
 
alhimik7:
Non vedo l'ora di farlo!

MT4 build 890 x32 appena controllato. Tutto funziona.

Log dell'esecuzione degli script di test:

2015.12.05 12:20:09.984 Script MySQL-005 EURUSD,H1: removed
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: uninit reason 0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Passed!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Closing cursors...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 4 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 3 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 2 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 1 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connecting...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: initialized
2015.12.05 12:20:09.968 Script MySQL-005 EURUSD,H1: loaded successfully
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: removed
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: uninit reason 0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[3]: id = 4, code = USDJPY, start_time = 2014.01.03 03:00:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[2]: id = 3, code = EURJPY, start_time = 2014.01.02 00:02:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[1]: id = 1, code = EURUSD, start_time = 2014.01.01 00:00:01
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[0]: id = 123279852, code = ACCOUNT, start_time = 2015.12.05 12:20:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Rows affected: 4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: 4 row(s) selected.
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: SQL> SELECT id, code, start_date FROM `test_table`
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connecting...
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: initialized
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: loaded successfully
2015.12.05 12:20:00.093 Script MySQL-003 EURUSD,H1: removed
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: uninit reason 0
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Rows affected: 2
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Succeeded! 2 rows has been updated.
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Succeeded! 3 rows has been inserted by one query.
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Succeeded: INSERT INTO `test_table` (id, code, start_date) VALUES (123279852,'ACCOUNT','2015.12.05 12:20:00')
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:59.968 MySQL-003 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Connecting...
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: initialized
2015.12.05 12:19:59.953 Script MySQL-003 EURUSD,H1: loaded successfully
2015.12.05 12:19:55.531 Script MySQL-002 EURUSD,H1: removed
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: uninit reason 0
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connecting...
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: initialized
2015.12.05 12:19:55.218 Script MySQL-002 EURUSD,H1: loaded successfully
2015.12.05 12:19:49.625 Script MySQL-001 EURUSD,H1: removed
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: uninit reason 0
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: All connections closed. Script done!
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#2
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#1
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Connecting...
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: initialized
2015.12.05 12:19:49.546 Script MySQL-001 EURUSD,H1: loaded successfully

Ragazzi, chiarite:

1. Su quale operazione dà"Violazione dell'accesso in lettura"??

2. Quando si esegue lo script MySQL-001, quale versione di MQLMySQL viene mostrata nella scheda Esperti? Dovrebbe essere: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory.

3. Quale versione del database MySQL?

4. MySQL è utilizzato localmente o su un host remoto?

5. Sotto quale sistema operativo viene eseguito il terminale?

Per favore, controllate e riferite, perché non riesco a riprodurre l'errore.

Creerò un ambiente simile e lo testerò.

 

Salve,

Sto cercando di collegare Metatrader a Mysql tramite i vostri file.
Dopo il download e l'installazione ho modificato il file "MyConnection" impostando le informazioni del mio DB.

Ecco il problema:

All'inizio tutto funzionava bene; gli script creavano le tabelle all'interno del DB. Poi ho fatto una piccola modifica al codice (ho solo cambiato il nome della tabella) e ho cancellato la tabella dal database in modo che lo script ne creasse una nuova da zero senza eliminare la precedente. Tutto ciò che ho ottenuto è stata la creazione delle colonne, ma senza alcun dato.
Ho quindi deciso di utilizzare nuovamente i vecchi script. Allora non ho ottenuto nulla; non è stata creata nemmeno una tabella. Da allora ho un DB che rimane vuoto.

Qualche idea su cosa possa essere andato storto?

Grazie in anticipo!

 
peg:

Salve,

Sto cercando di collegare Metatrader a Mysql tramite i vostri file.
Dopo il download e l'installazione ho modificato il file "MyConnection" impostando le informazioni del mio DB.

Ecco il problema:

All'inizio tutto funzionava bene; gli script creavano le tabelle all'interno del DB. Poi ho fatto una piccola modifica al codice (ho solo cambiato il nome della tabella) e ho cancellato la tabella dal database in modo che lo script ne creasse una nuova da zero senza eliminare la precedente. Tutto ciò che ho ottenuto è stata la creazione delle colonne, ma senza alcun dato.
Ho quindi deciso di utilizzare nuovamente i vecchi script. Allora non ho ottenuto nulla; non è stata creata nemmeno una tabella. Da allora ho un DB che rimane vuoto.

Qualche idea su cosa possa essere andato storto?

Grazie in anticipo!

Ciao Peg,

Per creare una tabella, utilizzare il comando SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html.

Per inserire i dati utilizzare il comando SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Per eseguire tali comandi utilizzare la funzione MySqlExecute.

Inoltre puoi fornire il tuo codice e sarò in grado di capire il problema.

MySQL :: MySQL 5.7 Reference Manual :: 13.1.14 CREATE TABLE Syntax
  • dev.mysql.com
creates a table with the given name. You must have the privilege for the table. Rules for permissible table names are given in Section 9.2, “Schema Object Names”. By default, the table is created in the default database, using the storage engine. An error occurs if the table exists, if there is no default database, or if the database does not...
 
Eugeniy Lugovoy:

Ciao Peg,

Per creare una tabella, utilizzare il comando SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html.

Per inserire i dati, utilizzare il comando SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html.

Per eseguire tali comandi utilizzare la funzione MySqlExecute.

Inoltre puoi fornire il tuo codice e sarei in grado di capire il problema.

Ciao Eugeniy,

Grazie per i link.

All'inizio ho usato il tuo codice per connettermi al mio database (stavo usando mySql Server, nel caso sia utile). E ho potuto vedere la tabella. Poi ho cambiato il nome della tabella nel tuo script MySQL-002 (come puoi vedere qui sotto) e sembrava funzionare, ma non ha creato la mia tabella. Ora sto usando WampServer e ottengo:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: caricato con successo

0 11:09:37.730 MySQL-002 EURUSD,H1: inizializzato

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Utente: , Database:

0 11:09:37.730 MySQL-002 EURUSD,H1: Connessione...

0 11:09:37.741 MySQL-002 EURUSD,H1: Connesso! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: La tabella `table` non può essere creata. Errore: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Disconnesso. Script terminato!

0 11:09:37.742 MySQL-002 EURUSD,H1: disconnessione motivo 0

0 11:09:37.743 Script MySQL-002 EURUSD,H1: rimosso

//+------------------------------------------------------------------+
//|MySQL-002.mq4 |
//|Copyright 2014, Eugene Lugovoy |
//|http://www.fxcodexlab.com |
//| Creazione di tabelle (DEMO)|
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Funzione di avvio del programma di script|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // credenziali del database
 int Port,ClientFlag;
 int DB; // identificatore del database
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // lettura delle credenziali del database dal file INI
 Host = ReadIni(INI, "MYSQL", "Host");
 User = ReadIni(INI, "MYSQL", "User");
 Password = ReadIni(INI, "MYSQL", "Password");
 Database = ReadIni(INI, "MYSQL", "Database");
 Port     = StrToInteger(ReadIni(INI, "MYSQL", "Port"));
 Socket   = ReadIni(INI, "MYSQL", "Socket");
 ClientFlag = StrToInteger(ReadIni(INI, "MYSQL", "ClientFlag"));  

 Print ("Host: ",Host, ", User: ", User, ", Database: ",Database);
 
 // aprire la connessione al database
 Print ("Connecting...");
 
 DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
 
 if (DB == -1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}
 
 string Query;
 Query = "DROP TABLE IF EXISTS `test`";
 MySqlExecute(DB, Query);
 
 Query = "CREATE TABLE `test` (id int, code varchar(50), start_date datetime)";
 if (MySqlExecute(DB, Query))
    {
     Print ("Table `test` created.");
    }
 else
    {
     Print ("Table `test` cannot be created. Error: ", MySqlErrorDescription);
    }
 
 MySqlDisconnect(DB);
 Print ("Disconnected. Script done!");
}
//+------------------------------------------------------------------+
 
peg:

Ciao Eugeniy,

Grazie per i link.

All'inizio ho usato il tuo codice per connettermi al mio database (stavo usando mySql Server, nel caso sia utile). E ho potuto vedere la tabella. Poi ho cambiato il nome della tabella nel tuo script MySQL-002 (come puoi vedere qui sotto) e sembrava funzionare, ma non ha creato la mia tabella. Ora sto usando WampServer e ottengo:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: caricato con successo

0 11:09:37.730 MySQL-002 EURUSD,H1: inizializzato

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Utente: , Database:

0 11:09:37.730 MySQL-002 EURUSD,H1: Connessione...

0 11:09:37.741 MySQL-002 EURUSD,H1: Connesso! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: La tabella `table` non può essere creata. Errore: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Disconnesso. Script terminato!

0 11:09:37.742 MySQL-002 EURUSD,H1: disconnessione motivo 0

0 11:09:37.743 Script MySQL-002 EURUSD,H1: rimosso

In base all'errore che vedo nel tuo log: 0 11:09:37.742 MySQL-002 EURUSD,H1: Table `table` cannot be created.

Il nome "table" è una parola chiave del database mysql e non può essere usato come nome di tabella, provate a cambiarlo per esempio in "table1" per verificare se funziona.

oppure è possibile che il database non sia stato selezionato o non sia stato impostato. è possibile eseguire il comando "USE database_name" subito dopo la connessione, dove il database_name è il nome del database.

Per esempio, se il mio database è "mysql":

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

if (DB ==-1) { Print ("Connessione fallita! Errore: "+MySqlErrorDescription); } else { Print ("Connesso! DBID#",DB);}

MySqlExecute(DB, "USE mysql");