Discussione sull’articolo "Come accedere al database MySQL da MQL5 (MQL4)" - pagina 9
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
MT4 build 890 x32 appena controllato. Tutto funziona.
Log degli script di test in esecuzione:
Ragazzi, per favore 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ò.
Sto utilizzando MT4 (950). Ho preso i file dall'archivio allegato all'articolo. Ho capito bene che non è l'ultima versione: MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory.
Non legge i dati dal file di configurazione.
Utilizzo la MT4 (950). Ho preso i file dall'archivio allegato all'articolo. Ho capito bene che non è l'ultima versione: MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory
Non legge i dati dal file di configurazione.
Sì, la v2.0 è vecchia. Ho già pubblicato versioni più recenti nella discussione dell'articolo.
La allego ora.
MQLMySQL v2.2 - Sorgenti del progetto DLL per x64 e x86
Provate a usare questa versione. Sembra essere l'ultima versione.
In base all'errore che vedo dal tuo log: 0 11:09:37.742 MySQL-002 EURUSD,H1: Table `table` cannot be created.
Si utilizza il nome "table" che è una parola chiave del database mysql e non può essere utilizzato come nome di tabella, provare a cambiarlo ad esempio in "table1" solo 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");
Ho seguito i vostri suggerimenti per il nome delle tabelle e il comando MySqlExecute(DB, "USE mt4"), ma ottengo comunque il messaggio di errore:
0 12:51:40.534 Script MySQL-002new EURUSD,M1: caricato con successo
0 12:51:40.549 MySQL-002new EURUSD,M1: inizializzato
0 12:51:40.549 MySQL-002new EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory
0 12:51:40.549 MySQL-002new EURUSD,M1: Host: , User: , Database:
0 12:51:40.549 MySQL-002new EURUSD,M1: Connessione...
0 12:51:40.565 MySQL-002new EURUSD,M1: Connesso! DBID#0
0 12:51:40.565 MySQL-002new EURUSD,M1: La tabella `test_table` non può essere creata. Errore: Aucune base n'a ?t? s?lectionn?e
0 12:51:40.565 MySQL-002new EURUSD,M1: Disconnesso. Script completato!
0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0
0 12:51:40.565 Script MySQL-002new EURUSD,M1: rimosso
Ciao Eugeniy Lugovoy,
Grazie per il tuo utile progetto.
Sto cercando di leggere un campo stringa da una tabella di circa 3.000 caratteri, ho usato "MySqlGetFieldAsString" in questo modo:
if (Cursore >= 0)
{
Rows = MySqlCursorRows(Cursore);
per (int i=0; i<Rows; i++)
if (MySqlCursorFetchRow(Cursore))
{
Get_Setting = MySqlGetFieldAsString(Cursore, 4);
}
.....
Ma il problema è che Get_String mi restituisce solo 1025 caratteri,
Ho bisogno di leggere completamente quel campo.
Potete aiutarmi a risolvere questo problema?
Saluti
Ciao Eugeniy Lugovoy,
Grazie per il tuo utile progetto.
Sto cercando di leggere un campo stringa da una tabella di circa 3.000 caratteri, ho usato "MySqlGetFieldAsString" in questo modo:
if (Cursore >= 0)
{
Rows = MySqlCursorRows(Cursore);
per (int i=0; i<Rows; i++)
if (MySqlCursorFetchRow(Cursore))
{
Get_Setting = MySqlGetFieldAsString(Cursore, 4);
}
.....
Ma il problema è che Get_String mi restituisce solo 1025 caratteri,
Ho bisogno di leggere completamente quel campo.
Potete aiutarmi a risolvere questo problema?
Risposte
Ho seguito i tuoi suggerimenti per il nome delle tabelle e il comando MySqlExecute(DB, "USE mt4") ma ottengo comunque il messaggio di errore:
0 12:51:40.534 Script MySQL-002new EURUSD,M1: caricato con successo
0 12:51:40.549 MySQL-002new EURUSD,M1: inizializzato
0 12:51:40.549 MySQL-002new EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory
0 12:51:40.549 MySQL-002new EURUSD,M1: Host: , User: , Database:
0 12:51:40.549 MySQL-002new EURUSD,M1: Connessione...
0 12:51:40.565 MySQL-002new EURUSD,M1: Connesso! DBID#0
0 12:51:40.565 MySQL-002new EURUSD,M1: La tabella `test_table` non può essere creata. Errore: Aucune base n'a ?t? s?lectionn?e
0 12:51:40.565 MySQL-002new EURUSD,M1: Disconnesso. Script completato!
0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0
0 12:51:40.565 Script MySQL-002new EURUSD,M1: rimosso
Eccellente!
Utilizzo MQL5 per generare dati per MQL4.
Tutto ha funzionato a meraviglia, tranne il fatto che ho dovuto rimuovere le virgolette singole intorno al nome della tabella nel comando di query
Query ="SELECT Symbol,Composite,Pattern FROM summarytable";
funziona bene
Eccellente!
Utilizzo MQL5 per generare dati per MQL4.
Tutto ha funzionato a meraviglia, tranne il fatto che ho dovuto rimuovere le virgolette singole intorno al nome della tabella nel comando di query
Query ="SELECT Symbol,Composite,Pattern FROM summarytable";
funziona bene
Sì, è possibile usare senza virgolette se non si intende nominare le tabelle con maiuscole/minuscole (mysql è sensibile alle maiuscole) e simboli speciali. BTW, non si tratta del simbolo di virgolette singole "'", ma di "`".
Quindi la query potrebbe anche essere Query ="SELECT `Symbol`,`Composite`,`Pattern` FROM `summarytable`";
se si desidera nominare le colonne Simbolo, ma non simbolo o SIMBOLO
Ciao Eugeniy,
Grazie per il tuo modulo, molto utile. Potresti aiutarmi ad aggiungere una funzione per ottenere il nome del campo o come potrei aggiungerla in VC++?
come stai!
sistema win10 64x, Impossibile connettersi al database, potete aiutarmi?