2014-07-25 15 views
11

Próbuję przenieść moją aplikację z ADO do FireDAC. Korzystam z Microsoft SQL Server. Mój serwer bazy danych został zainstalowany z sortowaniem SENSITIVE CASE, a baza danych została utworzona z sortowaniem INSENSITIVE CASE. Zrobiłem tę konfigurację, ponieważ moja firma ma taką konfigurację. Ale kiedy próbowałem migrować do FireDAC, sterownik FireDAC (MSSQL) sprawdza sortowanie bazy danych i zmienia nazwę właściwości "database name" na wielkie litery. Potem wiele rzeczy nie działało, ponieważ FireDAC nie znalazł "bazy danych" w bazie danych sysdatabase. Czy mogę wyłączyć tę funkcję, która zmienia właściwość "nazwa bazy danych"?Delphi Firedac - Case Sensitive numer

+0

Czy próbował ustawić właściwość FDConnection „MetaCaseIns” true? – Copilot

+0

Tak, ale nie działa. Kiedy ustawiłem właściwość "MetaCaseIns" na wartość true, składnik firedac zmienił nazwę bazy danych na wielką. Potrzebuję, aby nazwa bazy danych pozostała jak wpisana. – user3877647

+0

Wysyłam link do tego tematu natychmiast do autora FireDAC, mam nadzieję, że coś powie. –

Odpowiedz

0

Uważam, że FireDAC używa konwersji dużych liter ansi, aby uzyskać dostęp do bazy danych, co z kolei powoduje problemy z MSSQL. W moim przypadku było to tureckie. Stwierdziłem, że poprawka jest łatwa. W OnBeforeConnect z TFDConnection użyłem:

Params.Database := TRUpperCase(Params.Database); 

Gdzie TRUpperCase to funkcja, która poprawnie konwertuje znaki turecki na wielkie (jak mi się Ja, zamiast I do I).

1

Domyślam się, że szukasz parametru połączenia MetaCaseInsCat. Spróbuj wyłączyć nazwy Katalog case czułości automatyczne wykrywanie i ustawić go jako przypadek niewrażliwe:

... 
FDConnection1.Params.Add('MetaCaseInsCat=True'); 
FDConnection1.Connected := True; 
0

To nie jest bezpośrednią odpowiedzią na PO, ale może pomóc w przyszłości programator jak ja, którzy mają problem z wrażliwością na sprawy w FireDAC

Używam FireDAC z MSSQL. W celu wykorzystania „podobnego” w filtrze TFDQuery w nie caseSensitive sposób: TFDQuery.FilterOptions

procedure TFDQuery_MyVersion.SetFilterText(const Value: string); 
begin 
    FilterOptions := [TFilterOption.foCaseInsensitive]; 

    inherited SetFilterText(TOldDatabaseSystemToMSSQL.Filter(Value)); 
end;