Autor |
Beitrag |
Petros
Beiträge: 131
Erhaltene Danke: 1
Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
|
Verfasst: Do 28.09.17 09:24
Hallo Community,
Folgenes habe ich vor
ich habe 2 schleifen in einer Methode schleife1 soll nur dann wieder durchlaufen wenn schleife 2 komplett durch ist
nehmen wir mal an in der Combo_Box1 gibt es 20 einträge pro eintrag gibt es 5 weitere die dann in Combo_Box2 angezeigt werden
Quelltext 1: 2: 3: 4: 5: 6: 7:
| Combo_Box1 => a1, a2, a3 usw.
Combo_Box2 => wenn Combo_Box1 = "a1" ist dann ist in Combo_Box2 => a1_1, a1_2, a1_3 usw drin:
Combo_Box2 => wenn Combo_Box1 = "a2" ist dann ist in Combo_Box2 => a2_1, a2_2, a2_3 usw drin:
usw. |
Jetzt habe ich eine methode geschrieben die ich denke vom ansatz her schon richtig ist aber es funktioniert leider nicht denn
Combo_Box1 springt zwar immer +1 hoch aber das in einem tempo das schleife 2 völlig ignoriert bzw übersprungen wird. Hab zumindest das Gefühl.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| for (int v = 0; v < vid_db_count ; v++) { f1(); f2(); for (int d = 0; d < did_db_count ; d++) { f3(); f4(); Combo_Box2.SelectedIndex = Combo_Box2.SelectedIndex +1 } Combo_Box1.SelectedIndex = Combo_Box1.SelectedIndex +1 } |
Meine frage ist mein Ansatz soweit richtig oder gibt es ne bessere methode um das umzusetzen.
MFG Petros
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 28.09.17 10:01
Vielleicht erklärst du mal kurz was das soll. Vieleicht kann man sich das dann besser vorstellen.
Im Moment fällt mir kein sinnvoller Einsatz ein von dem was du da tust. Warum sollte man in einer Schleife die Selection einer Combobox ändern? Was hat ein User davon wenn er alle Einträge der ComboBox mal im TextBox Teil der ComboBox ~durchfliegen~ sieht. Wenn der Code fertig ist irgendein Eintrag ausgewählt was vorher in der Schleife passiert ist ist dann völlig egal. Der User hat ja auch keine Chance mit der UI zu interagieren während dieser Code läuft.
|
|
Petros
Beiträge: 131
Erhaltene Danke: 1
Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
|
Verfasst: Do 28.09.17 10:54
OHHHHH das muss ich aber ganz weit aushohlen.
kurz und knapp es wird ein Converter er Konvertiert Daten von einer MongoDB in MYSQL und PostgreSQL.
Sprich es Gibt eine Alte Server DB Anwendung die Daten als JSON ausgibt. Die Dantenbank der Anwendung selbst ist MongoDB (Ja ich kann daten in SQL exportieren hat nur nix gebracht) diese ist aber zum Update und hinzufügen von Daten SO NICHT geeignet da nicht alle einträge in der DB vorhanden sind sondern aus anderen quellen geparst und zusammen geführt wird. Da wir aber selbst Datensätze produzieren sollen diese in die alte DB mit eingefügt werden da dies aber mit der Server DB Anwendung nicht geht ist meine Aufgabe das ganze in eine andere DB zu überführen z.B MYSQL. funktioniert auch soweit MANUELL nur soll das ganze jetzt automatisch eintrag für eintrag machen. Manuell geht das ganze wunderbar. Aber bei einem Datensatz von ca 287000 muss ich extra einen Praktikanten oder Lehrling einstellen der nach jedem Datensatz nen Button klickt.
Beispiel Code zu Erklärung.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| for(..;..;..){ var client = new WebClient (); var text = client.DownloadString ("http://127.0.0.1:5080/api/search"+"/"+Combo_Box1.Text+"/"+Combo_Box2.Text); rt_box1.Text = text; f4(); f5(); } Combo_Box2.SelectedIndex = 0 => a1_1 Combo_Box2.SelectedIndex = 1 => a1_2 |
Ich hoffe ich konte es etwas erklären leider fällt mir sonst kein anderer weg ein die Daten Convertieren
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 28.09.17 12:37
OK, du hast mehrere Quellen von Daten und ein Ziel und mußt Daten dazwischen zusammenführen und dann gemeinsam ins Ziel schreiben. Das soll automatisch geschehen. Wie und warum ist dann jetzt eine UI während des Vorgangs beteiligt und warum?
Wieso hängt 'nächster Datensatz' irgendwie mit der UI zusammen warum nimmst du nicht einfach den nächsten Datensatz? Warum muß man die UI Ändern um an den nächsten Datensatz zu kommen?
|
|
Petros
Beiträge: 131
Erhaltene Danke: 1
Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
|
Verfasst: Do 28.09.17 13:16
die UI habe ich nur erstellt um zu prüfen ob er auch sauber schritt für schritt alles abarbeitet also nur zur kontrolle,
das Ganze hat nachher nix mehr mit der UI zu tun. Worum es mir eigendlich geht sind die for schleifen denn schleife 1 macht er ja ohne probleme nur die schleife 2 lässt er unberührt bzw überspringt diese.
Die UI Hatte ich nur mit eingebaut um zu Prüfen ob schleife1 1. eintrag nimmt dann in schleife2 die 2. daten erfasst und dann die Daten parst und diese dann in die DB schreibt.
um die DB zu erklären
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| | Hersteller | Geräte | Informationen(JSON inhalt aus drittquellen) | |------------|------------|---------------------------------------------| |Nokia | 3210 | Info Text | | | 3310 | Info Text | | | 3510 | Info Text | |zte | Axon 7 | Info Text | | | Axon 7 M | Info Text | | | zxv10_w300 | Info Text |
Combo_Box1 = Hersteller Combo_Box2 = Geräte |
meine abfrage läuft soll automatisch so laufen
abfrage aus Hersteller + gerät = JSON Datei die dann in DB eingetragen wird ind das soll er mit alles machen
daher auch meine schleife
H = Hersteller
G = Gerät
1. 1H + 1G
2. 1H + 2G
2. 1H + 3G
wenn fertig dann
1. 2H + 1G
2. 2H + 2G
2. 2H + 3G
usw.
hoffe das ich das jetzt etwas detaillierte erklären konnte.
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Do 28.09.17 13:32
Anstatt sowas in Comboboxen zu pumpen (was noch weitere Maßnahmen zur korrekten Anzeige erfordern würde, wodurch das ganze dann sehr langsam wird), schreibt man solche Sachen in ein Logfile.
Oder in ein Memo-Feld, das man mit memo1.Update() aktualisiert. Im Memo kann ja stehen:
Quelltext 1: 2: 3:
| Nokia, 3210, Info Text Nokia, 3310, Info Text Nokia, 3510, Info Text |
Das sollte genügen, um eine Kontrolle zu haben.
Echte Profis benutzen für sowas übrigens "Überwachte Ausdrücke"
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 28.09.17 13:43
Dann solltest du keinen Pseudocode zeigen. Zwei geschachtelte Schleifen mit Funktionen werden immer richtig funktionieren und mehr zeigt dein Pseudocode nicht. Wenn es da bei dir ein Problem gibt dann liegt der im eigentlichen Code. Und wenn dein eigentlicher Code Richtung UI mehr macht als Sachen in der UI anzuzeigen sondern auch Inhalte wieder ausliest, wie dein zweiter gezeigten Code der auf Combox.Text zugreift, ist das problematisch. Deine Schleifen haben vermutlich keine natürlichen Unterbrechungen, heißt deine UI wird nicht oder unregelmäßig aktualisiert. UI Updates stellst du dir am besten asynchron vor. Wenn du SelectedIndex änderst wird nur eine Nachricht gesendet mehr nicht die dann abgearbeitet wird wenn dein Prozess unterbricht und dann Zeit zum abarbeiten dieser Nachrichten ist und die UI nachgezogen wird.
|
|
Petros
Beiträge: 131
Erhaltene Danke: 1
Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
|
Verfasst: Do 28.09.17 14:52
@ OlafSt
Ja so hätte ich das auch machen können und auch das ganze noch mit Console.WriteLine(""); try catch usw alles möglich der Converter soll nur einmal mit einem rutsch die daten von A nach B packen mehr nicht
hab das ganze mal in einem einfachen beispiel getestet da hats geklappt
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| public void test(){ for (int i = 0; i < 2; i++) { cInfo ("in der 1 schleife");
for (int v = 0; v < 3; v++) { cInfo ("in der 2 schleife"); } cInfo ("ender der 2 schleife"); } cInfo ("ender der 1 schleife"); }
Ergebnis: in der 1 schleife in der 2 schleife in der 2 schleife in der 2 schleife ender der 2 schleife in der 1 schleife in der 2 schleife in der 2 schleife in der 2 schleife ender der 2 schleife ender der 1 schleife |
und hier Ein auszug von meinem code
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| id_vendorBox ();cInfo ("1");fill_devicebox ();cInfo ("2"); Com_device_Box.SelectedIndex = 0;for (int v = 0; v < vid_db_count; v++) { fill_devicebox (); cInfo ("3"); for (int d = 0; d < did_db_count; d++) { try { cInfo ("Connect to the Server!"); var client = new WebClient (); var text = client.DownloadString ("http://127.0.0.1:5080/api/search"+"/"+Com_vendor_Box.Text+"/"+Com_device_Box.Text); rt_box1.Text = text; sql_did(); filter_Datum (); filter_References (); cInfo ("Convert Json to XML"); var ja = JArray.Parse (rt_box1.Text); var x1 = new XDocument (new XElement ("Table1", ja.Select (a => new XElement ("Hersteller", (string)a ["Hersteller"])))); var x2 = new XDocument (new XElement ("Table2", ja.Select (a => new XElement ("Device", (string)a ["Device"])))); var x3 = new XDocument (new XElement ("Table3", ja.Select (a => new XElement ("Reference", (string)a ["Reference"].ToString ())))); rt_box2.Text = "<root>\n" + x1.ToString () + "\n" + x2.ToString () + "\n" + x3.ToString ()"\n</root>"; filter_correctxml (); save_xml (); DataSet dsLoead = new DataSet (); dsLoead.ReadXml (@"./tmp/xml/tmp.xml"); dGV01.DataSource = dsLoead.Tables [1]; cInfo ("von: " + dsLoead.Tables [1].ToString ()); dGV02.DataSource = dsLoead.Tables [3]; cInfo ("von: " + dsLoead.Tables [3].ToString ()); dGV03.DataSource = dsLoead.Tables [5]; cInfo ("von: " + dsLoead.Tables [5].ToString ()); insertDB(); cInfo ("Daten in SQL übergeben"); }catch (Exception ex) { cInfo ("F2: " + ex.Message); } } vendor_index_p (); } } |
PS. wenn mir ein besserer weg eingefallen wäre das umzusetzen hätte ich das so nicht gemacht aber mir viel kein anderer weg ein um das so umzusetzen.
MAN MAN MAN WIE PEINLICH Ich hab meinen fehler schon wieder selbst gefunden der Grund warum er nicht in schleife 2 gegangen ist liegt daran das schleife 2 noch garnicht wusste wie weit hoch er zählen soll sprich meine schleife 2 war immer 0
C#-Quelltext
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Fr 29.09.17 01:21
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Th69
Beiträge: 4764
Erhaltene Danke: 1052
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 29.09.17 08:02
Ich habe die Frage daher auf "beantwortet" gesetzt.
Außerdem müßte es natürlich
C#-Quelltext 1:
| for(int d=0; d<0; d++) |
heißen ( d statt v).
Und dass die ganze Vorgehensweise so sehr fehleranfällig ist, wurde ja schon gesagt. Selbst (kleine) Konvertierer-Programme sollten nach der 3-Schichten Architektur entwickelt werden (d.h. Trennung von UI, Logik und Datenzugriff).
|
|