![]() |
Nach dem Schließen eine Form Procdure einer anderen Form ausführen
Guten Morgen
Ich bin schon seit einigen Tagen auf der suche nach einer Methode wie ich beim schließen einer Form eine Procedure in einer anderen Form ausführen kann. Hintergrund ist der es gibt eine Form Bestellung in der werden die Artikel eingetragen klickt man auf Speichern wird überprüft ob der Artikel in der DB vorhanden ist sollte er nicht vorhanden sein öffnet sich einen zweite Form in der zusätzliche Informationen für den Artikel eingetragen werden und der Artikel in die DB aufgenommen wird. Nun soll die Form wieder geschlossen werden und die Überprüfung erneut gestartet werden. Dieser Ablauf soll solange wiederholt werden bis alle 10 Eingabe spalten geprüft sind und dann die Daten in der DB gespeichert werden. Bei dem folgenden Code bekomme ich die Fehlermeldung "Access Violation": Schließen:
Delphi-Quellcode:
Form aufrufen:
procedure TNeuerArtikel.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action := Cafree; Bestellung.BestellungNeuerArtikelLaden; end;
Delphi-Quellcode:
if eBezeichnung1.Text <> '' then
begin if ID1 = 0 then begin SpalteNeuerArtikel := 1; Main.Artikelbezeichnung := eBezeichnung1.Text; Main.Artikelnr := eArtikelnummer1.Text; Main.Preis := eEinzelpreis1.Text; Main.Lieferant := eLieferant1.Text; Main.FNeuerArtikeloeffnen; end; end;
Delphi-Quellcode:
Wo liegt mein Denkfehler kann mir jemand Helfen?
procedure TMain.FNeuerArtikeloeffnen;
begin TNeuerArtikel.Create(Self); end; Gruß Mcop2001de |
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
So ganz seh ich jetzt nicht durch.
Beim Schließen welcher Form knallt es jetzt? ( TNeuerArtikel? ) In welcher der Zeilen knallt es? ( es soll Leute geben, die nutzen doch tatsächlich ihren Debugger, hab ich mal gehört :stupid: ) Wo steht der zweite Code? ( soll das etwa BestellungNeuerArtikelLaden sein? ) Warum nicht im OnCloseQuery prüfen, also VOR dem Schließen? PS: "Zugriffsverletztung bei Adresse $00000xx" deutet darauf hin, dass DU irgendwo auf eine Methode oder ein Feld (Variable) eines nichtexistierenden Objektes (nil) zugreifen willst. Tipp: Strg+C funktioniert fast überall (bei den Meldungen im Compilerlog und auch bei Dialogen) und schon hat man etwas als "Text" zum hier rein koppieren. |
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Moin...8-)
Delphi-Quellcode:
...das muß schon mal schiefgehen. :roll: Hänge mal das komplette (!) Projekt als ZIP hier an. Da können wir besser deine Logik beurteilen und dir helfen. :P
procedure TMain.FNeuerArtikeloeffnen;
begin TNeuerArtikel.Create(Self); end; |
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Zitat:
Kommt drauf an "wann" FNeuerArtikeloeffnen aufgerufen wird. TNeuerArtikel hängt an TMain(Self) und wird dieses TMain geschlossen, dann nimmt es dieses TNeuerArtikel mit über den Jordan. Außerdem hängt die VCL Forms nicht nur als Owner, sondern z.B. auch via implizitem PopupParent an die gerade "aktive" Form und wird jene Form geschlossen, dann nimmt sie ihre Child ebenfalls mit. > Neue Forms anzeigen "NACHDEM" die Form von eben weg ist und nicht "WÄHREND" sie grade verschwindet.
Delphi-Quellcode:
So ein Code macht immer viel Spaß, da dieses Close die erste Form nicht sofort schließt, sondern das erst beim nächsten "ProcessMessages" passiert, also nachdem sich die neue Form/Dialog an die ActiveForm gehängt hat.
ActiveForm.Close; // Die Form, welche grade den Eingabefokus hat
ShowDialog(...); // oder TXyzForm.Create+Show |
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Zitat:
|
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Die Variable SpalteNeuerArtikel wird in der Procedure BestellungneuerartikelS1 beschrieben und soll nach dem Schließen der Form NeuerArtikel die 10 Spalten unterscheiden so das die Variablen ID1 - ID10 nur von den Spalten beschrieben werden.
Mit der ID1..10 wird die Artikel_ID aus der Datenbank für jede Spalte zwischen gespeichert. Das eigentliche Problem scheint die Variabel SpalteNeuerArtikel zusein. diese wird Hier beschrieben
Delphi-Quellcode:
procedure TBestellung.BestellungneuerartikelS1;
begin if eBezeichnung1.Text <> '' then begin if ID1 = 0 then begin SpalteNeuerArtikel := 1; Main.Artikelbezeichnung := eBezeichnung1.Text; Main.Artikelnr := eArtikelnummer1.Text; Main.Preis := eEinzelpreis1.Text; Main.Lieferant := eLieferant1.Text; Main.FNeuerArtikeloeffnen; end; end; end; Der Fehler Im Projekt VerwaltungV1.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x007dc39a: read of address 0x000006e4' aufgetreten. wird in der Procedure BestellungNeuerArtikelLaden ausgelöst.
Delphi-Quellcode:
// nach dem schliessen des Frames NeuerArtikel wird die ID neu ermittel
procedure TBestellung.BestellungNeuerArtikelLaden; begin if SpalteNeuerArtikel = 1 then // Hier wird der Fehler Ausgelöst begin ID1 := Artikelpruefung(eBezeichnung1.Text,eEinzelPreis1.Text,eArtikelnummer1.Text,eLieferant1.Text); end; end; |
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Hallo himitsu
zu deine Anmerkung Zitat:
|
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Es gibt mittlerweile soviel Arbeitsspeicher... wieso gibt man überhaupt noch Forms frei? Ich gehe einfach mal davon aus, dass es sich hierbei um ein Kleinstprojekt handelt wo das eh vollkommen überflüssig ist Forms freizugeben. Ob diese Kleinstanwendung jetzt 2 MB oder 5 MB belegt ist doch egal.
|
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Hallöle...:P
Die Preisfrage ist, wo
Delphi-Quellcode:
deklariert ist.
SpalteNeuerArtikel
...deshalb solltest du das Projekt anhängen. :? Ansonsten raten wir in 20 Seiten immer noch weiter. :? PS: Zitat:
|
AW: Nach dem schleißen eine Form Procdure einer anderen Form ausführen
Hallo Haentschman
die Variable wird im private Bereich der Unit frmBestellung deklariert Im Anhang das bisherige Projekt gibt es denn eine andere Möglichkeit die Formen innerhalb einer Hauptform dazustellen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 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-2025 by Thomas Breitkreuz