Ich versuche schon seit einigen Stunden, Daten aus der Datenbank zu lesen, und es gelingt mir nicht.
Hier ist der Code für die Tests.
Kurz und bündig. Es wird eine Datenbank mit einer Tabelle erstellt (wenn die Datenbank existiert, wird die Tabelle gelöscht und neu erstellt). Der Tabelle wird eine einzige Zeile hinzugefügt.
Dann wird die Datenbank geschlossen und erneut geöffnet. Die einfache Auswahl dieses Datensatzes wird durchgeführt, aber der Befehl gibt den Fehler zurück, dass das Abfrageergebnis leer ist.
Überprüft durch IDE - alles wird durch dieselbe Abfrage ausgewählt. Ich kann nicht herausfinden, ob dies ein Fehler oder eine Korrektur ist?
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);
}
Wie installiere ich EAs vom Markt? Ich habe mehrere Terminals. Wenn ich im Markt auf Download drücke, wird standardmäßig das falsche Terminal geöffnet. Ich habe sie gelöscht. Nach dem Drücken der Schaltfläche "Herunterladen" geschieht nichts mehr.
Vladimir Makhnin #: Wie installiere ich EAs vom Markt? Ich habe mehrere Terminals. Ich habe im Markt auf Download geklickt und standardmäßig wurde das falsche Terminal geöffnet. Ich habe es gelöscht. Jetzt passiert nichts mehr, nachdem ich die Taste "Download" gedrückt habe.
Was ist der Sinn dieser Aktion? Teilen Sie das Geheimnis...
Es war im nächsten Thread, Sie müssen nicht weit gehen:
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 ist ein wahres Vergnügen, alles von Hand in ein LArray-Array zu schieben, anstatt eine Schleife zu verwenden. Und das ist nur ein Beispiel. In Wirklichkeit könnte es eine Vielzahl von Aufzählungen geben.
Über das Fehlen der Aufzählung enum und ENUM_TIMEFRAMES will ich gar nicht erst reden. Es ist ermüdend.
Dies ist sehr nützlich, wenn Sie einen Versatz oder eine Rechts-/Linksverschiebung um eine beliebige Anzahl von Konstanten vornehmen müssen. Hier ist das Ergebnis:
x572intraday #: Warum können die Eingabeparameter nicht in einer Schleife aufgezählt werden? Warum bestrafen Sie uns?
Ich schließe mich der Frage an.
Auch über enum: Wenn es EnumToString Funktion, warum nicht StringToEnum - einige unglaublich komplexe Aufgabe dort?
Das Speichern von Enum-Werten in der Datenbank als Zahlen ist keine Option, denn wenn man in der Mitte einen neuen Wert zu Enum hinzufügt, verwandeln sich die Daten in der Datenbank in einen Kürbis, und sie sind als Zahlen unlesbar, man kann sie nicht mit den Augen sehen.
Ich versuche schon seit einigen Stunden, Daten aus der Datenbank zu lesen, und es gelingt mir nicht.
Hier ist der Code für die Tests.
Kurz und bündig. Es wird eine Datenbank mit einer Tabelle erstellt (wenn die Datenbank existiert, wird die Tabelle gelöscht und neu erstellt). Der Tabelle wird eine einzige Zeile hinzugefügt.
Dann wird die Datenbank geschlossen und erneut geöffnet. Die einfache Auswahl dieses Datensatzes wird durchgeführt, aber der Befehl gibt den Fehler zurück, dass das Abfrageergebnis leer ist.
Überprüft durch IDE - alles wird durch dieselbe Abfrage ausgewählt. Ich kann nicht herausfinden, ob dies ein Fehler oder eine Korrektur ist?
Ergebnis der Arbeit:
Außerdem ist der vollständige Code beigefügt
Warum können Sie die Eingangsparameter nicht in einer Schleife durchlaufen? Warum bestrafen Sie uns auf diese Weise?
Was ist der Sinn dieser Aktion? Teilen Sie das Geheimnis...
Wenn ich im Markt auf Download drücke, wird standardmäßig das falsche Terminal geöffnet. Ich habe sie gelöscht. Nach dem Drücken der Schaltfläche "Herunterladen" geschieht nichts mehr.
Wie installiere ich EAs vom Markt? Ich habe mehrere Terminals.
Ich habe im Markt auf Download geklickt und standardmäßig wurde das falsche Terminal geöffnet. Ich habe es gelöscht. Jetzt passiert nichts mehr, nachdem ich die Taste "Download" gedrückt habe.
Mit welchem Browser laden Sie herunter?
Was ist der Sinn dieser Aktion? Teilen Sie das Geheimnis...
Es war im nächsten Thread, Sie müssen nicht weit gehen:
Es ist ein wahres Vergnügen, alles von Hand in ein LArray-Array zu schieben, anstatt eine Schleife zu verwenden. Und das ist nur ein Beispiel. In Wirklichkeit könnte es eine Vielzahl von Aufzählungen geben.
Über das Fehlen der Aufzählung enum und ENUM_TIMEFRAMES will ich gar nicht erst reden. Es ist ermüdend.Das Fehlen von enum und ENUM_TIMEFRAMES Aufzählung will ich gar nicht erst erwähnen.
Vor einiger Zeit habe ich versucht, aus Interesse eine ähnliche Überschreitung zu machen:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Kommunizieren Sie mit Entwicklern über Service Desk!
Mihail Matkovskij, 2019.10.05 22:07
Dies ist sehr nützlich, wenn Sie einen Versatz oder eine Rechts-/Linksverschiebung um eine beliebige Anzahl von Konstanten vornehmen müssen. Hier ist das Ergebnis:
Versetzt um 1:
Versetzt um 2:
Diese Methode ist jedoch immer noch weniger schnell als die Switch-Methode.
Warum können die Eingabeparameter nicht in einer Schleife aufgezählt werden? Warum bestrafen Sie uns?
Ich schließe mich der Frage an.
Auch über enum: Wenn es EnumToString Funktion, warum nicht StringToEnum - einige unglaublich komplexe Aufgabe dort?
Das Speichern von Enum-Werten in der Datenbank als Zahlen ist keine Option, denn wenn man in der Mitte einen neuen Wert zu Enum hinzufügt, verwandeln sich die Daten in der Datenbank in einen Kürbis, und sie sind als Zahlen unlesbar, man kann sie nicht mit den Augen sehen.
Gibt es eine Möglichkeit, explizit einen NULL-Wert an den Datenbankabfrageparameter zu übergeben?
Dies ist die Art von Konstrukt, die einen Kompilierzeitfehler verursacht:
res = DatabaseBind(request, column, NULL);DatabaseBind(request, column, "");