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

 
Dmitry Melnichenko:

Ho creato un nuovo utente e ho provato a connettermi con i suoi dati, ma non è servito!

è improbabile che si tratti di un problema di organizzazione di MySQL o del database, cioè è evidente che c'è qualche bug o nell'EA/script o nella libreria dell'interfaccia.

Potete darmi un esempio in cui questo problema è ridotto al minimo, in modo che io possa dimostrare un breve codice e scoprire i suoi problemi qui in un thread del forum.

 
Maxim Kuznetsov:

allora è improbabile che si tratti di un problema di organizzazione di MySQL o del database, cioè ovviamente di un bug nell'EA/script o nella libreria dell'interfaccia.

Potete fare un esempio in cui questo problema è ridotto al minimo? In modo da poter dimostrare un breve codice, e poi scoprire i suoi problemi in un thread del forum qui

if(connect >= 0)
   {
      string sql = SelectNewOrdersSQL();
      
      int Cursor1 = MySqlCursorOpen(connect, sql);
      
      if(Cursor1 >= 0)
      {
         int Rows = MySqlCursorRows(Cursor1);
         
         for(int i = 0; i < Rows; i++)
         {
            ResetLastError();
            
            if(MySqlCursorFetchRow(Cursor1))
            {
               int ticket = MySqlGetFieldAsInt(Cursor1, 0);
               string s = MySqlGetFieldAsString(Cursor1, 1);
               int order_type = MySqlGetFieldAsInt(Cursor1, 2);
               double lot = MySqlGetFieldAsDouble(Cursor1, 3);
               double open_price = MySqlGetFieldAsDouble(Cursor1, 4);
               
               string symbol = GetSymbol(s);
               
               Print(ticket);
               
               int digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
               int open_ticket = -1;
               if((open_ticket = OrderSend(symbol, order_type, NormalizeDouble(lot, 2), NormalizeDouble(open_price, digits), 150, 0, 0, (string)ticket)) <= 0)
               {
                  Print(symbol, ": non è stato possibile aprire una posizione. Errore ", GetLastError());
               }
               else
               {
                  MySqlExecute(connect, SqlModifyClient(ticket, open_ticket));
               }
            }
         }
         
         MySqlCursorClose(Cursor1);
      }
   }
string SelectNewOrdersSQL()
{
   string res = "SELECT Ticket, Symbol, OrderType, Lot, OpenPrice, StopLoss, TakeProfit ";
   res += "FROM orders (WHERE Client2 = 0 AND HistoryMaster = 0 AND Account = " + (string)MasterAccount;
   res += " AND Magic = " + (string)MasterMagic + ")";
   
   return res;
}
 
Avete MQL4 o 5?
 
Maxim Kuznetsov:
avete MQL4 o 5????
MQL4
 
Dmitry Melnichenko:
MQL4
e l'errore si verifica solo quando si chiude il cursore, cioè tutti i record vengono estratti normalmente, ma alla fine appare questa assurdità?
 
Maxim Kuznetsov:
e l'errore si verifica solo quando si chiude il cursore, cioè tutti i record vengono estratti normalmente, ma alla fine compare questa assurdità?
Sì, scrive il numero di righe selezionate (stampate in Stampa), ma quando chiude il cursore scrive questo errore.
 
Amy Liu:

Ciao Eugeniy,

Scusa per la risposta tardiva. Ecco cosa ho fatto con il tuo codice. Ho solo modificato una funzione cMySqlGetRowField per utilizzare MultiByteToWideChar. Il codice originale è commentato per il confronto.

Grazie ragazzi, siete fantastici. Ho provato il vostro codice. Non dimenticate di includere la testa widechar, o non funzionerà.

#include <wchar.h>



 

Salve professore, sto usando il software mt4, il sistema locale win10 usando ea per connettersi a mysql può essere usato normalmente, ma messo nel server win2008 non funziona, è stato richiesto '... \libraries\MQLMySQL.dll' non è caricato ... ...'.

Ho scaricato tutte le versioni, comprese mt4, mt5, 64bit, 32bit, ma ancora non funziona. Cosa devo fare?

 

Salve, ho caricato la dll nella cartella Libraries ma mi segnala un errore " "Cnnot call 'cMySqlVersion', '....\Libraries\MQLMySQL.dll' is not loaded".

Come è possibile?

 
GreenKobra:

Salve, ho caricato la dll nella cartella Libraries ma mi segnala un errore " "Cnnot call 'cMySqlVersion', '....\Libraries\MQLMySQL.dll' is not loaded".

Come è possibile?

Ho il tuo stesso problema.

Utilizzo MT5 con Windows 10 - 64 bit.