Delphi beliebte Fehler: Runtime Error 216

19.06.2012 - Lesezeit: ~1 Minute

Der Fehler Runtime Error 216 tritt auf, wenn das Programm beendet wird und es Fehler beim Abbau der Forms gibt.

Kontrollieren ob in der FormDestroy Methode das Formular auf nil gesetzt wurde.

type Tam_Form = class(TForm)  
    procedure FormDestroy(Sender: TObject);  
  end;  

function am_Form: Tam_Form;  
procedure am_Form_FreeAndNil;  

implementation  

{$R *.dfm}  

var  
  Form: Tam_Form;  

function am_Form: Tam_Form;  
begin  
  if Form = nil then  
    Form := Tam_Form.Create(Application);  
  Result := Form;  
end;  

procedure am_Form_FreeAndNil;  
begin  
  if Form <> nil then  
    FreeAndNil(Form);  
end;  

{ Tam_Form }  

procedure Tam_Form.FormDestroy(Sender: TObject);  
begin  
  inherited;  
  Form := nil;  
end;  

initialization  
  Form := nil;  
finalization  
  am_Form_FreeAndNil;  
end.  
Tags: Delphi-Programmierung

Delphi 7 - FileExists - und alte Dateien

02.06.2012 - Lesezeit: ~1 Minute

Fileexists liefert für Dateien, die älter sind als Delphi 7 erlaubt (also vor dem 01.01.1970) den Wert FALSE.

function FileExists(const FileName: string): Boolean;  
{$IFDEF MSWINDOWS}  
begin  
  Result := FileAge(FileName) <> -1;  
end;  
{$ENDIF}  

function FileAge(const FileName: string): Integer;  
{$IFDEF MSWINDOWS}  
var  
  Handle: THandle;  
  FindData: TWin32FindData;  
  LocalFileTime: TFileTime;  
begin  
  Handle := FindFirstFile(PChar(FileName), FindData);  
  if Handle <> INVALID_HANDLE_VALUE then  
  begin  
    Windows.FindClose(Handle);  
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then  
    begin  
      FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);  
      if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,  
        LongRec(Result).Lo) then Exit;  
    end;  
  end;  
  Result := -1;  
end;  
{$ENDIF}  

Die Datei ist ein Foto und wurde von einer Kamera mit dem Datum 0 aufgenommen:

In den EXIF-Daten steht das Datum 01.01.1970

Das Dateidatum ist:

$ ls -l  
-rw-r--r-- 1 wnf wnf 2815785 Nov 25  1961 PICT0003.JPG  
Tags: Delphi-Programmierung

Win7 & Delphi7

11.05.2012 - Lesezeit: 3 Minuten

nachdem nun immer mehr Programme die Zusammenarbeit mit W2K verweigern, ist es an der Zeit mit der Entwicklungsumgebung auf eine Win7 Maschine umzuziehen.

1) Delphi 7 installieren (Ohne Interbase Client und ohne Rave)
1) Delphi 7 das erste Mal als Administrator starten und wieder beenden
1) Für den Ordner und alle Unterordner den Schreibschutz aufheben: c:\Program Files\Borland\Delphi7\Bin\
1) Delphi registrieren per Internet (Obwohl es schon sehr alt ist funktioniert die Registrierung noch)
1) Das Servicepack installieren d7_de_pro_upd1_1.exe
1) Das Rave Update installieren rave_be_5_0_8.exe
1) DelForEx installieren
1) Delphi starten
1) GExpert -Configuration

  • Perfect Layout einschalten

  • IDE konfigurieren
    1) Tools - Umgebungsoptionen

  • Umgebungsvariablen für Verzeichnisse kauf,dsp,lwnf anlegen

  • Bibliothek - diverse Bibliothekspfade anlegen
    1) Tools - Debuggeroptionen

  • Sprachexceptions EFIBInterbaseError hinzufügen

  • Bei Delphi-Exceptions stoppen auschalten
    1) Packages installieren
    1) kauf_lib\kauf_lib.bgb
    1) kauf_lib\DevExpress5\DevExpress5.bpg
    1) kauf_lib\xls_mini.dpk
    1) dsp_lib\dsp.bgp
    Dabei beachten: Für jede BPL-Datei muss das Ausgabe verzeichnis der Units auf ..\ bzw. ....\ gesetzt werden, so dass die *.dcu Dateien im Verzeichnis kauf_lib abgelegt werden.
    1) Anpassungen an dcc.cfg in den Projektverzeichnissen vornehmen.

-aWinTypes=Windows;WinProcs=Windows;DbiProcs=BDE;DbiTypes=BDE;DbiErrs=BDE  
-u"C:\Programme\Borland\Delphi7\lib";"C:\Programme\Borland\Delphi7\lib\Obj"  
-u"c:\Programme\Borland\Delphi7\Rave5\Lib\"  
-u"C:\wnf\dl7\dsp_lib"  
-u"C:\wnf\dl7\dsp_lib\SynEdit"  
-u"C:\wnf\dl7\dsp_lib\ML_LIB"  
-u"C:\wnf\dl7\dsp_lib\dspFIB"  
-u"C:\wnf\dl7\dsp_lib\Lizenz"  
-u"C:\wnf\dl7\dsp_lib\rppro"  
-u"C:\wnf\dl7\kauf_lib"  
-u"C:\wnf\dl7\kauf_lib\DevExpress5"  
-u"C:\wnf\dl7\wnf_tools"  
-u"C:\wnf\dl7\wnf_vcl"  
-i"C:\wnf\dl7\wnf_tools"  
-lu"vcl;rtl;vclx;dbrtl;vcldb;vcldbx;"  
-w-UNSAFE_TYPE  
-w-UNSAFE_CODE  
-w-UNSAFE_CAST  
-w-SYMBOL_PLATFORM  
-w-UNIT_PLATFORM  
Tags: Delphi-Programmierung win7

Delphi Firemonkey

07.10.2011 - Lesezeit: 4 Minuten

Hier einige Antworten aus dem Embarcadero Webinar zu Firemonkey im September 2011

(Das ist nur ein Auszug, der für mich wichtigen Fragen und Antworten)


XXX- Q: Are there plans or efforts in the works to provide FireMonkey support on Linux and Android? A: Both of these platforms are on the roadmap.
XXX- Q: What data based controls are available in FM?
A: Most FireMonkey visual controls can be bound to data, objects and expressions using our new LiveBindings technology.

XXX- Q: What can the ClientDataSet bind to? A: FireMonkey includes built-in component based access to MS SQL Server, Oracle, IBM DB2, MySQL, Sybase, Informix, InterBase and Firebird databases. And of course, FireMonkey's data access is native which offers high performance. Detailed feature matrices are available at: www.embarcadero.com/products/rad-studio
XXX- Q: Can I compile a 64 bit application on a 32 bit Delphi XE2 (installed on a 32 bit machine)?
A: Yes, you can build 64-bit applications using a 32-bit machine. However, you won’t be able to test them unless you use the Platform Assistant running on a 64-bit Windows machine or deploy the application to a Win64 machine.

XXX- Q: Is there a solution for reports/printing in FireMonkey? A: There is currently no reporting solution available in FireMonkey.
XXX- Q: Does FireMonkey have TWebBrowser
A: An equivalent FireMonkey control is not available in this release.

XXX- Q: I read in a blog that TActionList is not available in FM. Is that true? Any plans to add it? A: That is correct, but it is being considered for the roadmap.
XXX- Q: If all the code is standard VCL code is should port with little to no issues, correct?
A: Much of your application logic should be portable. However, user interfaces will need to be recreated with FireMonkey Forms and Controls. For migrating VCL forms to FireMonkey – check out Jeff Lefebvre’s blog post about MonkeyGroomer

XXX-|Q:| Will support for Windows 8 Metro Style apps be available in the next major version of Delphi, depending when Windows 8 is actually released?
|A:| No announcement has been made for Windows 8 Metro Style apps in a particular version of Delphi.

Tags: Delphi-Programmierung

Zugriffsverletzung in der SQLOLEDB.dll beim zweiten Aufruf einer Stored Procedure aus Delphi heraus

12.06.2011 - Lesezeit: ~1 Minute

Das funktioniert nur unter Win7 und ADO-Version 6.1

unter XP-SP3 und ADO-Version 2.8
kommt es zu einer einer Zugriffsverlertzung in SQLOLEDB.dll
beim zweiten Aufruf der Stored Procedure b9_Auslastung

  aProc.Close;  
  aProc.ProcedureName := 'b9_Auslastung';  
  aProc.Parameters.Refresh;  
  aProc.Parameters.ParamByName('@Bearbeiter_ID').Value := aBearb_ID;  
  aProc.Parameters.ParamByName('@Stichtag').Value := aStichtag;  
  aProc.Prepared := TRUE;  
  aProc.Open;  

Das funktioniert unter Win7 und ADO-Version 6.1

         und unter XP-SP3 und ADO-Version 2.8  
  aProc.Close;  
  aproc.Parameters.Clear;  
  aProc.ProcedureName := 'b9_Auslastung';  
  aProc.Parameters.CreateParameter('@Bearbeiter_ID', ftInteger, pdInPut, 0, aBearb_ID);  
  aProc.Parameters.CreateParameter('@Stichtag', ftDate, pdInPut, 0, aStichtag);  
  aProc.Prepared := TRUE;  
  aProc.Open;  
Tags: Delphi-Programmierung ADO

Delphi 2009 und Unitaliase

22.04.2010 - Lesezeit: ~1 Minute

Wenn Delphi 2009 bei der Arbeit mit einem neuen Projekt beim Debuggen und Editieren rumzickt, dann liegt es daran, dass die Unit-Aliase für das Projekt nicht gesetzt sind:

WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE  

[ screenshot_unitalias.png ]

Tags: Delphi-Programmierung