![]() |
Delphi-Version: 5
Datenbank überschreibt inhalte
Hallo zusammen,
Ich bin grad am verzweifeln:pale: Ich habe in meinem Aktuellen Programm eine Datenbank (in seperater Unit) welche instanzen vom Inhalt bei Start des Programmes erzeugt. Ich habe soeben herrausgefunden (Per showmessage), dass das Programm den ersten Eintrag in der Datenbank überschreibt, und ich so immer die gleiche Augabe erhalte. Was mich wundert: nachdem ich per doppel/ die Zeile "unsichtbar" gemacht habe welche das eintragen der letzten daten in die Datenbank beinhaltet kam immernoch der gleiche Inhalt:?:. Ich würde mich sehr über hilfreiche (und für mich verständliche) Hilfe freuen. Anbei nun die Quellcodes der entsprechenden Stellen.
Delphi-Quellcode:
Das steh in der Formcreate der Unit1
procedure TForm1.FormCreate(Sender: TObject);
var Atom:TAtom; Hilf:real; begin //hier steht das folgende noch 2 mal nur das es eingetragen wird! Atom.set_Atomname('Lithium'); Atom.set_Atomsymbol('Li'); Atom.set_Atomserie('Erdalkalimetalle'); Atom.set_Atomaussehen('XXXX'); Atom.set_Atomaggregatzustand('Fest'); Atom.set_Atomgefahren1('XXXX'); Atom.set_Atomordnungszahl(3); Atom.set_Atommasse(7); Atom.set_Atomschmelztemperatur(180); Atom.set_Atomsiedetemperatur(1372); Atom.set_Atomdichte(0.534); Atom.set_AtomEN(1.0); Atom.set_Atomoxidationszahl1(1); //Periodensystem.Hinzufuegen(Atom); showmessage('LI'); end;
Delphi-Quellcode:
Das war Unit2
procedure TForm2.Button26Click(Sender: TObject);
begin Abkuerzung:=1; Form3.Trage_ein; Form3.showmodal; end; //...
Delphi-Quellcode:
Das war unit3
begin
Atomzahl:=unit2.Abkuerzung; Periodensystem.Ausgabe(Listbox1,Listbox2,Listbox3,Listbox4,Listbox5,Atomzahl); end;
Delphi-Quellcode:
Und das die UPeriodensystem.
constructor TPeriodensystem.create;
begin Anzahl:=1; inherited create; end; procedure TPeriodensystem.Hinzufuegen(X:TAtom); var I:integer; begin showmessage(inttostr(Anzahl)); if Anzahl=3 then for I:=1 to 2 do showmessage(inhalt[1].get_Atomname); Inhalt[Anzahl]:=x;Anzahl:=Anzahl+1; end; Ich danke schonmal für die Antworten. |
AW: Datenbank überschreibt inhalte
Was ist das denn?
Delphi-Quellcode:
for I:=1 to 2 do
showmessage(inhalt[1{<== Hier sollte wohl Schleifenvariable I stehen}].get_Atomname); |
AW: Datenbank überschreibt inhalte
das wird später rausgenommen... hab ich quasi zur fehlersuche eingebaut.
Wobei sich halt herrausstellt, dass der inhalt immer gleich ist. Wenn dann die letzte eintragung oben wieder sichtbar gemacht wird, dann sieht man (wenn I da steht) das für den inhalt1 und 2 der gleiche name angegeben wird (welcher ja eigentlich unterschiedlich ist); |
AW: Datenbank überschreibt inhalte
Zitat:
|
AW: Datenbank überschreibt inhalte
ja gut aber selbst wenn ich es tue der inhalt 1 sollte anders sein da (ich vergas es glaub ich zu erwähnen) der Inhalt 1.get_Atomname Wasserstoff beinhalten sollte und nicht Litihum!
zudem: wenn ich die Variable I einsetzte, dann erscheint 2* Lithium obwohl einmal Wasserstoff und einmal Helium die richtigen inhalte wären. Und bei der Ausgabe aus dem Periodensystem in meine Form3 erhalte ich 3 mal das gleich und nicht 3 verschiedene |
AW: Datenbank überschreibt inhalte
Wie ist denn Inhalt deklariert?
|
AW: Datenbank überschreibt inhalte
Delphi-Quellcode:
Um mal die complette Deklaration der Elemente von TPeriodensystem anzuzeigen...
Type TPeriodensystem = class
inhalt:array[1..112]of TAtom; Anzahl:integer; constructor create; procedure Hinzufuegen(x:TAtom); procedure Ausgabe(L1,L2,L3,L4,L5:TListbox;X:integer); end; Was ich grade ausprobiert habe: wenn ich eine showmessage in Unit 1 vor dem eintragen der Informationen zu Lithium gebe, dann bekomme ich auch Lithium als ausgabe für den inhalt der beiden vorherigen Infos... was mich wundert, denn das Periodensystem kann die da noch garnicht kennen... |
AW: Datenbank überschreibt inhalte
Du hast auch noch weitere Probleme in deinem Sourcecode.
Da du Delphi4 verwendest vermute ich dass TAtom eine Klasse und kein Record ist. Daher muss jedes Objekt von TAtom neu erzeugt werden:
Delphi-Quellcode:
Wenn du dagegen nur ein einziges Objekt der Klasse TAtom hast (globale Variable ?),
procedure procedure TForm1.ErzeugeSauerstoff;
var atom : TAtom; begin atom := TAtom.Create; // neues Objekt erzeugen atom.Atomname := 'Sauerstoff'; ... // hier weitere Eigenschaften bestücken Periodensystem.Hinzufuegen(atom); end; dann ist klar, dass immer das gleiche Objekt mit den Daten überbügelt wird. |
AW: Datenbank überschreibt inhalte
Was kommt hierbei heraus?
Delphi-Quellcode:
procedure TPeriodensystem.Hinzufuegen(X:TAtom);
var I:integer; begin if Anzahl <= High(Anzahl) then begin Inhalt[Anzahl]:=x; Anzahl:=Anzahl+1; for I:= 1 to Anzahl do showmessage(inhalt[I].get_Atomname); end; end; |
AW: Datenbank überschreibt inhalte
also meines wissens habe ich das im hauptprogramm gemacht.... aber ich fürchte in der UPeriodensystem nicht.....
@DebbyH: ne Fehlermeldung:-D ähm wo muss ich denn dann(und vorallem wie) den inhalt[X] kreiren |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz