Announcement

Collapse
No announcement yet.

Fehler bei Typumwandlungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler bei Typumwandlungen

    <I><B> Ich habe mich bei dem folgenden Beispiel dafür entschieden eine Klasse mit verschiedenen ARRAY - Feldern zu verwenden, da dies für die weitere Verwendung von Vorteil ist. Jetzt zu meinem Problem...</B></I>

    ----
    <PRE>
    const
    LaengeKHNummer = 4;
    LaengeSatzart = 2;
    ...
    type
    TKHNummer = array[1..LaengeKHNummer] of char;
    TSatzart = array[1..LaengeSatzart] of char;
    ...
    TStatistik = class
    private
    FKHNummer: TKHNummer;
    FSatzart: TSatzart;
    ...
    procedure SetKHNummer(const Value: TKHNummer);
    procedure SetSatzart(const Value: TSatzart);
    ...
    public
    ...
    property KHNummer: TKHNummer read FKHNummer write SetKHNummer;
    property Satzart: TSatzart read FSatzart write SetSatzart;
    ...
    end;

    TfrmKHStatistik = class(TBForm)
    ...
    procedure actStatistikExecute(Sender: TObject);
    ...
    private
    Statistik: TStatistik;
    end;

    ...
    procedure TfrmKHStatistik.actStatistikExecute(Sender: TObject);
    var
    KHNummer: string;
    begin
    try
    Statistik:= TStatistik.Create;
    ...
    KHNummer := dbqStat.FieldByName('IKNUMMER').AsString;
    ...
    Statistik.Clear;

    <BR><I><B> Bis hierhin ist noch alles in Ordnung und bei den folgenden Zeilen kommt es zu der Fehlermeldung "UNGÜLTIGE TYPUMWANDLUNG" </B></I><BR>

    StrCopy(PChar(Statistik.KHNummer),PChar(KHNummer)) ;
    StrCopy(<B>PCHAR(STATISTIK.SATZART)</B>,PChar('90'));

    <BR><I><B> Merkwürdigerweise nur bei den ARRAY - Feldern, die eine Länge != 4 haben </B></I><BR>

    ...
    finally
    Statistik.Free;
    end;
    end;
    ...
    procedure TStatistik.SetKHNummer(const Value: TKHNummer);
    begin
    FKHNummer := Value;
    end;

    procedure TStatistik.SetSatzart(const Value: TSatzart);
    begin
    FSatzart := Value;
    end;

    end.
    </PRE>

    <I><B> Es wäre echt klasse, wenn mir einer bei dem Problem weiterhelfen könnte</I></B>

  • #2
    Lass doch mal das PChar() weg

    Comment


    • #3
      Aeh Quatsch. Das Problem koennte das const an SetSatzart sein. Der Compiler optimiertwahrscheinlich und uebergibt den Parameter by Value, da das weniger (nur 2) Byte auf dem Stack sind

      Comment


      • #4
        Hallo Stefan,<br>
        probier mal<p>
        StrCopy(Statistik.KHNummer,PChar(KHNummer)); <br>
        StrCopy(STATISTIK.SATZART,PChar('90')); <p>
        Achte auch auf die Längen die kopiert werden sollen. PCHAR beginnt in der Regel bei 0. Normalerweise würde ich die Arrays von 0..n definieren. Ausserdem musst Du bei PCHAR noch berücksichtigen, dass das Array ein Zeichen grösser sein muss als Du hineintun möchtest.<br>PCHAR ist der Ersatz für C/C++ Strings. Diese Enden mit #0. In Pascal ist das 0 Element des Strings die Längenangabe.<p>Weitere Informationen findest Du in der Delphi-Hilfe unter PCHAR<p>
        Gruss<br>
        Fran

        Comment


        • #5
          Hi Stefan,<br>
          habe ich eben vergessen:<br>
          anstelle von <p>StrCopy(STATISTIK.SATZART,PChar('90')) <p>kannst Du genauso<p>
          STATISTIK.SATZART := '90'; schreiben.<p>
          Guss<br>
          Fran

          Comment

          Working...
          X