Zum Inhalt springen

[Delphi] Im ListView den Feldnamen mit dazugehörigem Tabellennamen ausgeben


DerWolf

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey, nix DAU! Da ließ dir den anderen Thread durch!:D

PS : Auch ich habe mal angefangen! (Damals - mit Access):D

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey, den Thread habe ich mir gerade zum Teil durchgelesen.

Und ich muß feststellen, ich bin gar kein DAU! :D

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 schreiben
List.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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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! :D

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!";)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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! :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...