Wie liest man das Ergebnis der Funktion mysql_fetch_row in MQL4 ?
Ich entwickle gerade ein Skript, das mit einer MySQL-Datenbank arbeitet, um sie zu lesen, einzufügen, zu löschen und zu ändern.
Das Skript ist umfangreich, aber das Wesentliche der Arbeit mit der Datenbank wird, denke ich, durch eine Funktion verständlich.
Allerdings ist in diesem Beispiel ID des Datensatzes aus der Tabelle zurückgegeben, aber es wird nicht ein Problem sein, wieder zu machen, ich erinnere mich und Text und Zahlen aus der Datenbank zurückgegeben, alles funktioniert.
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+#import "libmysql.dll"int mysql_init(int db);
int mysql_errno(int TMYSQL);
int mysql_real_connect(int TMYSQL, string host, string user, string password, string DB,int port,int socket,int clientflag);
int mysql_real_query(int TMSQL, string query, int length);
int mysql_store_result(int TMSQL);
string mysql_fetch_row(int result);
int mysql_num_rows(int result);
void mysql_free_result(int result);
void mysql_close(int TMSQL);
int mysql_insert_id(int result);
#import//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int mysql; string query = ""; int myerr;
int CompanyID = 0;
int SymbolID = 0;
int LastRecordQuotesID = 0;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool connect() {
mysql = mysql_init(mysql);
if (mysql!=0) Print("allocated");
string host="IP adress"; // меняем на своёstring user="Login"; // меняем на своёstring password="Password"; // меняем на своёstring DB="db_base"; // меняем на своёint clientflag=0;
int port=3306;
string socket="";
int res=mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
int err=GetLastError();
if (res==mysql){
Print("connected");
return(true);
} else {
Print("error=",mysql," ",mysql_errno(mysql)," ");
return(false);
}
return(false);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
if(!connect()) return(0);
//----
CompanyID = CompanyID(AccountCompany(), AccountServer());
//----
mysql_close(mysql);
return(0);
}
//+--------------------------------------------------------------------------------------------+//| Функция поиска и вставки названия компании и сервера для связи. |//+--------------------------------------------------------------------------------------------+//| Переменные: |//| string AccCompany - AccountCompany() |//| string AccServer - AccountServer() |//+--------------------------------------------------------------------------------------------+int CompanyID(string AccCompany = "", string AccServer = ""){
int count_records, result;
string row = "";
query = StringConcatenate("SELECT id FROM Company WHERE Company = \'",AccCompany,"\' AND `Server` = \'",AccServer,"\'");
mysql_real_query(mysql,query,CountLength(query));
myerr = mysql_errno(mysql);
if(myerr > 0) Print("error=",myerr);
result = mysql_store_result(mysql);
count_records = Number_Of_Rows(result);
if (count_records > 0){
row = mysql_fetch_row(result);
mysql_free_result(result);
return( StrToInteger(StringSubstr(row, 8, StringLen(row)-1) ) );
} else {
query = StringConcatenate( "INSERT INTO `Company` (`Company`, `Server`) VALUES (\'",AccCompany ,"\', \'",AccServer,"\')");
mysql_real_query(mysql,query,CountLength(query));
myerr = mysql_errno(mysql);
if(myerr > 0) Print("CompanyID(): error=",myerr);
mysql_free_result(result);
return(mysql_insert_id(mysql));
}
}
//+--------------------------------------------------------------------------------------------+//| Вспомогательная Функция подсчёта колличества символов в передаваемом запросе. |//+--------------------------------------------------------------------------------------------+//| Переменные: |//| string query - Текстовая страка |//+--------------------------------------------------------------------------------------------+int CountLength(string query){
return(StringLen(query));
}
//+--------------------------------------------------------------------------------------------+//| Вспомогательная Функция подсчёта колличества результатов из базы данных |//+--------------------------------------------------------------------------------------------+//| Переменные: |//| int result - Результат запроса |//+--------------------------------------------------------------------------------------------+int Number_Of_Rows(int result){
return(mysql_num_rows(result));
}
es gibt zwei Zeilen in der Tabelle id user 1 aaa 2 bbb
1. Bei der Abfrage "SELECT id FROM table" liefert die Funktion fetch_row (Adresse)(Adresse) 1 (Adresse)(Adresse) 2 2. Die Abfrage "SELECT user FROM table", die Funktion fetch_row gibt (Adresse) aaa (Adresse) bbb
Im Allgemeinen kann dies gehandhabt werden, die einzige Schande ist, dass es in String zurückgibt
Wenn ich zwei Felder abfrage "SELECT id, user FROM table", liefert die Funktion (Adresse) 1 (Adresse) (Adresse) (Adresse) 2 4. Wenn Sie die "SELECT user, id FROM table"-Felder vertauschen, gibt die Funktion (Adresse) aaa (Adresse) bbb
zurück. Es stellt sich heraus, dass nur das erste Feld der Zeichenkette deutlich sichtbar ist und eine weitere 4-Byte-Adresse hinzugefügt wird.
eine Tabelle mit zwei Feldern erstellt INT id; TEXT Benutzer
die Tabelle hat zwei Zeilen id-Benutzer 1 aaa 2 bbb
1. Bei der Abfrage "SELECT id FROM table" liefert die Funktion fetch_row (Adresse)(Adresse) 1 (Adresse)(Adresse) 2 2. Bei der Abfrage "SELECT user FROM table" liefert die Funktion fetch_row (Adresse) aaa (Adresse) bbb
Im Allgemeinen kann es gehandhabt werden, aber die Rückgabe erfolgt als String
3. Wenn die Funktion "SELECT id, user FROM table" zwei Felder zurückgibt, liefert sie (Adresse) 1 (Adresse) (Adresse) 2 4. Wenn wir die Felder "SELECT user, id FROM table" vertauschen, liefert die Funktion (Adresse) aaa (Adresse) bbb
stellt sich heraus, dass nur das erste Feld der Zeichenkette explizit gesehen wird und eine weitere 4-Byte-Adresse hinzugefügt wird.
Wie bringen Sie dies anschließend in das Programm ein?
Ich werde im Grunde genommen Fließkommazahlen schreiben und sie lesen.
Ich entwickle gerade ein Skript, das mit einer MySQL-Datenbank arbeitet, um sie zu lesen, einzufügen, zu löschen und zu ändern.
Das Skript ist umfangreich, aber das Wesentliche der Arbeit mit der Datenbank wird, denke ich, durch eine Funktion verständlich.
Wahre, gibt dieses Beispiel Datensatz-ID aus der Tabelle, aber kein Problem zu remake, erinnere ich mich und Text und Zahlen aus der Datenbank zurückgegeben, alles funktioniert.
Dies ist ein interessantes Beispiel, aber es zeigt nicht, wie man numerische Daten liest.
Im Grunde möchte ich eine Basis mit einer dreispaltigen Tabelle für nur zwei Aktionen verwenden:
1) Lesen Sie die ersten beiden Spalten (Index und die erste numerische Spalte)
Wählen Sie dann die relevanteste Zahl aus der numerischen Spalte im MQ4-Programm
2) Lies aus dem Index dieser Zahl die Zahl in der zweiten Spalte.
Welche Funktionen sollte ich dafür verwenden? Und funktionieren sie normal in der angegebenen DLL?
Wenn Sie helfen können, schreiben ansi zu Unicode-Konverter für MKL5, der Code von denen in der vorherigen Post gegeben ist. Ich schicke Ihnen den Arbeitscode für MKL4, er wird Ihnen auch beim Schreiben der Klasse für MKL5 helfen.
Deklarieren Sie in Importfunktionen keine Strings, sondern Arrays vom Typ uchar
Das Problem ist leider, dass diese Zeichenketten als Ergebnis einer Funktion zurückgegeben werden, nicht als einer ihrer & Parameter.
mysql_fetch_row gibt einen Zeiger auf ein Array von Strings zurück - char**
--------
weiß jemand, ob es irgendwelche Low-Level-Kernel-Funktionen, die eine char** Zeichenfolge aus einem char-Array zurückgeben können? (wie strcpy, strcat...)
und in ähnlicher Weise von einem int*-Array - eine Lib-Funktion, um sein spezifisches Element zu erhalten? auch wenn die Funktion selbst nicht direkt für diesen Vorgang vorgesehen ist :)
Wie liest man das Ergebnis der Funktion mysql_fetch_row in MQL4 ?
Ich entwickle gerade ein Skript, das mit einer MySQL-Datenbank arbeitet, um sie zu lesen, einzufügen, zu löschen und zu ändern.
Das Skript ist umfangreich, aber das Wesentliche der Arbeit mit der Datenbank wird, denke ich, durch eine Funktion verständlich.
Allerdings ist in diesem Beispiel ID des Datensatzes aus der Tabelle zurückgegeben, aber es wird nicht ein Problem sein, wieder zu machen, ich erinnere mich und Text und Zahlen aus der Datenbank zurückgegeben, alles funktioniert.
ein kleines Forschungsexperiment durchgeführt
Ich habe eine Tabelle mit zwei Feldernerstellt
INT id; TEXT user
es gibt zwei Zeilen in der Tabelle
id user
1 aaa
2 bbb
1. Bei der Abfrage "SELECT id FROM table" liefert die Funktion fetch_row (Adresse)(Adresse) 1 (Adresse)(Adresse) 2
2. Die Abfrage "SELECT user FROM table", die Funktion fetch_row gibt (Adresse) aaa (Adresse) bbb
Im Allgemeinen kann dies gehandhabt werden, die einzige Schande ist, dass es in String zurückgibt
Wenn ich zwei Felder abfrage "SELECT id, user FROM table", liefert die Funktion (Adresse) 1 (Adresse) (Adresse) (Adresse) 2
4. Wenn Sie die "SELECT user, id FROM table"-Felder vertauschen, gibt die Funktion (Adresse) aaa (Adresse) bbb
zurück. Es stellt sich heraus, dass nur das erste Feld der Zeichenkette deutlich sichtbar ist und eine weitere 4-Byte-Adresse hinzugefügt wird.
ein kleines Forschungsexperiment durchgeführt
eine Tabelle mit zwei Feldern erstellt
INT id; TEXT Benutzer
die Tabelle hat zwei Zeilen
id-Benutzer
1 aaa
2 bbb
1. Bei der Abfrage "SELECT id FROM table" liefert die Funktion fetch_row (Adresse)(Adresse) 1 (Adresse)(Adresse) 2
2. Bei der Abfrage "SELECT user FROM table" liefert die Funktion fetch_row (Adresse) aaa (Adresse) bbb
Im Allgemeinen kann es gehandhabt werden, aber die Rückgabe erfolgt als String
3. Wenn die Funktion "SELECT id, user FROM table" zwei Felder zurückgibt, liefert sie (Adresse) 1 (Adresse) (Adresse) 2
4. Wenn wir die Felder "SELECT user, id FROM table" vertauschen, liefert die Funktion (Adresse) aaa (Adresse) bbb
stellt sich heraus, dass nur das erste Feld der Zeichenkette explizit gesehen wird und eine weitere 4-Byte-Adresse hinzugefügt wird.
Wie bringen Sie dies anschließend in das Programm ein?
Ich werde im Grunde genommen Fließkommazahlen schreiben und sie lesen.
Ich entwickle gerade ein Skript, das mit einer MySQL-Datenbank arbeitet, um sie zu lesen, einzufügen, zu löschen und zu ändern.
Das Skript ist umfangreich, aber das Wesentliche der Arbeit mit der Datenbank wird, denke ich, durch eine Funktion verständlich.
Wahre, gibt dieses Beispiel Datensatz-ID aus der Tabelle, aber kein Problem zu remake, erinnere ich mich und Text und Zahlen aus der Datenbank zurückgegeben, alles funktioniert.
Dies ist ein interessantes Beispiel, aber es zeigt nicht, wie man numerische Daten liest.
Im Grunde möchte ich eine Basis mit einer dreispaltigen Tabelle für nur zwei Aktionen verwenden:
1) Lesen Sie die ersten beiden Spalten (Index und die erste numerische Spalte)
Wählen Sie dann die relevanteste Zahl aus der numerischen Spalte im MQ4-Programm
2) Lies aus dem Index dieser Zahl die Zahl in der zweiten Spalte.
Welche Funktionen sollte ich dafür verwenden? Und funktionieren sie normal in der angegebenen DLL?
Dies ist ein interessantes Beispiel, aber es zeigt nicht, wie man numerische Daten liest.
Haben Sie eine Zeile Code geschrieben, um zu sehen, was zurückgegeben wird und wie?
HIDDEN hat bereits eine vollständige Lösung für das Auslesen eines Feldes aus der Datenbank gegeben. Haben Sie es ausgeführt?
Wenn Sie helfen können, schreiben ansi zu Unicode-Konverter für MKL5, der Code von denen in der vorherigen Post gegeben ist. Ich schicke Ihnen den Arbeitscode für MKL4, er wird Ihnen auch beim Schreiben der Klasse für MKL5 helfen.
MQL5 hat Funktionen zur Umwandlung von Unicode. Siehe /de/docs/convert/chararraytostring und /de/docs/convert/stringtochararray
Deklarieren Sie uchar-Arrays anstelle von Strings im Funktionsimport.
Deklarieren Sie in Importfunktionen keine Strings, sondern Arrays vom Typ uchar
Das Problem ist leider, dass diese Zeichenketten als Ergebnis einer Funktion zurückgegeben werden, nicht als einer ihrer & Parameter.
mysql_fetch_row gibt einen Zeiger auf ein Array von Strings zurück - char**
--------
weiß jemand, ob es irgendwelche Low-Level-Kernel-Funktionen, die eine char ** Zeichenfolge aus einem char-Array zurückgeben können?
(wie strcpy, strcat...)
und in ähnlicher Weise von einem int*-Array - eine Lib-Funktion, um sein spezifisches Element zu erhalten?
auch wenn die Funktion selbst nicht direkt für diesen Vorgang vorgesehen ist :)
Vollständiger Code Implementierung....
SQL-Dump der Datenbank
Arbeitsergebnis