mtbf40 Posted August 24, 2012 Author Report Posted August 24, 2012 Einen habe ich noch http://codebase.mql4.com/5040 erst einmal danke für die Antworten.der Aufwand ist mir im Moment zu hoch - es funktioniert ja eigentlich, nur zu einem falschen Zeitpunkt!!Was ich möchte, ist einfach mal die DLL debuggen um zu schauen wo die Daten "verschluckt" werden - offensichtlich klappt das nicht mit einer DLL die von MetaTrader aufgerufen wird??!!Die Daten werden komplett von MT gesendet - der letzte Teil geht aber beim ersten senden verloren und danach sind die Daten vollständig.Irgend wie habe ich den Anschein das die DLL nicht wartet bis alles gesendet wurde und schon mal den ersten Teil weiterreicht - das muss ein Puffer-Problem sein. Quote
mtbf40 Posted September 1, 2012 Author Report Posted September 1, 2012 Hallo, habe bei meinem Projekt jetzt festgestellt das Daten "verloren" gehen..........Die Basis dafür ist MTEC von RAiNWORM naja, das kommt davon, wenn man Software übernimmt, diese dann anpasst und bei dem Rest nicht genau hinschaut oder durchblickt - RAiNWORM hat nämlich einen Parameter bei dem die Länge der Daten bestimmt wird... und meine Daten waren einfach länger und so wurde der Rest glatt "abgeschnitten" Quote
mtbf40 Posted September 1, 2012 Author Report Posted September 1, 2012 Hallo, hat schon mal jemand einen Erfolg erziehlt und mit <GetDlgItemText> einen Wert aus einer Edit Box bekommen? procedure winDlgTest.DoRun; var Msg: String; Buffer1: Array[0..20] of Char; Buffer2: Array[0..255] of Char; wnd, txt,Text: integer; begin { 1838012 - WinHandle (Window Class #32770) 1127 - ID von Edit Box } wnd := GetDlgItem(1838012,1127); -> erhalte Wert txt := GetDlgItemText(wnd, 1127, Buffer1, 256); {-> kein Wert} txt := GetDlgItemText(1838012, 1127, Buffer1, 256); {-> kein Wert} Text := GetWindowText(wnd,Buffer2, 256); Msg := Buffer2[0]; Terminate; end; Quote
RAiNWORM Posted September 1, 2012 Report Posted September 1, 2012 RAiNWORM hat nämlich einen Parameter bei dem die Länge der Daten bestimmt wird... und meine Daten waren einfach länger und so wurde der Rest glatt "abgeschnitten"Entschuldigung Bei Datenübergaben arbeite ich immer mit Begrenzungen, um Overflow-Attacken vorzubeugen.Bei TCP/IP muss man auf Empfangsseite aufpassen, da die Daten beliebig packetiert werden können und somit in mehreren Schüben ankommen können. Dabei besteht auch ein Unterschied zwischen LAN und Internet, was die Packetgrößen anbelangt. Zum Debuggen der DLL: da die von MT aufgerufen wird, hast du mit "normalen", praktikablen Mitteln keine Chance. Du müsstest dann zu Low-Level-Debuggern übergehen. Das macht dann aber keinen Spass und kostet unnötig Zeit. Mich würde mal was ganz anderes interessieren: was baust du da eigentlich? Quote
mtbf40 Posted September 1, 2012 Author Report Posted September 1, 2012 Zum Debuggen der DLL: da die von MT aufgerufen wird, hast du mit "normalen", praktikablen Mitteln keine Chance. Du müsstest dann zu Low-Level-Debuggern übergehen. Das macht dann aber keinen Spass und kostet unnötig Zeit.zum debuggen benutze ich <OutputDebugString> - ist ganz praktisch Mich würde mal was ganz anderes interessieren: was baust du da eigentlich? ...einen TradeManager - mit dem ich meine Trades überwachen und vor allem auswerten kann. Der erste Schritt ist das initialisieren, d.h. wenn ich Trades eröffnen will zeigt er mir verschieden Werte an - siehe Anhang Was ich am Ende will ist ein Tool zum auswerten aller Trades von verschiedenen Accounts (Brokern) ... und vielleicht noch ein paar Dinge mehr Quote
mtbf40 Posted October 18, 2012 Author Report Posted October 18, 2012 Hallo an alle Datenbank-Profis, ich hab da mal'ne Frage Ich habe eine DB (Sqlite) mit verschiedenen Tabellen (siehe Anhang).Jetzt möchte ich folgendes erreichen: z.B. in der TM_HistoryOrders gibt es die Spalte <TradeTyp> - diese wird mittels <OrderType()> Metatrader gefüllt - diese Funktion gibt aber nur Zahlen aus (1-5)Ich habe mir dann gedacht eine weitere Tabelle anzulegen - TM_OrderTypes - diese soll eine referenzierende Tabelle sein. Jetzt habe ich mit Primärschlüsseln und Fremdschlüsseln (Foreign Keys) herumexperimentiert und komme nicht weiter. Als Ergebnis dieser ganzen Aktion möchte ich, dass in der Spalte <Trade_Typ> buy od. sell od. sell Limit ... stehtWie kann ich das in der DB realisieren??MTEC.zip Quote
Mythos Posted October 21, 2012 Report Posted October 21, 2012 Also wenn du in einer tabelle eine int-Spalte TradeTyp hast, wird in der Spalte nie buy oder sell stehen.Du kannst aber beim auslesen der tabelle nicht die tabelle selbst sondern ein JOIN nehmen ala "SELECT * FROM (TM_HistoryOrders JOIN TM_OrderTypes using (TM_HistoryOrders.TradeTyp ==TM_OrderTypes.typeId))" damit kombinierst du die zwei tabellen derart, das zu TM_HistoryOrders Spalten von TM_OrderTypes (für die Ausgabe) hinzugefügt werden. Und zwar genau die Zeile von TM_OrderTypes in der der entsprechende Wert von TM_HistoryOrders.TradeTyp passt. also zBTM_HistoryOrders:id | TradeTyp | .... 1 | 2 | orderinfo1... 2 | 1 | orderinfo2.... TM_OrderTypes:typeid | name1 | BUY2 | SELL3 | BUY_LIMIT.... dann gibt das JOIN folgenden Output (sortierung "zufällig")id | TradeTyp | .... | name 1 | 2 | orderinfo1... | SELL 2 | 1 | orderinfo2.... | BUY damit das ganze auch recht schnell geht, sollte natürlich bei den OrderTypes die typeID der PrimaryKey oder zumindest ein Index sein. Quote
RAiNWORM Posted October 21, 2012 Report Posted October 21, 2012 Du kannst aber beim auslesen der tabelle nicht die tabelle selbst sondern ein JOIN nehmenDas wäre die saubere Lösung. Alternativ könntest du mit dem CASE-Statement arbeiten: The CASE expression A CASE expression serves a role similar to IF-THEN-ELSE in other programming languages.... CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 ENDCASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 ENQuelle ala "SELECT * FROM (TM_HistoryOrders JOIN TM_OrderTypes using (TM_HistoryOrders.TradeTyp ==TM_OrderTypes.typeId))"Ist das Standard-SQL? Ansonsten müsste es meines Erachtens anstatt "using" "on" genommen werden und an Stelle von "==" "=". 1 Quote
Mythos Posted October 21, 2012 Report Posted October 21, 2012 Ist das Standard-SQL? Ansonsten müsste es meines Erachtens anstatt "using" "on" genommen werden und an Stelle von "==" "=". Nö, das war "as i remember" SQLite ;) hast Recht es is "ON", hab noch gewusst das eines für liste von spalten ist und eines für die Bedingung... Das "==" is halt schon so automatisch bei Vergleichen http://www.tom-next.de/community//public/style_emoticons/default/moveaway.gif bzgl Case: wenn es nur genau eine Abfrage ist, gehts so, aber dann wärs fast besser es als "switch" in den Code zu packen, weil bei 6 Möglichkeiten wird das CASE ein bissl unübersichtlich Quote
mtbf40 Posted October 23, 2012 Author Report Posted October 23, 2012 ... danke erst einmal für die Tips - ich habe das jetzt direkt im Code eingearbeitet - werde bestimmt wieder auf euch zukommen , wenn es um Views oder Trigger geht... Wenn ich eine "vorzeigbare" Version habe, werde ich sie mal hier reinstellen... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.