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

Alles, was zur Sek2 passt.

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Antworten
Mattes
Beiträge: 1
Registriert: Dienstag 8. Juli 2025, 09:26
Schulform: Gesamtschule

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

Beitrag 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
Dateianhänge
Schülerstammblatt_Abiturienten_ A3_V05a.rtm
(638 KiB) 5-mal heruntergeladen
Frodermann
Fachberater*in
Beiträge: 740
Registriert: Montag 29. Oktober 2018, 20:45
Schulform: Gesamtschule
Motto: Keine Panik

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

Beitrag 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.
mit freundlichen Grüßen
Felix Frodermann
Fachberatung, Moderation & SVWS-Dokumentation
W.Maßmann
Fachberater*in
Beiträge: 1006
Registriert: Montag 3. Dezember 2018, 18:37
Schulform: Gymnasium (a.D.)

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

Beitrag 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!
Viele Grüße aus O.-E.
Wolfgang Maßmann
Benutzeravatar
wschrewe
Fachberater*in
Beiträge: 1882
Registriert: Dienstag 25. September 2018, 17:36
Schulform: BK (Pensionär)
Kontaktdaten:

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

Beitrag 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;
Mit freundlichen Grüßen
Walter Schrewe
"If all else fails, read the instructions" (Donald E. Knuth, letzter TeX - Hilfehinweis)
W.Maßmann
Fachberater*in
Beiträge: 1006
Registriert: Montag 3. Dezember 2018, 18:37
Schulform: Gymnasium (a.D.)

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

Beitrag 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.
Viele Grüße aus O.-E.
Wolfgang Maßmann
Benutzeravatar
wschrewe
Fachberater*in
Beiträge: 1882
Registriert: Dienstag 25. September 2018, 17:36
Schulform: BK (Pensionär)
Kontaktdaten:

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

Beitrag 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.
Mit freundlichen Grüßen
Walter Schrewe
"If all else fails, read the instructions" (Donald E. Knuth, letzter TeX - Hilfehinweis)
W.Maßmann
Fachberater*in
Beiträge: 1006
Registriert: Montag 3. Dezember 2018, 18:37
Schulform: Gymnasium (a.D.)

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

Beitrag 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.
Viele Grüße aus O.-E.
Wolfgang Maßmann
Benutzeravatar
wschrewe
Fachberater*in
Beiträge: 1882
Registriert: Dienstag 25. September 2018, 17:36
Schulform: BK (Pensionär)
Kontaktdaten:

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

Beitrag 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.
Mit freundlichen Grüßen
Walter Schrewe
"If all else fails, read the instructions" (Donald E. Knuth, letzter TeX - Hilfehinweis)
W.Maßmann
Fachberater*in
Beiträge: 1006
Registriert: Montag 3. Dezember 2018, 18:37
Schulform: Gymnasium (a.D.)

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

Beitrag von W.Maßmann »

Hallo Herr Schrewe,
besten Dank. Dann habe ich wieder etwas dazu gelernt.
Viele Grüße aus O.-E.
Wolfgang Maßmann
Antworten