DerWolf Geschrieben 7. März 2003 Teilen Geschrieben 7. März 2003 Hallo mal wieder! Ich habe ein Problem mit der Ausgabe bzw. wie ich die Feldnamen mit dazugehörigem Tabellennamen im ListView ausgeben kann quasi --> Tabellennamen: Feldnamen Hier der Code (Special Thanks an Der Kleine!) for k := 0 to Felder.Count-1 do begin testwert2 := Felder.Strings[k]; gefunden := false; for l := 0 to Felder2.Count-1 do begin if Felder2.Strings[l] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin List := Form2.ListView3.Items.Add; List.Caption := testwert2; end; end; Wie kann ich es da einbauen, das das Prog bei List.Caption := testwert2 auch den Tabellennamen ausgibt? Bitte helft mir! Danke im voraus!! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Oh, Sorry! Irgendwie funzt das nicht mit der Einrückung! Bitte nochmal um Verzeihung! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 7. März 2003 Teilen Geschrieben 7. März 2003 Originally posted by DerWolf Oh, Sorry! Irgendwie funzt das nicht mit der Einrückung! Bitte nochmal um Verzeihung! Nutze (code) und (/code) (mit eckigen Klammern). Dein Code gibt alle Felder aus, die in Tabelle 2 und nicht in Tabelle 1 enthalten sind. Also könntest du z. B.List.Caption := 'Tabelle2_wie_auch_immer.'+testwert2;verwenden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Hallo Der Kleine! Danke für dein Engagement mir zu helfen! Sorry, habe es ausprobiert, bekomme zwar was angezeigt, ist aber nicht der Tabellenname. Die Tabellen habe ich ja vorher auch in eine StringList eingelesen, kann ich das irgendwie miteinander verbinden? So ungefähr? 'Tabellen.'+testwert2 //quasi mein jetziges Ergebnis! hm, wie geht das? :confused: MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 7. März 2003 Teilen Geschrieben 7. März 2003 Du gehst doch bestimmt irgendwo jede Tabelle durch. In dieser Schleife greifst du dann auf die Felder der jeweiligen Tabelle zu (mittels Felder.Strings[l]). Also hast du doch den Bezug (von der äußeren Schleife) zu der gerade begutachteten Tabelle. Und somit kannst du innerhalb der (4?) Schleifen, auch noch auf die gerade behandelte Tabelle zugreifen. Das Ergebnis müßte dann ungefähr lauten : List.Caption := tabelle2.Strings(Laufvariable)+'.'+felder2.strings[l]; Da die Tabellennamen aus der DB1 und der DB2 gleich lauten (nur dann machst du den Vergleich der Felder), spielt es keine rolle, ob du Tabelle1 oder Tabelle2 nimmst. Sauber wäre aber Tabelle2, da genau die Felder angezeigt werden, die in Tabelle2 und nicht in Tabelle1 enthalten sind. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Sorry, bin halt ein DAU! Mit Laufvariable meinst du bestimmt den INDEX? oder? Und warum brauche ich da nur eine Tabelle angeben. Verstehe ich nicht! Dann steht doch vor dem Punkt immer ein und dieselbe Tabelle. Avber es können doch auch verschiedene Tabellen sein? hmpf, :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 7. März 2003 Teilen Geschrieben 7. März 2003 Hey, nix DAU! Da ließ dir den anderen Thread durch! PS : Auch ich habe mal angefangen! (Damals - mit Access) Laufvariable bei den feldern ist einerseits das k für die Felder der Tabelle1 und das l für die Felder der Tabelle2. Wenn ich mich richtig erinnere, dann durchsuchst du 2 verschiedene Datenbanken, welche wiederum n1 bzw. n2 verschiedene Tabellen besitzen, wobei jede dieser Tabellen nun m Felder besitzen. Erster Schritt war : Im Listfeld die verschiedenen Tabellen angeben, die jeweils in der einen, aber nicht in der anderen DB vorhanden sind. Zweiter Schritt : Du durchläufst alle Tabellen, und schaust dann inn beiden DB, ob diese Tabellen unteschiedliche Felder besitzen. Falls ja, werden diese im ListView ausgegeben. Du musst aber zu jeder Zeit wissen, welche Tabelle du gerade durchsuchst. Und diese Tabelle kannst du entsprechend unten beim .caption mit angeben. Falls du nicht klarkommst, poste mal die ganze procedure. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Hey, den Thread habe ich mir gerade zum Teil durchgelesen. Und ich muß feststellen, ich bin gar kein DAU! Du erinnerst dich richtig, ich habe im Form2 insgesamt 6 ListViews(2 für die Tabellen, 2 für die Feldnamen und 2 für die Indizes). Wegen der Übersichtlichkeit wollte ich vor den Feldnamen den Tabellennamen stehen haben. Bei den Indizes sogar Tabelle.Feldname. Indizes, wenn dieses möglich ist. Wegen der Übersichtlichkeit deswegen, weil sonst keiner weiß, von welcher Tabelle jener Feldname oder Indizes ist! Hoffe, ich habe das jetzt verständlich rüber gebracht. Nun der Code Tabellen := TStringList.Create; Tabellen2 := TStringList.Create; gleicheTabellen := TStringList.Create; WilleDatabase.GetTableNames(Tabellen, true); WilleDatabase2.GetTableNames(Tabellen2, true); Felder := TStringList.Create; Felder2 := TStringList.Create; WilleDatabase.GetFieldNames(gleicheTabellen.Text, Felder); WilleDatabase2.GetFieldNames(gleicheTabellen.Text, Felder2); Indizes := TStringList.Create; Indizes2 := TStringList.Create; WilleDatabase.GetIndexNames(gleicheTabellen.Text, Indizes); WilleDatabase2.GetIndexNames(gleicheTabellen.Text, Indizes2); for i := 0 to Tabellen.Count-1 do begin testwert := Tabellen.Strings; gefunden := false; for z := 0 to Tabellen2.Count-1 do begin if Tabellen2.Strings[z] = testwert then begin gefunden := true; gleicheTabellen.Add(testwert2); end; end; if gefunden = false then begin //Showmessage('Gefunden wurde: '+testwert+' in erster Tabelle, aber nicht in zweiter'); List := Form2.ListView1.Items.Add; List.Caption := testwert; end; end; for z := 0 to Tabellen2.Count-1 do begin testwert := Tabellen2.Strings[z]; gefunden := false; for i := 0 to Tabellen.Count-1 do begin if tabellen.Strings = testwert then begin gefunden := true; end; end; if gefunden = false then begin //Showmessage('Gefunden wurde: '+testwert+' in zweiter Tabelle, aber nicht in erster'); List := Form2.ListView2.Items.Add; List.Caption := testwert; end; end; for k := 0 to Felder.Count-1 do begin testwert2 := Felder.Strings[k]; gefunden := false; for l := 0 to Felder2.Count-1 do begin if Felder2.Strings[l] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin //Showmessage('Gefunden wurde: '+testwert+' in erster Tabelle, aber nicht in zweiter'); List := Form2.ListView3.Items.Add; List.Caption := Tabellen2.Strings[z]+'.'+felder2.strings[l]; end; end; for l := 0 to Felder2.Count-1 do begin testwert2 := Felder2.Strings[l]; gefunden := false; for k := 0 to Felder.Count-1 do begin if Felder.Strings[k] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin List := Form2.ListView4.Items.Add; List.Caption := testwert2; end; end; for m:= 0 to Indizes.Count-1 do begin testwert2 := Indizes.Strings[m]; gefunden := false; for n := 0 to Indizes2.Count-1 do begin if Indizes2.Strings[n] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin List := Form2.ListView5.Items.Add; List.Caption := testwert2; end; end; for n := 0 to Indizes2.Count-1 do begin testwert2 := Indizes2.Strings[n]; gefunden := false; for m := 0 to Indizes.Count-1 do begin if Indizes.Strings[m] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin List := Form2.ListView6.Items.Add; List.Caption := testwert2; end; end; Tabellen.Free; Tabellen2.Free; Felder.Free; Felder2.Free; Indizes.Free; Indizes2.Free; gleicheTabellen.Free; end; Kannst du damit etwas anfangen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 7. März 2003 Teilen Geschrieben 7. März 2003 OK, fangen wir mal an: WilleDatabase.GetFieldNames(gleicheTabellen.Text, Felder); gleicheTabelle ist zwar deklariert, aber noch nicht initialisiert, d. h. noch leer. Folglich sind auch deine Felder leer. Also darf diese Deklaration erst nach dem füllen der gleicheTabelle kommen. Dannach musst du alle Tabellen in gleicheTabelle durchlaufen, also eine Schleife mehr . Innerhalb dieser Schleife jeweils die Initialisierung der Felder, damit diese immer aktuell sind. Dann wieder aussuchen, welche unterschiedlich sind. dort kommt die Änderung des Feldnamens. statt List.Caption := gleicheTabellen.Strings[i]+'.'+felder.strings[l]; kannst du auch schreibenList.Caption := gleicheTabellen.Strings[i]+'.'+testwert2; Also dürfte der erste Teil ungefähr so funktionieren (falls keine Syntaxfehler)Tabellen := TStringList.Create; Tabellen2 := TStringList.Create; gleicheTabellen := TStringList.Create; WilleDatabase.GetTableNames(Tabellen, true); WilleDatabase2.GetTableNames(Tabellen2, true); for i := 0 to Tabellen.Count-1 do begin testwert := Tabellen.Strings[i]; gefunden := false; for z := 0 to Tabellen2.Count-1 do begin if Tabellen2.Strings[z] = testwert then begin gefunden := true; gleicheTabellen.Add(testwert2); end; end; if gefunden = false then begin List := Form2.ListView1.Items.Add; List.Caption := testwert; end; end; for z := 0 to Tabellen2.Count-1 do begin testwert := Tabellen2.Strings[z]; gefunden := false; for i := 0 to Tabellen.Count-1 do begin if tabellen.Strings[i] = testwert then begin gefunden := true; gleicheTabellen.Add(testwert); end; end; if gefunden = false then begin List := Form2.ListView2.Items.Add; List.Caption := testwert; end; end; Felder := TStringList.Create; Felder2 := TStringList.Create; for i:=0 to gleicheTabellen.count-1 do begin WilleDatabase.GetFieldNames(gleicheTabellen.Strings[i], Felder); WilleDatabase2.GetFieldNames(gleicheTabellen.Strings[i], Felder2); for k := 0 to Felder.Count-1 do begin testwert2 := Felder.Strings[k]; gefunden := false; for l := 0 to Felder2.Count-1 do begin if Felder2.Strings[l] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin List := Form2.ListView3.Items.Add; List.Caption := gleicheTabellen.Strings[i]+'.'+felder2.strings[l]; end; end; for l := 0 to Felder2.Count-1 do begin testwert2 := Felder2.Strings[l]; gefunden := false; for k := 0 to Felder.Count-1 do begin if Felder.Strings[k] = testwert2 then begin gefunden := true; end; end; if gefunden = false then begin List := Form2.ListView4.Items.Add; List.Caption := gleicheTabellen.Strings[i]+'.'+felder.strings[l]; end; end; end;Und genau an der gleichen Stelle, wo die Felder zugeordnet werden, sollen auch die Indizees überprüft werden. (Aber das ist dein Job):bimei PS : Achte darauf, was willst du genau wann an welcher Stelle wie abfragen, Also erst gleicheTabelle füellen, dann durchlaufen und für jeden durchlauf die Felder bearbeiten. Ach ja und ein : gleicheTabellen.Add(testwert); habe ich noch eingefügt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Danke DerKleine!:bimei Habe es ausprobiert und beim Compilieren kam die Warnung: for-Schleifenvariable"l" kann nach dem Durchlauf undefiniert sein. Okay, dann habe ich das Programm trotzdem mal ausgeführt, nachdem ich auf den Vergleichbutton clickte, dauerte es ungefähr 20 Sec. ca bis ich überhaupt ein Ergebnis bekommen habe. In dem Falle nur die Tabellen Und dann bekam ich noch eine Fehlermeldung, und zwar Listenindex überschreitet das Maximum (913) Was bedeutet diese Meldung :confused: Was kann ich überhaupt machen, das das Ergebnis sofort angezeigt wird. Denn auch wenn keine Fehlermeldung kommt, und ich alles angezeigt bekomme, dauert es genauso lange. Oder dauern die Schleifendurchläufe so lang? MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 7. März 2003 Teilen Geschrieben 7. März 2003 List := Form2.ListView3.Items.Add; List.Caption := gleicheTabellen.Strings[i]+'.'+felder2.strings[l]da muß entweder statt des l das k rein, oder testwert2 statt felder2.strings[l]. Weil : Du bist außerhalb der l-schleife und innerhalb der k-Schleife. Also Compilerhinweis (korrekt) l hat den Wert Felder2.Count und ist somit größer als erlaubt (Also Abbruch und Fehlermeldung beim Durchlauf). Fehler von uns beiden! Und zum dritten : Nehm den Einzelschritt - Modus (F7 oder F8) der Entwicklungsumgebung, oder setze Haltestellen (Start/Haltepunkt hinzufuegen/Quelltexthaltepunkt oder Click am Rand des Quelltextes, bis ein roter Kreis auftaucht) und nutze dann den Einzelschritt - Modus, wobei du dann die Schritte einzelnd nachvollziehen kannst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Okay, die Sache mit dem Brechpunkt! Hätte ich auch von selber drauf kommen können! hm, schauen wir uns da mal an! Bis später MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 7. März 2003 Autor Teilen Geschrieben 7. März 2003 Also //testwert2 statt felder2.strings[l]. ich habe es in Testwert2 geändert. Jetzt dauert es noch länger. Jetzt bekomme ich zwar keine Compiler-Warnung mehr, aber das Programm dauert extrem lang und reagiert später nicht und son Kram Dann habe ich den Brechpunkt gesetzt, auf die for-Schleife. Wenn ich dann mit f7 weiter gehe, dauert es wieder ca 5-10 sec. bis der blaue Balken ein weiter geht, da das gleiche Spielchen. Und dann geht er erst in die normal for-Schleife! hmpf, was soll ich da bloß tun? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 10. März 2003 Autor Teilen Geschrieben 10. März 2003 Hallo nochmal! Leider wird das hier noch zu Never Ending Story! Das liegt aber wohl an mir! @DerKleine: Dein Tip, mit der 2ten StringList (gleicheTabellen) funktioniert nicht. Bei mir zumindest nicht! Da das Programm schon jetzt 40 sec (ca.) für das Ergebnis braucht um es anzuzeigen, dauert es mit der 2ten StringList zusätzlich noch erheblich länger. Zudem wird mir kein Ergebnis angezeigt bzw. das Programm reagiert nicht. Was mach ich bloß falsch? :confused: Wäre es nicht mein Projekt für die Prüfung, hätte ich es schon längst aufgegeben. Wäre toll, wenn vielleicht noch jemand anderes einen Tip hat. Oder zur Ergänzung. Ich komme momentan jedenfalls nicht weiter, leider! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 10. März 2003 Teilen Geschrieben 10. März 2003 Ok dann wolle wir es nochmal probieren. Wie sagte schon Nummer 5 : "Gib mir Input!" Wie groß sind deine Datenbanken? Wieviel Tabellen? Wieviele Felder pro Tabelle? Wieviele Indexe pro Tabelle? Was macht dein Einzelschrittmodus in jedem Schritt? Sind Ergebnisse da? Du kannst versuchen, nach jedem einzelnem Schritt die ein Ergebnis von dem, was dort funktionieren sollte, auszugeben (Showmessage()). Ist zwar ziemlich aufwendig, aber sehr gut, um Fehler bzw. Schwachstellen zu lokalisieren. Wie sieht es mit zwei Testdatenbanken aus (Wenig Tabellen, wenig Felder)? Läuft das Programm überhaupt mal durch? Ist der Sprung an jeder Stelle so, wie wir uns das gedacht haben? Werden alle selbstkreierten Objekte auch wieder zerstört? - Ist häufig ein Problem der Speicherbelastung. (Ich habe die Ressourcenanzeige WIN98 immer in der Taskleiste angezeigt.) Wie werden die beiden DB verbunden? ODBC? Was passiert bei direktem Zugriff auf die einzelnen Tabellen (ohne BDE)? Oder liegt andere Zugriffsart vor? Ich gehe mal davon aus, daß dein Rechner selbst Delphi ohne Probleme verarbeitet, also mind. 1 GB, 256 MB usw. (also nix besonderes, aber auch nicht von vorgestern) Ich hoffe mal nicht, daß es an der Windows - version liegt. Ich glaube eher, daß irgendwo entweder eine Endlosschleife vorhanden ist (bei geposteten Quelltext IMHO nicht möglich, da for - Schleifen), oder die Datenbanken nicht richtig gelesen werden (weil nicht mehr sauber - irgendwie). Also Ziel muß sein, genau die Ursache des Fehlers und des Geschwindigkeitproblems zu lösen. Nochmal ganz kurz : "Gib mir Input!";) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 11. März 2003 Autor Teilen Geschrieben 11. März 2003 Moin DerKleine: Habe keine TestDatenbanken. Die erste DB hat 67, die 2te 50 Tabellen. Bei den Feldnamen, hui, da sind es laut Debugger knapp 939x913 Schleifendurchläufe. Bei den Indizes etwas weniger.(270x254) Da ich über einen Terminalclient auf den Server zugreife, und über diesen auch arbeite, kann ich mir wirklich nicht vorstellen, das es irgendwie irgendwelche HW-Probleme sind. Wie schon gesagt, wenn ich nur die Tabellen der beiden DB anzeigen lasse, dauert es ca. 40 sec, bis ich das Ergebnis habe. Wenn ich dann die Feldnamen und Indizes dazu mache, dauert es ewig bzw. das Programm reagiert nicht mehr. Ach ja, die Verbindung zur Datenbank. Eigenes Package, 2 TWDatabase und ein SQLTable. Wenn ich auf den Vergleichen-Button klicke, überprüfe ich auch nochmal, ob eine Verbindung zu einer Datenbank besteht.(Zusammen mit einer Messagebox) if WilleDatabase.Connected and WilleDatabase2.Connected then Form2.Show else Application.MessageBox(PChar('Sie müssen 2 Datenbanken auswählen!'), PChar('DB-Explorer: Information'), MB_OK + MB_ICONINFORMATION); Und der Code ist noch der selbe! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 11. März 2003 Teilen Geschrieben 11. März 2003 Originally posted by DerWolf Moin DerKleine: Habe keine TestDatenbanken. Dann baue dir welche lokal auf deinem Rechner. Du brauchst im Quelltext doch nur die (jetzigen) Datenbankverbindung auskommentieren (//) und neue Verbindungen einstellen. Dieses muß auch nicht unbedingt über das Package laufen. Du wirst dann sehen, ob dein Quelltext i.O. ist. Also meine Rechnung sagt, bei 939*913 Feldnamen (der Tabellen, die in beiden DB gleich sind) sind ca. 1.000.000 Schleifendurchläufe mit jeweils ca. 10 Zeilen Quelltext, also ca. 10.000.000 Quelltextzeilen abzuarbeiten. Das kann schon mal dauern.:bimei Du hast auch die Verbindung zu 2 Datenbanken, also auch zu 117 Tabellen und zu 1900 Feldern. Desweiteren öffnest du 6 Stringlists, x Listviews usw. Vielleicht zwingst du einfach deinen Rechner in die Knie. Nein, versuche einfach, einfache Testdatenbanken zu basteln und dort die Schwachstellen zu entdecken, alles andere ist reine Glückssache. Überprüfe unbedingt deine Speicherauslastung. Wenn der Fehler an dieser Stelle liegt, kann man dort ansetzen und Alternativen suchen (Andere Verbindungsart bzw. Verbindungen nur erhalten, die unbedingt benötigt werden.). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 11. März 2003 Autor Teilen Geschrieben 11. März 2003 hui, doch so viele Schleifendurchläufe! Ja, ich werde jetzt mal schauen, obwohl die Speicherauslastung vom Server noch im akzeptablem Rahmen liegt. Auf Test-DBs wollte ich eigentlich verzichten, aber da muß ich jetzt wohl durch. Schaun`mer mal! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 11. März 2003 Autor Teilen Geschrieben 11. März 2003 Also ich habe gerade Spaßeshalber alles auskommentiert, bis auf die Tabellennamen. Die wurden auch sofort angezeigt. Also liegt doch der Fehler ab dem Auslesen der Feldnamen. Sehe ich das richtig? Aber eigentlich ändert sich doch nichts am Code, oder? Oder habe ich im Code doch einen Fehler, der bloß nicht vom Compiler angezeigt wird? (Mal abgesehen von den millionen Schleifendurchläufen!) Was meinst du? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 11. März 2003 Teilen Geschrieben 11. März 2003 Originally posted by DerWolf Oder habe ich im Code doch einen Fehler, der bloß nicht vom Compiler angezeigt wird? Syntax - Fehler nein. Logischer Fehler - kann sein. Deshalb der Test. Falls ein logischer Fehler vorliegt, wird man in lokalisieren und beseitigen. Falls kein logischer Fehler vorliegt, ist es ein strukturelles Problem. Also muessen dann beim Datenzugriff Alternativen gesucht werden, die zeitlich (und speichertechnisch) nicht so anspruchsvoll sind. Aber ohne Testdatenbanken funktioniert alles jetzt nach dem Motto : Trail and Error. Das, was du an der einen Stelle verbessert, wird sich irgendwann an der anderen Stelle wieder verschlechtern (siehe Murphy's Gesetze) Deshalb ist jetzt der Stand sauber und optimal zu machen. PS : Übrigends wirst du in deiner weiteren Programmiertätigkeit mehr Zeit mit solchen (Fehleraufspürungs - und - beseitigungs - ) - Methoden verbringen, als mit reiner Codeerstellung. Und das Schlimmste daran ist, daß dein Kunde (bzw. Chef) keine sichtbaren Veränderungen (an der Oberfläche) wahrnehmen. Also in deren Augen - drei Tage nichts gemacht - in deinen Augen - Programm codetechnisch funktionell optimal gestaltet. (Ist manchmal ein kleines Dilemma) Nur wenn es dann sauber läuft, hast du in Zukunft weniger Probleme. [OT]Als BWL - er habe ich lernen dürfen, dass jeder Fehler in der Konstruktion eine Kostenflut, die 10 mal so hoch ist, nach sich zieht, wenn der Fehler erst beim Endprodukt erkannt ist, und das nur, um schnell auf dem Markt zu sein, bzw. Kosten in der Konstruktion zu sparen. (Siehe Rückrufaktionen diverser Autohersteller)[/OT] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 11. März 2003 Autor Teilen Geschrieben 11. März 2003 Danke auch für deine schnellen Antworten. Also die Speicherauslastung liegt bei 50% bei ausführen des Prog.(erst bei klicken des Vergleichen-Buttons). Es darauf hinauslaufen, da kann ich nichts machen. Mein Chef wird übrigens schon sehr ungeduldig! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 11. März 2003 Autor Teilen Geschrieben 11. März 2003 @ DerKleine: TestDatenbanken soll ich jetzt nicht unbedingt benutzen. :confused: Mir machte man dann den Vorschlag, eine Progressbar einzubauen, schließlich benutzt man das Programm später nicht täglich, sondern hin und wieder, wenn man eine DB updaten möchte. Die Progressbar deswegen, um den Fortschritt während des auslesens der Tabellen, etc. zu sehen. Nun, eine Progressbar habe ich nun eingebaut p := 0; SQLTable1.Open; anzahl := SQLTable1.RecordCount; Form2.ProgressBar1.Max := anzahl; inc(p); Form2.ProgressBar1.Position := p; und zwischen den einzelnen Schleifen auch noch mal ein inc(p); Form2.ProgressBar1.Position := p; Nun muß ich nur noch die dyn. Variablen wieder freigeben. Bis jetzt, wenn ich das Prog ausführe, ändert sich nichts an der Progressbar, erst wenn ich ein Ergebnis habe, ist ein Balken nur da. Wie gebe ich die dyn. Variablen frei? In einem Buch habe ich ein Beispiel mit nem FormClose. procedure Form1.FormClose ....... var .... begin for i:= treeview1.items.count-1 downto 0 do begin progressbar1.position := i; dispose(treeview1.items.data) end; end; Wie kann ich das jetzt umsetzen? Ich benutze ja in diesem Fall keinen TreeView! MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 11. März 2003 Teilen Geschrieben 11. März 2003 Originally posted by DerWolf Nun muß ich nur noch die dyn. Variablen wieder freigeben. Dispose gint dynamisch generierte Variablen wieder frei. Diese wurden vorher mit new bzw. getMem erstellt. Das hast du hier nicht. Du mußt nach jeder Änderung deiner Progressbar die Anzeige dieser Aktualisieren (Form2.ProgressBar1.refresh). Dann sollte es klappen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 11. März 2003 Autor Teilen Geschrieben 11. März 2003 Hallo Ich habe es ausprobiert. Aber imme noch das gleiche Ergebnis. Während der Durchführung des Programms keine Anzeige von Balken in der Progressbar! Erst wenn ein Ergebnis angezeigt wird, ist ein mickriger Balken in der Progressbar vorhanden. Und das ist ja nicht der Sinn des ghanzen! Und watt nu? :confused: Also so langsam bekomme ich das ungute Gefühl, das mir die Programmierung doch nicht liegt, aber sowas merke ich immer erst dann, wenn es schon zu spät ist! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DerWolf Geschrieben 12. März 2003 Autor Teilen Geschrieben 12. März 2003 Hallo @ Der Kleine, vielleicht kannst du mir nochmal helfen. Also ich laufe die StringList für die Feldnamen falsch durch. Es sollen ja nur noch die Tabellen sein, die bei beiden DBs identisch sind. Das war die Sache mit der Schnittmenge! Mithilfe dieser StringList, nennen wir sie wieder gleicheTabellen, kann ich dann wieder die Feldnamen auslesen(Mein machte mich darauf aufmerksam, das Feldnamen angezeigt wurden, die in einer Tabelle sind, die aber eigentlich in der anderen DB garnicht vorhanden sind). Und da ich bei den Feldnamen ja den Dazugehörigen Tabellennamen ausgeben soll, nur durch ein Punkt getrennt, muß das dann schon passen. Und weil der Programmlauf solange dauert, sagte mein Chef drauf, das kann doch garnicht sein, das liege am Schleifendurchlauf. (ab Feldnamen, da Tabellen sofort angezeigt werden) Also, wie mache ich es, das ich eine StringList habe, in der nur die Tabellen sind, die in beiden DBs übrigbleiben. Denn so wie ich es bis jetzt gemacht habe, ist wohl jetzt doch falsch. Help!? MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.