Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler: Ordinaltyp erforderlich (https://www.delphipraxis.net/148514-fehler-ordinaltyp-erforderlich.html)

MacGuyver 3. Mär 2010 09:28


Fehler: Ordinaltyp erforderlich
 
Moin Leute :hi:

Ich habe ein Problem mit einem Speicherleck.

Delphi-Quellcode:
Seek( [ TSeek.Create( FldPK, TheTable.FldIlbSolKurz.AsString ) ] );
Ganz klar, dass das Objekt nicht wieder freigegeben wird. So habe ich das mal so umgebaut:

Delphi-Quellcode:
var
   lSeek : TSeek;

         lSeek := TSeek.Create( FldPK, TheTable.FldIlbSolKurz.AsString );
         try
            Seek( [ TSeek(lSeek) ] );
         finally
            lSeek.Free;
         end;
Sieht auf den ersten Blick korrekt aus. Nur, die aufzurufende Funktion ist so deklariert:

Delphi-Quellcode:
function Seek( SeekFields : Array of TSeek ) : boolean;
Jetzt erzählt er mir andauernd "Ordinaltyp erforderlich". Ich habe schon einiges probiert. Als TObject, als Pointer.... Keine Ahnung, wie ich die Stelle jetzt umsetzen soll. Kann mir jemand von euch weiterhelfen?


Stefan

uligerhardt 3. Mär 2010 09:35

Re: Fehler: Ordinaltyp erforderlich
 
Zitat:

Zitat von MacGuyver
Delphi-Quellcode:
var
   lSeek : TSeek;

         lSeek := TSeek.Create( FldPK, TheTable.FldIlbSolKurz.AsString );
         try
            Seek( [ TSeek(lSeek) ] );
         finally
            lSeek.Free;
         end;

Den Cast kannst du dir sparen.

Zitat:

Zitat von MacGuyver
Sieht auf den ersten Blick korrekt aus. Nur, die aufzurufende Funktion ist so deklariert:

Delphi-Quellcode:
function Seek( SeekFields : Array of TSeek ) : boolean;
Jetzt erzählt er mir andauernd "Ordinaltyp erforderlich". Ich habe schon einiges probiert. Als TObject, als Pointer.... Keine Ahnung, wie ich die Stelle jetzt umsetzen soll. Kann mir jemand von euch weiterhelfen?

In welcher Zeile mäkelt er den? Folgendes lässt sich bei mir kompilieren:
Delphi-Quellcode:
type
  TSeek = class

  end;

function Seek(SeekFields: array of TSeek): boolean;
begin

end;

procedure Test;
var
  lSeek: TSeek;
begin
  lSeek := TSeek.Create;
  try
    Seek([lSeek]);
  finally
    lSeek.Free;
  end;
end;

MacGuyver 3. Mär 2010 09:51

Re: Fehler: Ordinaltyp erforderlich
 
Danke für deine schnelle Antwort.

Die Lösung der Hammer:

Delphi-Quellcode:
   if fIlbSol <> NIL then begin
      with fIlbSol do
         lSeek := TSeek.Create( FldPK, TheTable.FldIlbSolKurz.AsString );
         try
            fIlbSol.Seek( [ lSeek ] );
         finally
            lSeek.Free;
         end;
Durch das "with" bekommt er irgendwie ein anderes Seek zu packen. Als ich "fIlbSol." vor das Seek gesetzt hatte, konnte er so compilieren.



Danke, danke, danke

DeddyH 3. Mär 2010 09:53

Re: Fehler: Ordinaltyp erforderlich
 
Deswegen wird ja hier immer wieder dazu geraten, auf with zu verzichten. Das hat keinerlei Mehrwert (außer für Schreibfaule) und verursacht u.U. nur unnötige Fehler, wie Du ja selbst gerade gemerkt hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz