Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Exception EReadError in Modul - Ungültiger Eigenschaftswert (https://www.delphipraxis.net/188862-exception-ereaderror-modul-ungueltiger-eigenschaftswert.html)

Freyr77 14. Apr 2016 10:22

Delphi-Version: 10 Seattle

Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Moin.

Mein Delphi zeigt mir mir folgenden Fehler an wenn ich mein Projekt starten will:

"Exception EReadError in Modul ProjectDBTest.exe bei 000BE940. Fehler beim Lesen von Form1.OnCreate: Ungültiger Eigenschaftswert."

Kleine Anmerkung: Es hat sich vorher schon Erzeugen lassen ohne diese Meldung.. ich finde den Fehler einfach nicht. Beim Debuggen bleibe ich in Vcl.Forms hängen - unten der Ausschnitt daraus.
Ab dem "raise" geht nichts mehr. Jemand ne Idee?

Delphi-Quellcode:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
  Instance: TComponent;
begin
  // Set flag that TCustomForm constructor can read, so it knows if it's being
  // created as a main form or not (required when MainFormOnTaskbar is True)
  FCreatingMainForm := (FMainForm = nil) and InstanceClass.InheritsFrom(TForm);
  Instance := nil;
  try
{$IF DEFINED(CLR)}
    Instance := InstanceClass.Create(Self);
    Reference := Instance;
{$ELSE}
    Instance := TComponent(InstanceClass.NewInstance);
    TComponent(Reference) := Instance;
    try
      Instance.Create(Self);
    except
      TComponent(Reference) := nil;
      Instance := nil;
      raise;
    end;

Stevie 14. Apr 2016 10:33

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Korrupte dfm. Öffne das Form in der IDE um dort den Fehler zu beheben und kompilier das Program dann neu.

Freyr77 14. Apr 2016 10:37

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Zitat von Stevie (Beitrag 1335549)
Korrupte dfm. Öffne das Form in der IDE um dort den Fehler zu beheben und kompilier das Program dann neu.

Wenn ich das versuche sagt er mir: "Sicherungsordner 'c\......\embarcadero\studio\17.0\SOURCE\VCL\_hist ory\' kann nicht angelegt werden.

Freyr77 14. Apr 2016 10:50

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Ach quatsch, vergesst das da oben wieder... könntest du das nochmal genauer erklären?

Stevie 14. Apr 2016 11:26

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Du wirst wohl irgendwo eine Unit1 oder so haben mit einem Form1 (in welchem es ja das Problem gibt). Also öffne dieses Form in der IDE um den Fehler der falschen Zuweisung von OnCreate zu fixen.

Ich rat jetzt mal so ins Blaue, weil du ja nicht mehr Informationen bereitgestellt hast, dass dort irgendwas in der dfm hängt, was es nicht im Code gibt (falscher Form1Create event handler oder sowas). :glaskugel:

himitsu 14. Apr 2016 11:36

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Wenn ich das versuche sagt er mir: "Sicherungsordner 'c\......\embarcadero\studio\17.0\SOURCE\VCL\_hist ory\' kann nicht angelegt werden.
Das klingt danach, als wenn du eine Unit der VCL bearbeiten/speichern willst, aber du solltest doch nur in deiner eigenen Unit (Unit1 oder so) den Fehler suchen, bzw. in der zugehörigen Unit1.dfm .

In der laufenden Anwendung werden DFM-Fehler mit einer Exception beantwortet.
Beim Laden der Unit in der IDE hängt da ein "Reparatur"-Code im DFM-Loader, welcher DFM-Fehler versucht zu behandeln.

Freyr77 14. Apr 2016 12:38

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
FormCreate :

Delphi-Quellcode:
  DefaultFont.Name := 'Tahoma';
  DefaultFont.Size := 9;
  Tables := TStringList.Create;
  C := nil;
  with TSQLConnection.RecordProps do
  begin
    AddFilterOrValidate('Ident', TSynFilterTrim.Create);
    AddFilterOrValidate('Ident', TSynValidateText.Create);
    // AddFilterOrValidate('Server',TSynValidateText.Create);
  end;
  MainCaption := Caption;
  if (ParamCount = 1) and FileExists(paramstr(1)) then
  begin
    FN := paramstr(1);
    if IsJetFile(FN) then
      CmdLine := ctJet_mdbOLEDB
    else if IsSQLite3File(FN) then
      CmdLine := ctSqlite3
    else
    begin
      ShowMessage(FN + '?', True);
      exit;
    end;
    C := TSQLConnection.Create;
    try
      C.Connection := CmdLine;
      C.Ident := S2U(FN);
      C.Server := C.Ident;
      TryConnect(C, True);
    finally
      C.Free;
    end;
  end
  else
  begin
    Conns := TSQLRestStorageInMemory.Create(TSQLConnection, nil,
      ChangeFileExt(ExeVersion.ProgramFileName, '.config'), false);
    try
      Conns.ExpandedJSON := True; // for better human reading and modification
      Task.Title := MainCaption;
      Task.Inst := sSelectAConnection;
      Task.Content := sSelectOrCreateAConnection;
      if Conns.Count = 0 then
        Btns := [cbCancel]
      else
      begin
        for i := 0 to Conns.Count - 1 do
          Task.Selection := Task.Selection +
            U2S(TSQLConnection(Conns[i]).Ident) + #10;
        Btns := [cbOk, cbCancel];
        Task.Query := U2S(TSQLConnection(Conns[0]).Ident);
        Task.Verify := sUpdateConnection;
      end;
      Task.VerifyChecked := false;
      Task.Buttons := sNew;
      res := Task.Execute(Btns, 0, [], tiQuestion);
      case res of
        mrOk:
          if Task.VerifyChecked then
          begin
            C := TSQLConnection(Conns[Task.SelectionRes]);
            msg := Task.Verify;
          end
          else
          TryConnect(TSQLConnection(Conns[Task.SelectionRes]), false);
        100:
          begin
            C := TSQLConnection.Create;
            msg := sNew;
          end;
      end;
      if C <> nil then
        with TRecordEditForm.Create(self) do
          try
            C.Password := Crypt(C.Password);
            SetRecord(nil, C, nil, nil, sConnectionHints, 0, msg);
            if ShowModal = mrOk then
            begin
              C.Password := Crypt(C.Password);
              if TryConnect(C, True) and (res = 100) then
                Conns.AddOne(C, false, '')
              else if res = 100 then
                FreeAndNil(C);
            end
            else
              FreeAndNil(C);
          finally
            Free;
          end;
    finally
      Conns.Free;
    end;
  end;
end;

DeddyH 14. Apr 2016 12:49

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Heißt Deine Komponente wirklich TSQLConnection?

Freyr77 14. Apr 2016 12:53

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Zitat von DeddyH (Beitrag 1335569)
Heißt Deine Komponente wirklich TSQLConnection?

Tut sie, ja.

DeddyH 14. Apr 2016 12:56

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Und sie ist vom Typ TSQLConnection (oder die Unit SQLExpr ist aus einem anderen Grund eingebunden)? In dem Fall könnte ich mir vorstellen, dass der Compiler/die IDE durcheinanderkommt.

baumina 14. Apr 2016 12:58

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Ich hab keine Ahnung was da passieren soll, aber ich würds mal ausklammern:

Delphi-Quellcode:
with TSQLConnection.RecordProps do
   begin
     AddFilterOrValidate('Ident', TSynFilterTrim.Create);
     AddFilterOrValidate('Ident', TSynValidateText.Create);
     // AddFilterOrValidate('Server',TSynValidateText.Create);
   end;

Freyr77 14. Apr 2016 13:06

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Das scheint es auch nicht zu sein... also bezogen auf DeddyH

himitsu 14. Apr 2016 13:09

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Ähhh, warum jetzt im Quellcode (PAS) rumpfuschen, wo das Problem doch scheinbar im Formular (DFM) liegt?

Stevie 14. Apr 2016 13:37

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Zitat von himitsu (Beitrag 1335576)
Ähhh, warum jetzt im Quellcode (PAS) rumpfuschen, wo das Problem doch scheinbar im Formular (DFM) liegt?

Ich wollts auch grad sagen, der Fehler im ersten Post hat nix mit dem Code in der Methode zu tun, sondern, damit, dass der Streaming Mechanismus den in der dfm bei FormCreate angegebenen Methodennamen nicht finden und zuweisen kann. Das findet man eigentlich relativ schnell heraus, wenn man die Form öffnet und dann speichert oder kompiliert und dann eine Meldung in der Form

"The <methodenname in der dfm> method referenced by Form1.OnCreate does not exist. Remove the reference?"

bekommt. Klickt man da auf nein, dann lässt Delphi das so falsch in der dfm stehen und es gibt den besagten Fehler beim Starten der Anwendung.

Machsu rechtsklick auf deine Form und als dfm anzeigen und schaust mal, was dort bei
Code:
OnCreate =
steht. Dort sollte in deinem Fall der Methodenname der Methode, dessen Code du vorhin gepostet hast, stehen.

Freyr77 14. Apr 2016 14:19

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Zitat von Stevie (Beitrag 1335581)
Zitat:

Zitat von himitsu (Beitrag 1335576)
Ähhh, warum jetzt im Quellcode (PAS) rumpfuschen, wo das Problem doch scheinbar im Formular (DFM) liegt?

Ich wollts auch grad sagen, der Fehler im ersten Post hat nix mit dem Code in der Methode zu tun, sondern, damit, dass der Streaming Mechanismus den in der dfm bei FormCreate angegebenen Methodennamen nicht finden und zuweisen kann. Das findet man eigentlich relativ schnell heraus, wenn man die Form öffnet und dann speichert oder kompiliert und dann eine Meldung in der Form

"The <methodenname in der dfm> method referenced by Form1.OnCreate does not exist. Remove the reference?"

bekommt. Klickt man da auf nein, dann lässt Delphi das so falsch in der dfm stehen und es gibt den besagten Fehler beim Starten der Anwendung.

Machsu rechtsklick auf deine Form und als dfm anzeigen und schaust mal, was dort bei
Code:
OnCreate =
steht. Dort sollte in deinem Fall der Methodenname der Methode, dessen Code du vorhin gepostet hast, stehen.

OnCreate = FormCreate. Stimmt alles...:?

himitsu 14. Apr 2016 14:37

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Exception EReadError in Modul - Ungültiger Eigenschaftswert
Da steht nichts von OnCreate.
Somit kann der Fehler auch wo anders in der DFM sein.


Also nochmal.
Was passiert, wenn du die Unit/Form im Delphi lädst?

Stevie 14. Apr 2016 14:41

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Zitat von himitsu (Beitrag 1335602)
Zitat:

Exception EReadError in Modul - Ungültiger Eigenschaftswert
Da steht nichts von OnCreate.

Selektive Wahrnehmung?

Zitat:

Zitat von Freyr77 (Beitrag 1335546)
Mein Delphi zeigt mir mir folgenden Fehler an wenn ich mein Projekt starten will:

"Exception EReadError in Modul ProjectDBTest.exe bei 000BE940. Fehler beim Lesen von Form1.OnCreate: Ungültiger Eigenschaftswert."


Freyr77 14. Apr 2016 14:45

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Zitat:

Zitat von himitsu (Beitrag 1335602)
Zitat:

Exception EReadError in Modul - Ungültiger Eigenschaftswert
Da steht nichts von OnCreate.
Somit kann der Fehler auch wo anders in der DFM sein.


Also nochmal.
Was passiert, wenn du die Unit/Form im Delphi lädst?

Nichts. Und wenn ich kompiliere erscheint die Fehlermeldung. Ich kann auch keinen Punkt setzen und durch debuggen, weil es nirgendwo reinspringt. Außer ich setze den Haltepunkt in der dpr, dann springt er bis Vcl.Forms.

Delphi-Quellcode:
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(DBTestMain.Form1);
  //THTTPServerForm, HTTPServerForm
  Application.Run;
end.

himitsu 14. Apr 2016 14:49

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Den Punkt setzt du da hin
Delphi-Quellcode:
Application.CreateForm(DBTestMain.Form1);


Dann die Debug-DCUs aktivieren.
Aber das kann man sich sparen, weil wer totalen Mist gebaut hat und der Schrott standardmäßig immer aktiviert ist.

Und dann mit F7 in die VCL rein (und leider auch in die RTL, also ab und an besser F8 statt F7)



Aber eigentlich sollte der DFMLoader in der IDE den selben Fehler anzeigen, wie der DFMLoader im Programm. :gruebel:

hoika 14. Apr 2016 18:17

AW: Exception EReadError in Modul - Ungültiger Eigenschaftswert
 
Hallo,
erzeuge eine neue leere Unit, mache die zur Hauptunit (in der dpr).
Dann klammerst du die Problem-Unit in der dpr aus.

Jetzt schrittweise alles von der Problem-Unit in neue leere Unit rein.

Ist mühsam, aber danach sollte es wieder laufen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz