Discussione sull’articolo "SQL e MQL5: Lavorare con il database SQLite" - pagina 4

 

Serhii Shevchuk:

Mi rendo conto che lei è un uomo difficile da aiutare.

Come posso aiutarla se non mi dice come è arrivato al suo problema.

Forse stai usando un Mac o hai una cartella con permessi di sola lettura.

Non so quale possa essere il tuo filesystem.

Dal forum sulle auto:

xxx: scoppiettio del motore dopo la sostituzione dei tappi dell'olio. Aiuto per capire le cause e quali potrebbero essere le conseguenze

uuu: le cause possono essere molteplici, ma le conseguenze possono essere diverse.

xxx: Grazie.



Non so ancora perché.

Quando lo scoprirai, fammelo sapere.

 
Non ho letto tutto l'articolo, perché queste biblioteche sono un disastro. Tuttavia, ho preso spunto da alcune cose perché era la prima cosa che vedevo su questo argomento. Poi ho capito che devo leggere la documentazione ufficiale, perché non si può imparare nulla da un articolo del genere. In effetti, devo dire che le informazioni sulle funzioni sqlite3_bind_xxx non sono corrette. L'autore dell'articolo è fuorviante. Lo scopo di queste funzioni è completamente diverso. Se l'autore dell'articolo non ha studiato personalmente l'argomento o non vuole solo scriverlo, sarebbe meglio non scriverlo. Dopo aver letto le assurdità su questa funzionalità nell'articolo, ho dovuto riflettere per più di un'ora. Esattamente. Ho iniziato a lavorare con i DBMS solo una settimana fa. Ci sto prendendo la mano. Ecco perché non era facile da capire. E quando ho capito a cosa servono le funzioni sqlite3_bind_xxx, sono rimasto sorpreso. Non mi aspettavo una cosa del genere dall'autore dell'articolo. Pensavo che fosse un professionista.
 
Non ho provato il materiale allegato all'articolo, ma ho un errore simile nei plus. Non riesco ad aprire/creare una base nel percorso passato, viene sempre creata o nella directory del progetto, o nel percorso specificato dalla directory del progetto (/nuova cartella/myDB.db)...

Hoimportato le funzioni di creazione e chiusura della base e ho provato a crearla. Il risultato è che ho il database creato in loads.
 
---:

Le cause e le conseguenze possono essere molteplici.

Grazie, è stato utile. Problema risolto, domanda eliminata.

 
Ho una situazione molto interessante) proprio ieri tutto è stato creato e funzionava (anche se da qualcosa nella cartella "Downloads") Ma, durante la notte il file di base ha smesso di essere creato, ma la base stessa funziona come dovrebbe per i test provato a creare una base posta in memoria sqlite3_open(":memory:"") - la base viene creata, i dati vengono caricati / letti.

Forse un problema con i diritti di accesso, cosa ne pensi? come controllare questo in Windows sa chi?
 
Andrey Azatskiy:
Ho una situazione molto interessante) proprio ieri tutto è stato creato e ha funzionato (anche se da qualcosa nella cartella "Downloads") Ma, durante la notte il file di base ha smesso di essere creato, ma la base stessa funziona come dovrebbe per i test ha provato a creare una base posto in memoria sqlite3_open(":memory:"") - la base viene creata, i dati vengono caricati / leggere.

Forse un problema con i diritti di accesso, che cosa ne pensi? come controllare questo in Windows sa chi?

È facile da controllare, in realtà. Per cominciare, provare a mettere il database in "Documenti". Se funziona, allora non è un problema di diritti. In generale, però, dipende da come avete fatto. Personalmente ho impiegato 2 settimane per creare tutto ciò che mi serviva per lavorare con SQLite3. Ho dovuto tradurre la documentazione, perché in russo non ci sono informazioni adeguate su questo argomento. Come in questo articolo c'è un sacco di spazzatura e di levak. Qui sopra ho attirato uno dei momenti. Poi mi sono fermato e ho studiato personalmente la questione.

Ho un wrapper per questo:

//==================================================================================================================================================================================
// wrapper di base per sqlite3_open_v2. ==============================================================================================================================================
int SQLite3 :: sqlite3_open(const string& filename, intptr_t& dbHandle, int flags) {
  uchar utf8_filename[];
  stringToUtf8(filename, utf8_filename);
  return sqlite3_open_v2(utf8_filename, dbHandle, flags, 0);
}

Ecco la funzione stringToUtf8:

//==================================================================================================================================================================================
// Converte una stringa in un array di byte utf-8. =========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // Stringa da convertire in un array con codifica utf-8
                  uchar& utf8[],                                 // Array in codifica utf-8, in cui sarà inserita la stringa convertita strToConvert
                  const bool untilTerminator = true) export {    // Numero di caratteri che saranno copiati nell'array utf8 e convertiti in codifica utf-8.
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

L'ho in una libreria separata.

 
Viktar Dzemikhau:

In realtà è facile da controllare. Per cominciare, provate a mettere il database in "Documenti". Se funziona, allora non è una questione di diritti. Ma in generale, dipende da come avete fatto tutto. Personalmente ho impiegato 2 settimane per creare tutto ciò che mi serviva per lavorare con SQLite3. Ho dovuto tradurre la documentazione, perché in russo non ci sono informazioni adeguate su questo argomento. Come in questo articolo c'è un sacco di spazzatura e di levak. Qui sopra ho attirato uno dei momenti. Poi mi sono arreso e ho studiato il problema da solo.

Ho un involucro per questo:

Ed ecco la funzione stringToUtf8:

L'ho in una libreria separata.

Sì, ho avuto 2 errori:
1 - codifica (grazie mille per la funzione, non sapevo come tradurre normalmente in UTF -8)
2 - permessi.


 
Andrey Azatskiy:

Sì, ho avuto 2 errori:
1 - codifica (grazie mille per la funzione, non sapevo come tradurre normalmente in UTF -8)
2 - permessi.


Sì, non c'è di che. Ricordo quanti problemi ho avuto io stesso con questo. Con tali articoli di sventura. C'è un'opzione. O si legge la documentazione ufficiale o si chiede. Non c'era nessuno a cui chiedere. Ho dovuto studiarla da solo. Il punto è che se si scrive in C++, c'è qualcuno a cui chiedere. Ma quando scrivi attraverso una guarnizione e la trasferisci in µl, ci sono poche persone che possono aiutarti. È troppo difficile per gli utenti Plus entrarci)))

 

Credo di aver trovato una perdita di memoria:

In SQLite3Base.mqh riga 250

::sqlite3_finalize(stmt); // pulito

Dovrebbe essere:

::sqlite3_finalize(pstmt); // pulito
 
Viktar Dzemikhau:

In realtà è facile da controllare. Per cominciare, provate a mettere il database in "Documenti". Se funziona, allora non è una questione di diritti. Ma in generale, dipende da come avete fatto tutto. Personalmente ho impiegato 2 settimane per creare tutto ciò che mi serviva per lavorare con SQLite3. Ho dovuto tradurre la documentazione, perché in russo non ci sono informazioni adeguate su questo argomento. Come in questo articolo c'è un sacco di spazzatura e di levak. Qui sopra ho attirato uno dei momenti. Poi mi sono arreso e ho studiato il problema da solo.

Ho un involucro per questo:

Ed ecco la funzione stringToUtf8:

L'ho in una libreria separata.

e la uso per convertire in utf

int u2a(string txt,uchar &out[]){ return(StringToCharArray(txt,out))};