locked
Ein "Form" geht plötzlich nicht mehr, auch nicht zu editieren ;-(( RRS feed

  • Frage

  • Hallo NG,

    ich habe mal wieder ein Problem, das mich überfordert.

    Ein Programm, das schon seit VFP7 bei mir jahrelang zuverlässig läuft, und das ich alle 3 Monate genau einmal für die Quartalsabrechnung unseres privaten Motorseglers benötige, läuft plötzlich nicht mehr. selbst alle Datensicherungen, die ich jedes Mal nachdem Arbeiten (also 4 x im Jahr) erstelle, zeigen denselben Fehler.

    Sowohl beim Aufrufen zum Ändern der Form als auch beim Ausführen erhalte ich denselben Fehler. Und auch egal ob mit VFP7, mit dem er geschrieben wurde, oder auch unter VFP9 geht es nicht mehr.

    Fehlermeldung beim Versuch die Form zum Ändern aufzurufen:
    Fehler beim Laden der Datei - Datensatz Nr.167. "Grid2" <oder eines seiner Elemente>.Height: Ausdruck liefert ungültigen Wert.

    Fehlermeldung beim Versuch der Ausführung:
    Fehler beim Laden der Datei - Datensatz Nr.167. "Grid2" <oder eines seiner Elemente>.Height: Fehler bei Grid2 - Height: Ausdruck liefert ungültigen Wert.

    Wieso soll hier die Höhe eines Objekts nicht (mehr) stimmen? Und das bei allen meinen Sicherungen?

    Wie gesagt: keine Ahnung, wie ich das Programm wieder zum Laufen bekomme oder wo ich hier ansetzen kann. ;-((((

    Weiß jemand Rat? Die Datei kann nicht beschädigt sein, denn alle vorherigen Sicherungen, über 6 Generationen hinweg, verhalten sich plötzlich genau so.

    Gruß Jürgen


    <--------(nur Fliegen sind schöner!)-------->

    Sonntag, 3. Juli 2016 16:02

Antworten

  • Hallo Jürgen,

    Du kannst ein Formular auch wie eine Tabelle öffnen:

    USE Pfad\Formularname.scx

    Klicke dann auf den Button Datenblatt.

    In der Spalte Objname findest Du die Namen der Objekte Deines Formulars.

    In der Spalte Class die Klassennamen, usw.

    In der Spalte Properties findest Du die Eigenschaften des jeweiligen Objektes, z. B.:

    Top = 100
    Left = 10
    Width = 580
    Height = 300
    TabIndex = 3
    Name = "Komforttabelle1"

    usw.

    So kannst Du die einzelnen Werte überprüfen und bei Bedarf auch gleich korrigieren :-)

    Gruß, Stefan

    Sonntag, 3. Juli 2016 16:33
  • Noch ein Tipp, bevor Du alles durchsuchst: In der Fehlermeldung heißt es:

    Fehler beim Laden der Datei - Datensatz Nr.167. "Grid2" <oder eines seiner Elemente>.Height: Ausdruck liefert ungültigen Wert.

    Also guck im 167sten Datensatz -- GO 167 :-)

    Matthias

    Sonntag, 3. Juli 2016 19:06
  • Was sich geändert haben könnte ist eine im Formular benutzte DBF, ein View, irgendetwas in Daten. Wobei dann die Frage ist, wie sich das auf die Height Eigenschaft des Grid auswirken sollte, außer Du hast da einen Ausdruck drin stehen, der sich einen Wert aus einer Tabelle aus einem Datensatz liest.

    Das wird sich herausstellen, wenn Du das Formular per USE öffnest und in Datensatz 167 schaust, wie Matthias schon sagte GO 167.

    USE myform.scx
    GO 167
    Browse

    Die Height Property dürfte in dem Properties Window beschrieben sein und da sich Dein Formular und alle Backups der letzten 6 Monate nicht geändert haben, musst Du darin etwas anderes als lediglich eine Zahl finden, einen Ausdruck für die Height des Grid, der nicht mehr gültig ist, weil sich etwas außenstehendes geändert hatte. Könnte z.B. ein Ausdruck wie _SCREEN.Height-800 sein, wenn das <0 ist, weil die IDE nicht auf voller Größe ist, würde das z.B. knallen.

    Selbst wenn es um das Formular mit dem Resizer geht, dürften die Backupvarianten des Formulares noch laufen, aber wenn Du erst einmal ein Formular geladen hast, wird ein SCX gleichen Namens auch erst wieder wirklich neu eingelesen, nachdem Du alles ins RAM geladene komplett entlädst, ein CLEAR ALL vor Öffnen des wiederhergestellten Backups könnte auch schon helfen, bzw. VFP restart.

    Ich würde aber auf jeden Fall in Datensatz 167 reinschauen. Ein Seiteneffekt ist auch nicht auszuschließen, also schau auch auf andere Properties.

    Im Übrigen gilt die Frage, die meist zur Antwort führt: Was wurde zuletzt geändert? Da Du das Formular nur einmal alle 3 Monate nutzt kann das ziemlich viel sein, insbesondere vieles, was Du längst nicht mehr auf dem Zettel hast.

    Tschüß, Olaf.


    Olaf Doschke - TMN Systemberatung GmbH

    Montag, 4. Juli 2016 06:07
  • Hallo ich danke Euch. Der Fehler ist gefunden.

    Nach langem Suchen und Überlegen, was ich geändert hatte, ist es jetzt klar. Wobei ich nicht beurteilen kann, ob so etwas überhaupt passieren darf. Aber egal ....

    Ich hatte vor einiger Zeit die Bildschirmdarstellung von 100% auf 125% umgestellt. Durch meine neuen Monitore war mir sonst alles zu klein. Und Platz genug auf dem Schirm war ja vorhanden.

    Bei dem entsprechenden Grid hatte ich ursprünglich eine Höhe von 20 eingestellt. Das war wohl damals das Minimum und wurde jetzt vermutlich unterschritten. Ich habe es auf 40 gesetzt und siehe da, alles läuft wieder.

    Das mit der Idee die Form mit USE zu öffnen und den Satz 167 zu uhtersuchen, war die Lösung!

    Warum Gridhöhe 20? Na ja, nur bei Bedarf wurde es ausgeklappt.

    Das mit der Form als Tabelle hatte ich schlicht vergessen. Beim Suchen im Internet bin ich auf eine ähnliche Frage (von mir) gestoßen. Vor 12 Jahren! Da bin ich das erste Mal auf so etwas "reingefallen".

    Danke und Gruß. Jetzt gehe ich erste einmal zwei Wochen in Urlaub!

    Jürgen


    <--------(nur Fliegen sind schöner!)-------->

    Montag, 4. Juli 2016 09:50

Alle Antworten

  • Hallo Jürgen,

    Du kannst ein Formular auch wie eine Tabelle öffnen:

    USE Pfad\Formularname.scx

    Klicke dann auf den Button Datenblatt.

    In der Spalte Objname findest Du die Namen der Objekte Deines Formulars.

    In der Spalte Class die Klassennamen, usw.

    In der Spalte Properties findest Du die Eigenschaften des jeweiligen Objektes, z. B.:

    Top = 100
    Left = 10
    Width = 580
    Height = 300
    TabIndex = 3
    Name = "Komforttabelle1"

    usw.

    So kannst Du die einzelnen Werte überprüfen und bei Bedarf auch gleich korrigieren :-)

    Gruß, Stefan

    Sonntag, 3. Juli 2016 16:33
  • Noch ein Tipp, bevor Du alles durchsuchst: In der Fehlermeldung heißt es:

    Fehler beim Laden der Datei - Datensatz Nr.167. "Grid2" <oder eines seiner Elemente>.Height: Ausdruck liefert ungültigen Wert.

    Also guck im 167sten Datensatz -- GO 167 :-)

    Matthias

    Sonntag, 3. Juli 2016 19:06
  • Was sich geändert haben könnte ist eine im Formular benutzte DBF, ein View, irgendetwas in Daten. Wobei dann die Frage ist, wie sich das auf die Height Eigenschaft des Grid auswirken sollte, außer Du hast da einen Ausdruck drin stehen, der sich einen Wert aus einer Tabelle aus einem Datensatz liest.

    Das wird sich herausstellen, wenn Du das Formular per USE öffnest und in Datensatz 167 schaust, wie Matthias schon sagte GO 167.

    USE myform.scx
    GO 167
    Browse

    Die Height Property dürfte in dem Properties Window beschrieben sein und da sich Dein Formular und alle Backups der letzten 6 Monate nicht geändert haben, musst Du darin etwas anderes als lediglich eine Zahl finden, einen Ausdruck für die Height des Grid, der nicht mehr gültig ist, weil sich etwas außenstehendes geändert hatte. Könnte z.B. ein Ausdruck wie _SCREEN.Height-800 sein, wenn das <0 ist, weil die IDE nicht auf voller Größe ist, würde das z.B. knallen.

    Selbst wenn es um das Formular mit dem Resizer geht, dürften die Backupvarianten des Formulares noch laufen, aber wenn Du erst einmal ein Formular geladen hast, wird ein SCX gleichen Namens auch erst wieder wirklich neu eingelesen, nachdem Du alles ins RAM geladene komplett entlädst, ein CLEAR ALL vor Öffnen des wiederhergestellten Backups könnte auch schon helfen, bzw. VFP restart.

    Ich würde aber auf jeden Fall in Datensatz 167 reinschauen. Ein Seiteneffekt ist auch nicht auszuschließen, also schau auch auf andere Properties.

    Im Übrigen gilt die Frage, die meist zur Antwort führt: Was wurde zuletzt geändert? Da Du das Formular nur einmal alle 3 Monate nutzt kann das ziemlich viel sein, insbesondere vieles, was Du längst nicht mehr auf dem Zettel hast.

    Tschüß, Olaf.


    Olaf Doschke - TMN Systemberatung GmbH

    Montag, 4. Juli 2016 06:07
  • Hallo ich danke Euch. Der Fehler ist gefunden.

    Nach langem Suchen und Überlegen, was ich geändert hatte, ist es jetzt klar. Wobei ich nicht beurteilen kann, ob so etwas überhaupt passieren darf. Aber egal ....

    Ich hatte vor einiger Zeit die Bildschirmdarstellung von 100% auf 125% umgestellt. Durch meine neuen Monitore war mir sonst alles zu klein. Und Platz genug auf dem Schirm war ja vorhanden.

    Bei dem entsprechenden Grid hatte ich ursprünglich eine Höhe von 20 eingestellt. Das war wohl damals das Minimum und wurde jetzt vermutlich unterschritten. Ich habe es auf 40 gesetzt und siehe da, alles läuft wieder.

    Das mit der Idee die Form mit USE zu öffnen und den Satz 167 zu uhtersuchen, war die Lösung!

    Warum Gridhöhe 20? Na ja, nur bei Bedarf wurde es ausgeklappt.

    Das mit der Form als Tabelle hatte ich schlicht vergessen. Beim Suchen im Internet bin ich auf eine ähnliche Frage (von mir) gestoßen. Vor 12 Jahren! Da bin ich das erste Mal auf so etwas "reingefallen".

    Danke und Gruß. Jetzt gehe ich erste einmal zwei Wochen in Urlaub!

    Jürgen


    <--------(nur Fliegen sind schöner!)-------->

    Montag, 4. Juli 2016 09:50
  • Hallo Jürgen,

    Danke auch für die Rückmeldung. Ich hätte darauf gewettet, dass die Höhe wäre irgendeine Formel, die zu etwas negativem wurde. Interessant zu sehen, dass es eine Minimalgröße gibt, die außerdem von der Schriftgröße/DPI Einstellung abhängt. Dabei fällt mir noch ein, dass es wegen dieser Einstellung auch bezüglich Pageframes einen Bug gibt, frag mich nur nicht genau was. Diese Schriftgrößeneinstellung hat sowieso problematische Auswirkungen, ich weiß nicht ob das sich je bessern wird. Einfacher ist halt die Resizergeschichte.

    Tschüß, Olaf.


    Olaf Doschke - TMN Systemberatung GmbH

    Montag, 4. Juli 2016 16:56
  • Und zwei Ideen zum Thema Grid erst dann "ausrollen" wenn es benötigt wird.

    1. Arbeite mit .Visible

    2. erstelle das Grid erst per Form/Pageframe.Addobject("grdGrid","mygrid")

    Du kannst das Grid dazu als Klasse speichern, indem Du es anwählst, dann File->Save as Class und im Folgedialog bei Save selected controls bleibst.

    Tschüß, Olaf.


    Olaf Doschke - TMN Systemberatung GmbH

    Montag, 4. Juli 2016 20:35