//--- COMPRENDE #include <MQH\Lib\SQLite3\SQLite3Base.mqh>
//--- VARIABILI
CSQLite3Base sql3;
CSQLite3Table testTable;
CSQLite3Cell testCell;
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+voidOnStart()
{
//--- APRIRE LA CONNESSIONE AL DATABASEif(sql3.Connect("test.db3")!=SQLITE_OK)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
elsePrint("CONNECTED TO DB.");
//--- TABELLA CEATEif(sql3.Query("DROP TABLE IF EXISTS [test]")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
if(sql3.Query("CREATE TABLE [test] ([i] INT)")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
elsePrint("TABLE CREATED.");
//--- INSERIRE IL VALOREif(sql3.Query("INSERT INTO [test] VALUES(1)")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
elsePrint("VALUE \"1\" INSERTED.");
//--- CONTARE LE RIGHE DELLA TABELLAif(sql3.Query(testTable,"SELECT COUNT(*) FROM [test]")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
testTable.Cell(0,0,testCell);
Print("RETRIEVED DATA FROM TABLE : Count(*)=",testCell.GetInt());
}
//+------------------------------------------------------------------+
+aggiunta Stampa e test __int d0 all'interno di int ViewInt() a scopo di confronto
Print(__FUNCSIG__," || ENTER FUNCTION");
//--- TEST d0
__int d0={0}; Print ("TEST d0: d0.v=",d0.v, " DATA d.b:"); ArrayPrint(d0.b);
ViewArray(d0.b,0,4);
Print("ViewArray OUTPUT: d0.v=",d0.v," DATA d.b:"); ArrayPrint(d0.b);
//--- d - AS WAS+alcune Stampe
__int d; d.v=0;Print("\n","d AS WAS: d.v=",d.v," DATA d.b:"); ArrayPrint(d.b);
ViewArray(d.b,0,4);
Print("ViewArray OUTPUT: d.v=",d.v, " DATA d.b:"); ArrayPrint (d.b);
//---return(d.v);
OUTPUT:
//COLLEGATO AL DB.//TABELLA CREATA.//VALORE "1" INSERITO.//int CSQLite3Cell::GetInt() ||INVIO FUNZIONE//int CSQLite3Cell::GetInt() || type=CT_INT case//int CByteImg::ViewInt() ||INVIO FUNZIONE//TEST d0: d0.v=0 DATI d.b://0 0 0 0//ViewArray OUTPUT: d0.v=1 DATA d.b://1 0 0 0// //d COME ERA: d.v=0 DATI d.b://0 0 0 0//ViewArray OUTPUT: d.v=0 DATA d.b://10 0 0/Dati recuperati da una tabella: Count(*)=0
Ho letto il tuo codice, @o_o, prima di scrivere i post precedenti e ho visto perfettamente che c'è un'unione - ecco perché questo bug è sembrato strano anche a me, ma è ovviamente lì.
Tuttavia, non ho trovato il bug nella lib(più in basso nel codice - in ViewArray e nei costruttori__int). Tuttavia, posso supporre da ciò che è evidenziato in OUTPUT (ovviamente strano per l'unione) che il compilatore "gentile" non abbia visto il cambiamento in __int dopo ViewArray (che opera solo su .b) e abbia restituito l'ultimo valore noto per .v = 0 (evidenziato) dalla cache "senza guardare" a d. v stesso.
Ma qui ho solo supposizioni, perché non ho visto il compilatore stesso, e ripeto, non ho trovato alcun errore relativo a questo bug nel vostro codice.
rvkstudent: Ricevo 2 avvisi quando eseguo lo script:
2017.09.26 07:39:35.569 SQLite3Test'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' non è la versione a 64 bit 2017.09.26 07:39:35.602 SQLite3Test (GAZP,H1) Impossibile caricare 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' [193]
Entrambe le librerie 32 e 64 erano presenti nell'archivio. Ho Win7 64. Non capisco: cosa devo fare?
nulla
Questa è la reazione di MT all'importazione, ma il codice continua a funzionare.
Mi rendo conto che è difficile ottenere aiuto da voi. Dovrò trovare una soluzione da solo. Tieni presente che il tuo esempio non funziona ovunque. Non so perché.
Script di test:
+aggiunta Stampa e test __int d0 all'interno di int ViewInt() a scopo di confronto
OUTPUT:
Ho letto il tuo codice, @o_o, prima di scrivere i post precedenti e ho visto perfettamente che c'è un'unione - ecco perché questo bug è sembrato strano anche a me, ma è ovviamente lì.
Tuttavia, non ho trovato il bug nella lib(più in basso nel codice - in ViewArray e nei costruttori __int) . Tuttavia, posso supporre da ciò che è evidenziato in OUTPUT (ovviamente strano per l'unione) che il compilatore "gentile" non abbia visto il cambiamento in __int dopo ViewArray (che opera solo su .b) e abbia restituito l'ultimo valore noto per .v = 0 (evidenziato) dalla cache "senza guardare" a d. v stesso.
Ma qui ho solo supposizioni, perché non ho visto il compilatore stesso, e ripeto, non ho trovato alcun errore relativo a questo bug nel vostro codice.
Pubblicato un nuovo articolo su SQL e MQL5: lavorare con il database SQLite:
Autore: o_O
Ehi amico, ottimo articolo.
Buon pomeriggio,
Ricevo 2 avvisi quando eseguo lo script:
2017.09.26 07:39:35.569 SQLite3Test 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' non è la versione a 64 bit.
Entrambe le librerie 32 e 64 erano presenti nell'archivio. Ho Win7 64. Non capisco: cosa devo fare?
Ricevo 2 avvisi quando eseguo lo script:
2017.09.26 07:39:35.569 SQLite3Test 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' non è la versione a 64 bit
2017.09.26 07:39:35.602 SQLite3Test (GAZP,H1) Impossibile caricare 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' [193]
Entrambe le librerie 32 e 64 erano presenti nell'archivio. Ho Win7 64. Non capisco: cosa devo fare?
nulla
Questa è la reazione di MT all'importazione, ma il codice continua a funzionare.
Nell'appendice è presente una correzione per la funzione PrintTable.
Nuovo articolo SQL e MQL5: Lavorare con il database SQLite è stato pubblicato:
Autore: o_O
Avete una versione a 32 bit?
Il problema è che ho molti clienti a 32 bit...
Salve.
Quando eseguo SQLite3Test.mq5 ottengo l'errore 14 (SQLITE_CANTOPEN). Cosa sto sbagliando?
Salve.
Quando eseguo SQLite3Test.mq5 ottengo l'errore 14 (SQLITE_CANTOPEN).
Cosa sto sbagliando?
non eseguo il debug o il logging della posizione dell'errore
non eseguire il debug o non stampare la posizione dell'errore nel registro
1. Eseguo lo script dall'archivio, "così com'è".
2. Eseguire il debug "Su dati reali". Inserisco la prima funzione:
3. Arrivo a questo punto del file SQLite3Base.mqh:
4. Dopo aver eseguito la riga
int res=::sqlite3_open(file,m_db);ottengo res pari a 14. Questa è la fine dello script.
Anche se, a giudicare dal testo dell'articolo, dovrebbe essere
"В результате работы появится файл базы данных в папке установки терминала MetaTrader 5."Quale può essere il motivo? Da che parte guardare?
Ho controllato lo script scaricato
Tutto ha funzionato correttamente la prima volta
Serhii Shevchuk:
In che direzione guardare?
inizia qui
Ho controllato lo script scaricato
L'ho controllato anch'io:
Ancora errore 14.
Mi rendo conto che è difficile ottenere aiuto da voi. Dovrò trovare una soluzione da solo. Tieni presente che il tuo esempio non funziona ovunque. Non so perché.