Seite 1 von 1

Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 10:12
von Mattes
Liebe Forumsmitglieder,
ich möchte den angehängten Report benutzen und erhalte die Fehlermeldung:

Fehler bei der Ausgabe:
Programm:
Seite1.La_JgStOnGetText
konnte nicht ausgeführt werden
Variante des Typs (UnicodeString) konnte nicht in Typ (Double)
konvertiert werden

Der Fehler tritt nur bei Wiederholern bzw. nach einem Schulwechsel auf. Könnte mir vielleicht jemand erklären, wo ich was verändern muss, damit ich den Report auch bei diesen SuS verwenden kann?

Vielen Danke im Voraus.
M. Timpert

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 10:28
von Frodermann
Das Problem wird erzeugt, wenn es eine vorherige Schule gibt, die einen Entlassjahrgang als "String" angibt, in der Regel dürfte das EF, Q1 und Q2 sein.

Der betreffende Code ist hier und versucht, den Jahrgang um eins zu erhöhen. Ich vermute, dass hat mit G8 zu tun, wo der Jahrgang "10" eigentlich ja die EF ist, daher wird ERST um 1 erhöht, und DANN werden 11, 12 und 13 EF, Q1 und Q2 zugeordnet.

Im Subreport1 -> Berechnungen -> Ereignisse, dann im Label La_JgSt.

Code: Alles auswählen

var
  lsJahrgang: integer;
begin
  Text := '';
  lsJahrgang := Schueler['LSJahrgang'] + 1;
  case lsJahrgang of
    11: Text := 'EF';
    12: Text := 'Q1';
    13: Text := 'Q2';
    else Text := IntToStr(lsJahrgang);
  end;  
end;
Und ich vermute, dass die Zeile "lsJahrgang := Schueler['LSJahrgang'] + 1;" das Problem erzeugt (also die Annahme, dass in Schueler['LSJahrgang'] eine Integer-Zahl steht, die Jahrgänge liegen eventuell aber als String ("Normale Zeichenkette") vor, nicht als Zahl ("Integer"), der Code nimmt aber an, dass die Jahrgänge ein Zahl sind, mit der zu rechnen ist.

Machen Sie einmal eine Kopie der Datei und kommentieren Sie die Zeilen lsJahrgang := Schueler['LSJahrgang'] + 1; und else Text := IntToStr(lsJahrgang); einfach aus, indem Sie "//" davor schreiben.

Hier müsste man testen, ob das auch mit G8 noch korrekt (genug;)) funktioniert.

Sonst müsste man eventuell noch einmal konkret schauen und neuen Code schreiben, der auch mit G8 und Strings zurecht kommt.

Ich rate an dieser Stelle aber gerade nur.

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 12:04
von W.Maßmann
Hallo M. Timpert,
vermutlich ist das Datenfeld Entlassjahrg. bei der zuletzt besuchten Schule auf der Karte Schulbesuch leer.

Das Datenfeld Schueler['LSJahrgang'] ist vom Typ String (Größe 2).
Das passt irgendwie nicht zum o.a. Code!

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 14:40
von wschrewe
Versuchen Sie es mal mit

Code: Alles auswählen

var
  lsJahrgang: integer;
begin
  Text := '';
//  lsJahrgang := Schueler['LSJahrgang'] + 1;
  lsJahrgang:=StrToIntDef(Schueler['LSJahrgang'],-1) + 1;
  case lsJahrgang of
    0 : Text:='??';
    11: Text := 'EF';
    12: Text := 'Q1';
    13: Text := 'Q2';
    else Text := IntToStr(lsJahrgang);
  end;

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 15:32
von W.Maßmann
Hallo Herr Schrewe,
irritiert hat mich, dass hier der Entlassjahrgang '04' (der alten Schule) korrekt als Jahrgangsstufe 5 (der jetzigen Schule) ausgegeben wird.
Mit strtoint gab es auch dieses Ergebnis.

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 17:07
von wschrewe
W.Maßmann hat geschrieben: Dienstag 8. Juli 2025, 15:32Mit strtoint gab es auch dieses Ergebnis.
'04' wird von StrToInt als gültige Darstellung eines Integers erkannt. StrToIntDef fängt nur die Fälle ab, wo das nicht der Fall ist, z.B. weil der zu konvertierende String leer oder eine ungültige Zahlendarstellung ist.

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Dienstag 8. Juli 2025, 18:12
von W.Maßmann
'04' wird von StrToInt als gültige Darstellung eines Integers erkannt.
Klar. Aber im oben um 10:28 von Herrn Frodermann zitierten Code wird dieser String sogar direkt als Integer akzeptiert. Für mich entgegen aller Erfahrung merkwürdig.

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Mittwoch 9. Juli 2025, 10:25
von wschrewe
W.Maßmann hat geschrieben: Dienstag 8. Juli 2025, 18:12Für mich entgegen aller Erfahrung merkwürdig.
Eigentlich nicht. Die Funktion der Pipeline, die den Feldwert ermittelt, hat als Ergebnistyp "Variant" und versucht, diesen Wert in einen mit der Zuweisungsvariablen kompatiblen Wert zu wandeln. Bei '04' etc. gelingt das, wenn der Feldwert etwas nichtnumerisches oder leer ist, eben nicht.

Re: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Verfasst: Mittwoch 9. Juli 2025, 11:47
von W.Maßmann
Hallo Herr Schrewe,
besten Dank. Dann habe ich wieder etwas dazu gelernt.