Discussion de l'article "SQL et MQL5 : Travailler avec la base de données SQLite" - page 4

 

Serhii Shevchuk:

Je sais qu'il est difficile d'obtenir de l'aide de votre part.

Comment puis-je vous aider si vous ne me dites pas comment vous êtes arrivé à votre problème ?

Vous travaillez peut-être sur un Mac, ou vous avez un dossier avec des permissions de lecture seule.

Je ne sais pas quel est votre système de fichiers.

Depuis le forum automobile :

xxx : crépitement du moteur après remplacement des bouchons d'huile. Aide à la compréhension des causes et des conséquences possibles

uuu : il peut y avoir plusieurs causes, mais les conséquences peuvent être différentes.

xxx : Merci.



Je ne sais pas encore pourquoi.

Quand vous le saurez, faites-le moi savoir.

 
Je n'ai pas lu tout l'article, car ces bibliothèques sont un véritable fouillis. Cependant, j'ai pris quelques éléments pour moi car c'était la première chose que je voyais sur ce sujet. J'ai alors réalisé que je devais lire la documentation officielle, car on ne peut rien apprendre d'un tel article. En fait, je dirai que les informations sur les fonctions sqlite3_bind_xxx ne sont pas correctes. L'auteur de l'article est trompeur. L'objectif de ces fonctions est complètement différent. Si l'auteur de l'article n'a pas étudié le sujet lui-même ou ne veut pas simplement écrire sur le sujet, il serait préférable de ne pas écrire. Après avoir lu ces absurdités sur cette fonctionnalité dans l'article, j'ai dû y réfléchir pendant plus d'une heure. En effet, je viens de commencer à travailler avec un SGBD. J'ai commencé à travailler avec un SGBD il y a une semaine. Je commence à m'y habituer. C'est pourquoi ce n'était pas facile à comprendre. Et quand j'ai compris à quoi servent les fonctions sqlite3_bind_xxx, j'ai été surpris. Je ne m'attendais pas à une telle chose de la part de l'auteur de l'article. Je pensais que c'était un professionnel.
 
Je n'ai pas testé le matériel joint à l'article, mais j'ai une erreur similaire dans les plus. Je n'arrive pas à ouvrir/créer une base sur le chemin passé, elle est toujours créée soit dans le répertoire du projet, soit sur le chemin spécifié à partir du répertoire du projet (/nouveau dossier/myDB.db)...

J'aiimporté les fonctions de création et de fermeture de la base et j'ai essayé de la créer. Résultat, j'ai la base de données créée dans les téléchargements.
 
---:

Il peut y avoir de nombreuses causes et de nombreuses conséquences.

Merci, cela m'a aidé. Problème résolu, question supprimée.

 
J'ai une situation très intéressante) hier encore tout était créé et fonctionnait (bien qu'à partir de quelque chose dans le dossier "Downloads") Mais, du jour au lendemain le fichier de base a cessé d'être créé, mais la base elle-même fonctionne comme il se doit pour des tests essayé de créer une base placée en mémoire sqlite3_open(":memory :"") - la base est créée, les données sont chargées / lues.

Peut-être un problème avec les droits d'accès, qu'en pensez-vous ? comment vérifier cela dans Windows knows who ?
 
Andrey Azatskiy:
J'ai une situation très intéressante) hier encore tout était créé et fonctionnait (bien qu'à partir de quelque chose dans le dossier "Downloads") Mais, du jour au lendemain le fichier de base a cessé d'être créé, mais la base elle-même fonctionne comme il se doit pour des tests essayé de créer une base placée en mémoire sqlite3_open(":memory :"") - la base est créée, les données sont chargées / lues.

Peut-être un problème avec les droits d'accès, qu'en pensez-vous ? comment vérifier cela dans Windows knows who ?

C'est facile à vérifier, en fait. Essayez de placer la base de données dans "Mes documents" pour commencer. Si cela fonctionne, ce n'est pas une question de droits. Mais en général, cela dépend de la manière dont vous avez procédé. Personnellement, j'ai passé deux semaines à créer tout ce dont j'avais besoin pour travailler avec SQLite3. J'ai dû traduire la documentation, car il n'existe pas d'informations adéquates sur ce sujet en russe. Comme dans cet article, il y a beaucoup de bêtises et de levak. J'ai attiré l'attention sur l'un de ces moments. Je me suis alors arrêté et j'ai étudié la question moi-même.

J'ai créé une enveloppe pour cela :

//==================================================================================================================================================================================
// Enveloppe de base pour 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);
}

Voici la fonction stringToUtf8:

//==================================================================================================================================================================================
// Convertit une chaîne de caractères en un tableau d'octets utf-8. =========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // Chaîne à convertir en tableau en encodage utf-8
                  uchar& utf8[],                                 // Tableau en encodage utf-8, dans lequel la chaîne convertie strToConvert sera placée
                  const bool untilTerminator = true) export {    // Nombre de caractères qui seront copiés dans le tableau utf8 et convertis en encodage utf-8.
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

Je l'ai dans une bibliothèque séparée.

 
Viktar Dzemikhau:

C'est facile à vérifier, en fait. Essayez de placer la base de données dans "Mes documents" pour commencer. Si cela fonctionne, ce n'est pas une question de droits. Mais en général, cela dépend de la manière dont vous avez procédé. Personnellement, j'ai passé deux semaines à créer tout ce dont j'avais besoin pour travailler avec SQLite3. J'ai dû traduire la documentation, car il n'existe pas d'informations adéquates sur ce sujet en russe. Comme dans cet article, il y a beaucoup de bêtises et de levak. Ci-dessus, j'ai attiré l'attention sur l'un de ces moments. Puis j'ai abandonné et j'ai étudié la question moi-même.

J'ai une enveloppe pour cela :

Et voici la fonction stringToUtf8:

Je l'ai dans une bibliothèque séparée.

Oui, j'ai eu 2 erreurs :
1 - encodage (merci beaucoup pour la fonction, je ne savais pas comment traduire normalement en UTF -8)
2 - permissions.


 
Andrey Azatskiy:

Oui, j'ai eu 2 erreurs :
1 - encodage (merci beaucoup pour la fonction, je ne savais pas comment traduire normalement en UTF -8)
2 - permissions.


Oui, il n'y a pas de quoi. Je me souviens des problèmes que j'ai eus moi-même. Avec de tels articles de malheur. Il n'y a qu'une option. Soit vous lisez la documentation officielle, soit vous demandez. Il n'y avait personne à qui demander. J'ai dû l'étudier moi-même. Le fait est que si vous écrivez en C++, il y a quelqu'un à qui demander. Mais lorsque vous écrivez à travers un joint et que vous le transférez dans le µl, il y a peu de personnes qui peuvent vous aider. C'est trop difficile pour les utilisateurs de Plus de s'y mettre.)

 

Je pense avoir trouvé une fuite de mémoire :

Dans SQLite3Base.mqh ligne 250

::sqlite3_finalize(stmt); // propre

Devrait être :

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

C'est facile à vérifier, en fait. Essayez de placer la base de données dans "Mes documents" pour commencer. Si cela fonctionne, ce n'est pas une question de droits. Mais en général, cela dépend de la manière dont vous avez procédé. Personnellement, j'ai passé deux semaines à créer tout ce dont j'avais besoin pour travailler avec SQLite3. J'ai dû traduire la documentation, car il n'existe pas d'informations adéquates sur ce sujet en russe. Comme dans cet article, il y a beaucoup de bêtises et de levak. Ci-dessus, j'ai attiré l'attention sur l'un de ces moments. Puis j'ai abandonné et j'ai étudié la question moi-même.

J'ai une enveloppe pour cela :

Et voici la fonction stringToUtf8:

Je l'ai dans une bibliothèque séparée.

et je l'utilise pour convertir en utf

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