W dniu poniedziałek, 11 czerwca 2018 17:53:18 UTC+2 użytkownik wloochacz napisał:
> Pokaż Connection InfoReport.
Nie mam tam stałego dostępu, muszę umówić się na zdalną sesję, wtedy zrobię.
> A żeby zobaczyć te Twoje obrazki, to ja się logował na pewno nie będę w MS.
> Sorry.
Chyba nie trzeba się logować...
> Tak się zastanawiam - skoro korzystasz z MSSQLa to na cholerę user może
> sobie cokolwiek wybierać ze sterownikami?
> Ma działać ze SQL Server Nativeclient 11.0 i koniec.
> FireDAC dobiera sterownik automagicznie.
> Znajduje to co ma w systemie.
> Np. jeśli nie ma SQL Server Nativeclient to będzie to Generic MSSQL.
> Kolejna sprawa, to musisz pamiętać o tym, że FireDAC w połączeniu z
> MSSQL korzysta z podsystemu ODBC.
> Koniec i kropka.
Pewnie masz rację. Coś mi się po głowie kołacze, że miałem taką sytuację, gdzie zwracane dane powodowały błędy, albo też zapytania nie wchodziły, dopóki nie wymusiłem NativeClienta. Stąd w opcjach programu, o ile user jest adminem, można wybrać sterownik.
> Reasumując;
> 1. Ma być zainstalowany SQL Server NativeClient 11 for ODBC
Jest.
> 2. Ma być ten sterownik dostępny; nie jestem pewien, czy w środowisku
> domenowym nie zahacza to o jakieś "uprawnienia"...
Nie powinno. Instalacja jest z msi, ale samo działanie nie wymaga żadnej konfiguracji. Przynajmniej dotąd do opcji instalatora dorzucałem klienta natywnego w zależności do wersji OS (x64/x86) i zawsze działało. Pierwszy raz trafiłem na taki kłopot.
> A coś mi tam tak śmierdzi, że podajesz niepoprawny ConnectionString dla
> FireDAC.
> Komunikat błędu sugeruje, że łączysz się przez ODBC po nazwie połączenia
> w ODBC (tzw. DSN właśnie) i nie można go w systemie odnaleźć.
> A to jest z gruntu złe rozwiązanie.
Czyszczę parametry połączenia i dodaję ręcznie jedynie to, że sterownik to MSSQL, jaka baza, serwer, user i pass lub łączenie po autentykacji Windows.
procedure TDM.CreateConnection(AConnection: TFDCustomConnection);
var
oList: TStringList;
begin
dlMSSQL.ODBCDriver := AppSettings.ODBCDriver;
oList := TStringList.Create;
try
oList.Add('DriverID=MSSQL');
oList.Add('Server=' + AppSettings.DBServer);
oList.Add('ApplicationName=' + APP_NAME_POLISH);
oList.Add('Database=' + AppSettings.DBName);
oList.Add('Pooled=False');
oList.Add('Language=POLISH');
oList.Add('MARS=YES');
oList.Add('VariantFormat=vfString');
oList.Add('ExtendedMetadata=True');
if AppSettings.DBOSAuth then
oList.Add('OSAuthent=Yes')
else begin
oList.Add('OSAuthent=No');
oList.Add('User_Name=' + AppSettings.DBLogin);
oList.Add('Password=' + AppSettings.DBPass);
end;
AConnection.Params.Assign(oList);
finally
oList.Free;
end;
end;
jh