Discusión sobre el artículo "SQL y MQL5: Trabajando con la base de datos SQLite" - página 4

 

Serhii Shevchuk:

Me doy cuenta de que eres un hombre difícil de ayudar.

¿Cómo puedo ayudarte si no me dices cómo has llegado a tu problema?

A lo mejor estás corriendo en un mac, o tienes una carpeta con permisos de sólo lectura.

No se cual puede ser tu sistema de archivos.

Del foro de coches:

xxx: crujido del motor después de cambiar los tapones de aceite. Ayuda para entender las causas y cuales pueden ser las consecuencias

uuu: puede haber muchas causas, pero las consecuencias pueden ser diferentes.

xxx: Gracias.



Todavía no sé por qué.

Cuando lo sepas, házmelo saber.

 
No leí todo el artículo, ya que estas bibliotecas son un lío. Aunque me quedé con algunas cosas ya que era lo primero que veía sobre este tema. Luego me di cuenta de que necesito leer documentación oficial porque de un artículo así no se aprende nada. De hecho, diré que la información sobre las funciones sqlite3_bind_xxx no es correcta. El autor del artículo es engañoso. El propósito de estas funciones es completamente diferente. Si el autor del artículo no estudió el tema por sí mismo o no quería simplemente escribir sobre ello, sería mejor no escribir. Después de leer esa tontería sobre esta funcionalidad en el artículo, tuve que pensarlo todo durante más de una hora. Exactamente. Acabo de empezar a trabajar con DBMS hace una semana. Le estoy cogiendo el truco. Por eso no era fácil de entender. Y cuando me he dado cuenta de para qué sirven las funciones sqlite3_bind_xxx me he quedado sorprendido. No me esperaba algo así del autor del artículo. Pensaba que era un profesional.
 
No he probado el material adjunto al artículo, pero tengo un error similar en los pluses. No puedo abrir / crear una base en la ruta pasada, siempre se crea en el directorio del proyecto, o en la ruta especificada desde el directorio del proyecto (/nueva carpeta/miDB.db)...

Heimportado las funciones de crear y cerrar la base y he intentado crearla. Como resultado, tengo la base de datos creada en las descargas.
 
---:

Puede haber muchas causas y muchas consecuencias.

Gracias, eso me ha ayudado. Problema resuelto, pregunta eliminada.

 
Tengo una situación muy interesante) ayer todo fue creado y trabajado (aunque de algo en la carpeta "Descargas") Pero, durante la noche el archivo de base dejó de ser creado, pero la base en sí funciona como debería para las pruebas trató de crear una base colocada en la memoria sqlite3_open(":memoria:"") - la base se crea, los datos se cargan / leen.

Tal vez un problema con los derechos de acceso, ¿qué piensa usted? cómo comprobar esto en Windows sabe quién?
 
Andrey Azatskiy:
Tengo una situación muy interesante) ayer todo fue creado y trabajado (aunque de algo en la carpeta "Descargas") Pero, durante la noche el archivo de base dejó de ser creado, pero la base en sí funciona como debería para las pruebas trató de crear una base colocada en la memoria sqlite3_open(":memoria:"") - la base se crea, los datos se cargan / leen.

Tal vez un problema con los derechos de acceso, ¿qué piensa usted? cómo comprobar esto en Windows sabe quién?

En realidad, es fácil de comprobar. Trate de poner la base de datos en "Mis Documentos" para empezar. Si funciona, entonces no es un problema de derechos. Pero en general, depende de cómo lo hayas hecho. Yo personalmente me pasé 2 semanas, hasta que creé todo lo que necesitaba para trabajar con SQLite3. Tuve que traducir la documentación, porque en ruso no hay información adecuada sobre este tema. Como en este artículo hay un montón de basura y levak. Arriba he atraído a uno de los momentos. Entonces me detuve y estudié el tema yo mismo.

Tengo una envoltura para ello:

//==================================================================================================================================================================================
// Envoltorio básico para 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);
}

Aquí está la función stringToUtf8:

//==================================================================================================================================================================================
// Convertir una cadena en una matriz de bytes utf-8. =========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // Cadena a convertir en array en codificación utf-8
                  uchar& utf8[],                                 // Matriz en codificación utf-8, en la que se colocará la cadena convertida strToConvert
                  const bool untilTerminator = true) export {    // Número de caracteres que serán copiados al array utf8 y convertidos a la codificación utf-8.
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

Lo tengo en una biblioteca separada.

 
Viktar Dzemikhau:

En realidad, es fácil de comprobar. Para empezar, prueba a poner la base de datos en "Mis documentos". Si funciona, entonces no es una cuestión de derechos. Pero en general, depende de cómo lo hayas hecho todo. Yo personalmente me pasé 2 semanas, hasta que creé todo lo que necesitaba para trabajar con SQLite3. Tuve que traducir la documentación, porque en ruso no hay información adecuada sobre este tema. Como en este artículo hay un montón de basura y levak. Arriba he atraído a uno de los momentos. Entonces me di por vencido y estudié el tema por mí mismo.

Tengo una envoltura para esto:

Y aquí está la función stringToUtf8:

La tengo en una librería aparte.

Sí, tuve 2 errores:
1 - codificación (muchas gracias por la función, yo no sabía cómo traducir normalmente a UTF -8)
2 - permisos.


 
Andrey Azatskiy:

Sí, tenía 2 errores:
1 - codificación (muchas gracias por la función, no sabía cómo traducir normalmente a UTF -8)
2 - permisos.


Sí, de nada. Recuerdo lo mucho que luché con esto yo mismo. Con artículos tan lamentables. Hay una opción. O lees la documentación oficial o preguntas. No había nadie a quien preguntar. Me la tuve que estudiar yo. La cuestión es que si escribes en C++, hay alguien a quien preguntar. Pero cuando escribes a través de una junta y lo transfieres a µl, hay poca gente que pueda ayudarte. Es demasiado difícil para los usuarios del Plus meterse en ello)))

 

Creo que he encontrado una fuga de memoria:

En SQLite3Base.mqh línea 250

::sqlite3_finalize(stmt); // limpio

Debería ser

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

En realidad, es fácil de comprobar. Para empezar, prueba a poner la base de datos en "Mis documentos". Si funciona, entonces no es una cuestión de derechos. Pero en general, depende de cómo lo hayas hecho todo. Yo personalmente me pasé 2 semanas, hasta que creé todo lo que necesitaba para trabajar con SQLite3. Tuve que traducir la documentación, porque en ruso no hay información adecuada sobre este tema. Como en este artículo hay un montón de basura y levak. Arriba he atraído a uno de los momentos. Entonces me di por vencido y estudié el tema por mí mismo.

Tengo una envoltura para esto:

Y aquí está la función stringToUtf8:

La tengo en una librería separada

y la uso para convertir a utf

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