Einzelnen Beitrag anzeigen

Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

seit Version 11 lädt FireDAC bevorzugt SQL ODBC 18 Treiber => Fehlermeldung!

  Alt 15. Mär 2023, 13:02
Datenbank: MSSQL • Version: 2019 • Zugriff über: ODBC 18 Treiber
Hallo zusammen,

Embarcadero hat in FireDAC seit Version 11.x das ansprechen des bevorzugten MSSQL-Treiber geändert. (Auszug aus diesem Post
Delphi-Quellcode:
//Delphi 11.2
const
  C_2018_ODBC = 'ODBC DRIVER 18 FOR SQL SERVER';
  C_2017_ODBC = 'ODBC DRIVER 17 FOR SQL SERVER';
  C_2016_ODBC = 'ODBC DRIVER 13 FOR SQL SERVER';
  C_2012_ODBC = 'ODBC DRIVER 11 FOR SQL SERVER';
...
  C_2012_NC = 'SQL SERVER NATIVE CLIENT 11.0';
  C_2008 = 'SQL SERVER NATIVE CLIENT 10.0';
  C_2005 = 'SQL NATIVE CLIENT';
  C_2000 = 'SQL SERVER';

...

procedure TFDPhysMSSQLDriver.InternalLoad;
begin
  inherited InternalLoad;
  if ODBCDriver = 'then
    ODBCDriver := FindBestDriver(
      {$IFDEF MSWINDOWS} [C_2018_ODBC, C_2017_ODBC, C_2012_NC, C_2016_ODBC, C_2012_ODBC, C_2008, C_2005, C_2000] {$ENDIF}
      {$IFDEF POSIX} [C_2018_ODBC, C_2017_ODBC, C_2016_ODBC, C_2012_ODBC, C_FreeTDS], C_FreeTDSLib {$ENDIF}
    );
end;
Vor Version 11.x hatte Delphi den Native Treiber bevorzugt geladen.
Delphi-Quellcode:
//Delphi 10.3.3
...
C_2012_NC = 'SQL SERVER NATIVE CLIENT 11.0';
...
procedure TFDPhysMSSQLDriver.InternalLoad;
begin
  inherited InternalLoad;
  if ODBCDriver = 'then
    ODBCDriver := FindBestDriver(
      {$IFDEF MSWINDOWS} [C_2012_NC, C_2016_ODBC, C_2012_ODBC, C_2017_ODBC, C_2008, C_2005, C_2000] {$ENDIF}
      {$IFDEF POSIX} [C_2016_ODBC, C_2012_ODBC, C_2017_ODBC, C_FreeTDS], C_FreeTDSLib {$ENDIF}
    );
end;

Das Problem:
Der ODBC 18 Treiber bringt dann folgende Fehlermeldung:
Zitat:
Im Projekt xxx.exe ist eine Exception der Klasse EMSSQLNativeException mit der Meldung '[FireDAC][Phys][ODBC][Microsoft][ODBC Driver 18 for SQL Server]SSL-Anbieter: Die Zertifikatkette wurde von einer nicht vertrauenswürdigen Zertifizierungsstelle ausgestellt.
' aufgetreten.
Indem ich einen Verbindungsparameter geändert hatte, war diese Fehlermeldung weg:
Delphi-Quellcode:
 WITH DM.FDConnection1.Params AS TFDPhysMSSQLConnectionDefParams { uses FireDAC.Phys.MSSQLDef } DO
      BEGIN
        ...
        Add( 'ENCRYPT=NO' );
Nun hatte ich in der engl. DP gelesen, dass dort
ODBCAdvanced=TrustServerCertificate=true angewendet wurde.



Da MSSQL-Verbindungen ein wichtiges Thema (für mich) ist die Frage:
Was sollte man nun anwenden?
1. 'ENCRYPT=NO' oder
2. ODBCAdvanced=TrustServerCertificate=true
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat