Llevo un par de horas intentando leer datos de la base de datos y no lo consigo.
Aquí está el código para las pruebas.
Brevemente. Se crea una base de datos con una tabla (si la base de datos existe, se elimina la tabla y se vuelve a crear). Se añade una sola fila a la tabla.
A continuación, la base de datos se cierra y se abre de nuevo. La selección simple de este registro se realiza, pero el comando devuelve el error de que el resultado de la consulta está vacío.
Comprobado a través del IDE - todo está seleccionado por la misma consulta. ¿No se puede saber si esto es un error o una solución?
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);
}
¿Cómo se instalan los EAs desde el Market? Tengo varios terminales. pulso descargar en el mercado, el terminal equivocado se abre por defecto. Lo he borrado. Ahora no ocurre nada después de pulsar el botón de "descarga".
Vladimir Makhnin #: ¿Cómo se instalan los EAs desde el Market? Tengo varios terminales. He pulsado descargar en el mercado y por defecto se ha abierto un terminal equivocado. Lo he borrado. Ahora no pasa nada después de pulsar el botón de "descarga".
¿Qué sentido tiene hacer esto? Comparte el secreto...
Estaba en el siguiente hilo, no hay que ir muy lejos:
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;
Es una delicia de perro meter todo en un array LArray a mano en lugar de un bucle. Y esto es sólo un ejemplo. En realidad podría haber muchas enumeraciones.
Ni siquiera diré nada sobre la falta de enumeración enum y ENUM_TIMEFRAMES. Es cansino.
x572intraday #: ¿Por qué no se pueden enumerar los parámetros de entrada en un bucle? ¿Por qué nos castiga?
Me uno a la pregunta.
También sobre enum: Si existe la función EnumToString, ¿por qué no StringToEnum - alguna tarea increíblemente compleja allí?
Guardar los valores del enum en la base de datos como números no es una opción, porque si se añade un nuevo valor al enum en el medio - eso es todo, los datos en la base de datos se convirtieron en una calabaza, y son ilegibles como números, no se pueden ver con los ojos.
Llevo un par de horas intentando leer datos de la base de datos y no lo consigo.
Aquí está el código para las pruebas.
Brevemente. Se crea una base de datos con una tabla (si la base de datos existe, se elimina la tabla y se vuelve a crear). Se añade una sola fila a la tabla.
A continuación, la base de datos se cierra y se abre de nuevo. La selección simple de este registro se realiza, pero el comando devuelve el error de que el resultado de la consulta está vacío.
Comprobado a través del IDE - todo está seleccionado por la misma consulta. ¿No se puede saber si esto es un error o una solución?
Resultado del trabajo:
Además, se adjunta el código completo
¿Por qué no se pueden recorrer los parámetros de entrada en un bucle? ¿Por qué nos castiga así?
¿Qué sentido tiene hacer esto? Comparte el secreto...
pulso descargar en el mercado, el terminal equivocado se abre por defecto. Lo he borrado. Ahora no ocurre nada después de pulsar el botón de "descarga".
¿Cómo se instalan los EAs desde el Market? Tengo varios terminales.
He pulsado descargar en el mercado y por defecto se ha abierto un terminal equivocado. Lo he borrado. Ahora no pasa nada después de pulsar el botón de "descarga".
¿con qué navegador se descarga?
¿Qué sentido tiene hacer esto? Comparte el secreto...
Estaba en el siguiente hilo, no hay que ir muy lejos:
Es una delicia de perro meter todo en un array LArray a mano en lugar de un bucle. Y esto es sólo un ejemplo. En realidad podría haber muchas enumeraciones.
Ni siquiera diré nada sobre la falta de enumeración enum y ENUM_TIMEFRAMES. Es cansino.Ni siquiera mencionaré la falta de enumeración enum y ENUM_TIMEFRAMES.
Una vez intenté hacer un rebasamiento similar por interés:
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Comuníquese con los desarrolladores a través de Service Desk
Mihail Matkovskij, 2019.10.05 22:07
Será muy útil si necesitas hacer un desplazamiento o un cambio a la derecha/izquierda por cualquier número de constantes. Esto es lo que tengo:
Desplazamiento por 1:
Desplazamiento por 2:
Sin embargo, este método sigue perdiendo en velocidad con respecto al método del interruptor.
¿Por qué no se pueden enumerar los parámetros de entrada en un bucle? ¿Por qué nos castiga?
Me uno a la pregunta.
También sobre enum: Si existe la función EnumToString, ¿por qué no StringToEnum - alguna tarea increíblemente compleja allí?
Guardar los valores del enum en la base de datos como números no es una opción, porque si se añade un nuevo valor al enum en el medio - eso es todo, los datos en la base de datos se convirtieron en una calabaza, y son ilegibles como números, no se pueden ver con los ojos.
¿Hay alguna forma de pasar explícitamente un valor NULL al parámetro de consulta de la base de datos?
Este es el tipo de construcción que provoca un error de compilación:
res = DatabaseBind(request, column, NULL);DatabaseBind(request, column, "");