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

 
Eugeniy Lugovoy:

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.

 
Sergey Deynego:

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.

File:
MQLMySQL_v2.2.zip  4801 kb
MQL4_x32.zip  1073 kb
MQL5_x32.zip  1073 kb
MQL5_x64.zip  1076 kb
 
Eugeniy Lugovoy:

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

 
FX. MDA7:

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

Sì, la lunghezza massima dei dati dei caratteri è impostata a 1024 caratteri. Posso cambiare questo limite e ricostruire la DLL. A proposito, che tipo di dati utilizzi per quella colonna sul lato db?
 
peg:

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

perché la versione"MQLMySQL v2.0"? Dovrebbe essere 2.2
 

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

 
Ingvar Engelbrecht:

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?