Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

FireDAC - błąd połączenia

253 views
Skip to first unread message

jh

unread,
Jun 8, 2018, 7:45:57 PM6/8/18
to
Miałem nieco przerwy w skrobaniu w Delphi. Spłodziłem aplikację, która jest oparta o Delphi Tokyo i FireDAC + MS SQL 2016. Nie mam problemu z nią przy łączeniu się w moim środowisku, u klienta oczywiście nie działa. U mnie wszystko jest na Windows 10 Pro, MS SQL 2017 Developer, łączę się natywnym klientem 11.0.

Problemowa maszyna to Windows 7, serwer na MS Windows Server bodajże 2016, MS SQL 2016, wgrany natywny klient (aplikacja ma wybór sterownika, wybierany jest natywny). Połączenie przy korzystaniu z windowsowych Źródeł danych działa bezproblemowo, moja aplikacja nie łączy się. Wyklikałem więc taką miniaturę do banalnego przetestowania połączenia. Obrazek ze zrzutami, kodem i komunikatem błędu jest tu:
https://1drv.ms/u/s!ApoUnQze59lO3QZfMfInclbci7Xl
Oczywiście ta banalna aplikacja u mnie działa, u klienta występuje błąd: [FireDAC][Phys][ODBC][Microsoft][Menedżer sterowników ODBC] Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego. No i mam kłopot - sterownik jest podany, w tej właściwej aplikacji klient może zmienić też na dowolny inny. Podpowiedzcie, gdzie szukać przyczyny błędu?

jh

J-23

unread,
Jun 10, 2018, 6:57:32 AM6/10/18
to
W dniu 09.06.2018 o 01:45, jh pisze:
1. Ty instalowałeś ten serwer, jesli tak to uruchom do niego zdalny dostęp
2. Robi się to tak (Pisze na przykładzie SQL Server Management Studio 2017)

- Zaloguj się jako admin
- kliknij prawym na nazwę serwera potem kliknij PROPERTIES ->
CONNECTIONS -> ALLOW REMOTE CONNECTIONS TO THIS SERVER

To ostatnie jest do zaznaczenia "ptaszkiem"

Pozdrawiam
J-23

jh

unread,
Jun 10, 2018, 6:51:34 PM6/10/18
to
> W dniu 09.06.2018 o 01:45, jh pisze:
Połączenie przy korzystaniu z windowsowych Źródeł danych działa bezproblemowo

> 1. Ty instalowałeś ten serwer, jesli tak to uruchom do niego zdalny dostęp

Przecież napisałem, że połączenie przez Windowsowe Źródła danych działa. Zresztą cała firma łączy się z tym serwerem, tyle, że aplikacją korzystającą z ODBC. Ja doinstalowałem natywnego klienta i chcę łączyć się nim.

jh

miab

unread,
Jun 11, 2018, 3:27:29 AM6/11/18
to

wloochacz

unread,
Jun 11, 2018, 11:45:49 AM6/11/18
to
W dniu 2018-06-11 o 09:25, miab pisze:
[ciach]

> bo dla 2017 trochę M$ zamącił.
Nie, dlaczego?
Po prostu OLEDB jest już nagle undeprecated :D

A poza tym, on o 2016 Ty o 2017, sam nie wiem kto zbłądził...

--
wloochacz

wloochacz

unread,
Jun 11, 2018, 11:53:18 AM6/11/18
to
W dniu 2018-06-09 o 01:45, jh pisze:
> Oczywiście ta banalna aplikacja u mnie działa, u klienta występuje błąd: [FireDAC][Phys][ODBC][Microsoft][Menedżer sterowników ODBC] Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego.

Pokaż Connection InfoReport.
http://docwiki.embarcadero.com/Libraries/Tokyo/en/FireDAC.Comp.Client.TFDCustomConnection.GetInfoReport

A żeby zobaczyć te Twoje obrazki, to ja się logował na pewno nie będę w MS.
Sorry.

> No i mam kłopot - sterownik jest podany, w tej właściwej aplikacji klient może zmienić też na dowolny inny. Podpowiedzcie, gdzie szukać przyczyny błędu?
Gdzie szukać?
W Twoim kodzie :)

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.

Reasumując;
1. Ma być zainstalowany SQL Server NativeClient 11 for ODBC
2. Ma być ten sterownik dostępny; nie jestem pewien, czy w środowisku
domenowym nie zahacza to o jakieś "uprawnienia"...

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.

Pokaż Connection InfoReport, będziemy wiedzieć więcej.

--
wloochacz

jh

unread,
Jun 12, 2018, 6:27:48 PM6/12/18
to
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

jh

unread,
Jun 28, 2018, 6:41:38 PM6/28/18
to
W dniu poniedziałek, 11 czerwca 2018 17:53:18 UTC+2 użytkownik wloochacz napisał:
> gdzie szukać przyczyny błędu? Gdzie szukać?

Cóż, dorobiłem checkboxa - jak klient chce podać sterownik, to może, jak nie, to w firedacowym linku do MSSQL jest on wyczyszczony. Działa bez podawania sterownika. Cóż, trochę to dla mnie dziwaczne, ale "klyent zadowolony" ;)

jh
0 new messages