Sto lottando da un paio d'ore cercando di leggere i dati dal database e non ci riesco.
Ecco il codice per i test.
Brevemente. Viene creato un database con una tabella (se il database esiste, la tabella viene cancellata e ricreata). Una singola riga viene aggiunta alla tabella.
Poi il database viene chiuso e riaperto. La selezione semplice di questo record è fatta, ma il comando restituisce l'errore che il risultato della query è vuoto.
Controllato attraverso l'IDE - tutto è selezionato dalla stessa query. Non riesco a capire se questo è un bug o una correzione?
intOnInit()
{
//---int db_handle = DatabaseOpen("test3", DATABASE_OPEN_COMMON | DATABASE_OPEN_CREATE | DATABASE_OPEN_READWRITE);
if (db_handle != INVALID_HANDLE)
{
// Структура таблицыif (DatabaseTableExists(db_handle, "ea_dsc"))
if(!DatabaseExecute(db_handle, "DROP TABLE IF EXISTS ea_dsc"))
Print("Failed to drop table with code ", GetLastError());
string t_create = "CREATE TABLE ea_dsc (dsc_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "" ea_symb TEXT NOT NULL, dt_from TEXT NOT NULL, dt_to TEXT, magic_buy INTEGER NOT NULL, "" magic_sell INTEGER NOT NULL, version TEXT NOT NULL, ea_method TEXT NOT NULL)";
if(!DatabaseExecute(db_handle, t_create))
Print("Failed to create table with code ", GetLastError());
string t_add = "INSERT INTO ea_dsc (ea_symb, dt_from, dt_to, magic_buy, magic_sell, version, ea_method)""VALUES ('EURUSD', 'dt_from', NULL, '123', '456', 'version', 'ea_method')";
if(!DatabaseExecute(db_handle, t_add))
Print("Failed to add table data with code ", GetLastError());
DatabaseClose(db_handle);
}
db_handle = DatabaseOpen("test3", DATABASE_OPEN_COMMON | DATABASE_OPEN_READWRITE);
if (db_handle != INVALID_HANDLE)
{
// Запросstring s_quer = "SELECT dsc_id, ea_symb, dt_from, dt_to, magic_buy,""magic_sell, version, ea_method FROM ea_dsc WHERE ea_symb = ?1";
int c_request = DatabasePrepare(db_handle, s_quer);
if (c_request != INVALID_HANDLE)
{
if (DatabaseBind(c_request, 0, "EURUSD"))
if (DatabaseRead(c_request))
{
Print("Found!");
}
elsePrintFormat("Error=%d", GetLastError());
DatabaseFinalize(c_request);
}
DatabaseClose(db_handle);
}
//---return(INIT_SUCCEEDED);
}
Come si installano gli EA dal mercato? Ho diversi terminali. Premendo download nel mercato, si apre di default il terminale sbagliato. L'ho cancellato. Ora non succede nulla dopo aver premuto il pulsante "download".
Vladimir Makhnin #: Come si installano gli EA dal mercato? Ho diversi terminali. Ho premuto download nel mercato e per default è stato aperto il terminale sbagliato. L'ho cancellato. Ora non succede nulla dopo che ho premuto il pulsante "download".
Era nel thread successivo, non devi andare lontano:
enum LIST
{
L01=111, // ITEM 1
L02=222, // ITEM 2
L03=333, // ITEM 3
L04=444, // ITEM 4
L05=555, // ITEM 5
L06=666, // ITEM 6
L07=777, // ITEM 7
L08=888, // ITEM 8
};
input LIST LISTING_01=L01;
input LIST LISTING_02=L02;
input LIST LISTING_03=L03;
input LIST LISTING_04=L04;
input LIST LISTING_05=L05;
input LIST LISTING_06=L06;
input LIST LISTING_07=L07;
input LIST LISTING_08=L08;
LArray[0]=LISTING_01;
LArray[1]=LISTING_02;
LArray[2]=LISTING_03;
LArray[3]=LISTING_04;
LArray[4]=LISTING_05;
LArray[5]=LISTING_06;
LArray[6]=LISTING_07;
LArray[7]=LISTING_08;
È una gioia per i cani spingere tutto in un array LArray a mano invece che in un ciclo. E questo è solo un esempio. In realtà ci potrebbero essere molte enumerazioni.
Non dirò nemmeno nulla sulla mancanza di enum e dell'enumerazione ENUM_TIMEFRAMES. È noioso.
x572intraday #: Perché i parametri di input non possono essere enumerati in un ciclo? Perché ci state punendo?
Mi unisco alla domanda.
Anche riguardo a enum: se c'è la funzione EnumToString, perché non StringToEnum - qualche compito incredibilmente complesso lì?
Salvare i valori di enum nel database come numeri non è un'opzione, perché se si aggiunge un nuovo valore a enum nel mezzo - ecco, i dati nel database si sono trasformati in una zucca, e sono illeggibili come numeri, non si possono visualizzare con gli occhi.
Sto lottando da un paio d'ore cercando di leggere i dati dal database e non ci riesco.
Ecco il codice per i test.
Brevemente. Viene creato un database con una tabella (se il database esiste, la tabella viene cancellata e ricreata). Una singola riga viene aggiunta alla tabella.
Poi il database viene chiuso e riaperto. La selezione semplice di questo record è fatta, ma il comando restituisce l'errore che il risultato della query è vuoto.
Controllato attraverso l'IDE - tutto è selezionato dalla stessa query. Non riesco a capire se questo è un bug o una correzione?
Risultato del lavoro:
Inoltre, codice completo allegato
Perché non si può passare attraverso i parametri d'ingresso in un ciclo? Perché ci punite così?
Che senso ha fare questo? Condividi il segreto...
Premendo download nel mercato, si apre di default il terminale sbagliato. L'ho cancellato. Ora non succede nulla dopo aver premuto il pulsante "download".
Come si installano gli EA dal mercato? Ho diversi terminali.
Ho premuto download nel mercato e per default è stato aperto il terminale sbagliato. L'ho cancellato. Ora non succede nulla dopo che ho premuto il pulsante "download".
con quale browser lo scarichi?
Che senso ha fare questo? Condividi il segreto...
Era nel thread successivo, non devi andare lontano:
È una gioia per i cani spingere tutto in un array LArray a mano invece che in un ciclo. E questo è solo un esempio. In realtà ci potrebbero essere molte enumerazioni.
Non dirò nemmeno nulla sulla mancanza di enum e dell'enumerazione ENUM_TIMEFRAMES. È noioso.Non parlerò nemmeno della mancanza di enum e dell'enumerazione ENUM_TIMEFRAMES.
Una volta ho provato a fare un superamento simile per il bene dell'interesse:
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Comunicare con gli sviluppatori tramite Service Desk!
Mihail Matkovskij, 2019.10.05 22:07
Sarà molto utile se avete bisogno di fare un offset o uno spostamento a destra/sinistra di qualsiasi numero di costanti. Ecco cosa ho ottenuto:
Offset di 1:
Offset di 2:
Tuttavia, questo metodo perde ancora in velocità rispetto al metodo dello switch.
Perché i parametri di input non possono essere enumerati in un ciclo? Perché ci state punendo?
Mi unisco alla domanda.
Anche riguardo a enum: se c'è la funzione EnumToString, perché non StringToEnum - qualche compito incredibilmente complesso lì?
Salvare i valori di enum nel database come numeri non è un'opzione, perché se si aggiunge un nuovo valore a enum nel mezzo - ecco, i dati nel database si sono trasformati in una zucca, e sono illeggibili come numeri, non si possono visualizzare con gli occhi.
C'è un modo per passare esplicitamente un valore NULL al parametro della query del database?
Questo è il tipo di costrutto che causa un errore di compilazione:
res = DatabaseBind(request, column, NULL);DatabaseBind(request, column, "");