Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TSearchRec: Merkwürdiger Syntaxfehler bei FindClose (https://www.delphipraxis.net/116885-tsearchrec-merkwuerdiger-syntaxfehler-bei-findclose.html)

Drop Table 8. Jul 2008 10:33


TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Moin,

wollte gerade eine kleine Routine schreiben, und erhalte beim Compilieren überraschender Weise beim FindClose einen [Pascal Fehler] dmTTQVUnit.pas(427): E2010 Inkompatible Typen: 'Cardinal' und 'TSearchRec' :gruebel:

Delphi-Quellcode:
function TdmTTQV.GetAndRunUserSQL : Boolean;
var
  srSQL : TSearchRec;
  FL : TStringList;
//  s : string;
begin
  FL := TStringList.Create;
  FL.Sorted := true;
  try
    if FindFirst(GetWorkDir+'\*.sql', 0, srSQL) = 0 then
      begin
        if LowerCase(srSQL.Name) <> 'generated.sql' then
           FL.Add(srSQL.Name);
        while FindNext(srSQL) = 0 do
          if LowerCase(srSQL.Name) <> 'generated.sql' then
             FL.Add(srSQL.Name);
      end;
  finally
    FindClose(srSQL);
    FL.Free;
  end;
end;
Ich verwende die Turbo Edition 2006/Version 10.0.2558.35231
Könnt ihr euch auf den Fehler einen Reim machen?

Andreas

littleDave 8. Jul 2008 10:35

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Hilft vielleicht das hier
Delphi-Quellcode:
SysUtils.FindClose(srSQL);
?

Christian Seehase 8. Jul 2008 10:44

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Moin Andreas,

noch eine kleine Erklärung zum Posting von littelDave:
Es gibt einmal das FindClose, das zu FindFirst gehört, und den Parametertyp TSearchRec hat, und einmal das, was zu FindFindFile gehört, und ein Handle (Cardinal) als Parameter erwartet.
Die ersten beiden stammen aus der Unit SysUtils, und kapseln die letzteren, bei denen es sich um Funktionen der Windows-API handelt, die sich in der Unit Windows befinden.

Lösen lässt sich das Problem auf zwei Wegen:
  1. So wie littleDave es beschrieben hat, indem man die Unit mit angibt aus der die Funktion genutzt werden soll.
  2. Indem man in uses die Reihenfolge der Units Windows und SysUtils vertauscht, damit der Compiler die andere Funktion zuerst findet.

Drop Table 8. Jul 2008 10:47

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Zitat:

Zitat von littleDave
Hilft vielleicht das hier
Delphi-Quellcode:
SysUtils.FindClose(srSQL);

Es hilft, Vielen Dank! SysUtils ist zwar im Interface Abschnitt deklariert. Aber merkwürdig es es schon oder?

Luckie 8. Jul 2008 10:50

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Zitat:

Zitat von Christian Seehase
was zu FindFindFile gehört

Die Windows API-Funktion heißt FindFirstFile.

Endlich kann ich den Christian auch mal verbessern. :mrgreen: :duck:


Zitat:

Zitat von Drop Table
Es hilft, Vielen Dank! SysUtils ist zwar im Interface Abschnitt deklariert. Aber merkwürdig es es schon oder?

Nein, ist es nicht, da die Unit Windows wohl auch eingebunden wird, in der das FindClose für die API-Funktion deklariert ist. Jetzt weiß ich allerdings nicht, ob er das erste oder letzte Vorkommen nimmt, welches er in den eingebundenen Units nimmt.

Christian Seehase 8. Jul 2008 11:04

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Zitat:

Zitat von Luckie
Die Windows API-Funktion heißt FindFirstFile.

Endlich kann ich den Christian auch mal verbessern. :mrgreen: :duck:

:oops: :wall: :mrgreen:

Drop Table 8. Jul 2008 11:10

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Zitat:

Zitat von Christian Seehase
noch eine kleine Erklärung zum Posting von littelDave ...

Ihr seid Klasse! Darauf wäre ich wohl nicht gekommen. Da ich das Projekt ursprünglich aus D5 portiert habe, sind es wohl alte Tretminen. Muss bei Gelegenheit mal prüfen, ob unter D10 auch in der Reihenfolge SysUtils, Windows ... bei Verwendung eines Datenmoduls gesetzt wird.

Christian Seehase 8. Jul 2008 11:19

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Moin Andreas,

genau das von Dir geschilderte Problem hatte ich früher auch mal, allerdings war es da noch nichts mit Internet bzw. Foren, und ich habe eine ganze Weile gebraucht, bis ich die Ursache gefunden hatte ;-)

Drop Table 8. Jul 2008 11:31

Re: TSearchRec: Merkwürdiger Syntaxfehler bei FindClose
 
Zitat:

Zitat von Christian Seehase
genau das von Dir geschilderte Problem hatte ich früher auch mal, allerdings war es da noch nichts mit Internet bzw. Foren, und ich habe eine ganze Weile gebraucht, bis ich die Ursache gefunden hatte ;-)

Allerdings, das ist heute noch so im (IBM)Mainframe Bereich, da vermisse ich auch zuweilen ein so nettes Forum, wie dieses hier, wo man in Sekunden, wie bei diesem Beispiel, kompetente Anworten erhält.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 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