Ungültige Variant-Typumwandlung

Alles, was den Programmierer beschäftigt

Moderator: SYNERPY

Antworten
UliS
Beiträge: 395
Registriert: Fr Mai 26, 2006 3:44 pm
Wohnort: Velbert-Langenberg

Ungültige Variant-Typumwandlung

Beitrag von UliS » Do Aug 23, 2012 8:16 am

Mein meistgehaßter Fehler in FR2-Formularen. :twisted:
Leider kann man keine lokalen Variablen mit festem Typ in der Memo-Feld Logik vereinbaren.
Und wenn der AvERP-Pascal Interpreter ein Feld erst als Integer betrachtet
und nach Berechnung ein Float braucht, dann knallt es irgendwann hinterrücks mitten im Ausdruck.
Andrer Fall - Feld ist Null - dann kann die automatische Typumwandlung nur schiefgehen.

Generelles Vorgehen:
Möglichst in kleinen Steps Änderungen in der Pascal-Logik vornehmen und auf Daten testen, die möglichst vollständig alle Konstellationen abdecken, dann ist die letzte Änderung die Verdächtige.
oder:
Gleich nach FastReport4 umformen und lokale Variablen mit dem richtigen Typ vereinbaren - ist meist effektiver als stundenlanges Fehlersuchen und vermeidet das Problem in der Zukunft.
Außerdem wird AvERP 5... wahrscheinlich keine FR2-Reports mehr unterstützen. :?:

WorkAround in FR2:

Bei Berechnungen mit Werten die Leer sind, erst Integer und dann zu Float berechnet werden: Float über *1.0 erzwingen.

Null-Wert in Datumsfeld:
Druck in Abhängigkeit von globaler Variable.
Dem Pascal-Interpreter die Leerstring-Behandlung überlassen
und nur wenn nicht gewünscht, das Feld über Memo.Clear(); löschen:

Daten:
[q_repXX."MYDATE"]
------------------------------
Script:
begin
if (DRUCKEN) then
memo.clear();
end
----------------------------
statt
begin
memo.clear();
if (DRUCKEN) then
begin
a := [q_repXX."MYDATE"]; // erzeugt "Ungültige Variant-Typumwandlung"
memo.add(a);
end;
end

Dank an SYNERPY für die Unterstützung
und dies als Spur im Netz für Mitleidende
:roll:

Antworten