2014-07-25 3 views
11

ADO에서 FireDAC으로 내 응용 프로그램을 마이그레이션하려고합니다. Microsoft SQL Server를 사용하고 있습니다. 내 데이터베이스 서버가 데이터 정렬 SENSITIVE CASE와 함께 설치되었으며 데이터베이스는 데이터 정렬이 포함 된 INSENSITIVE CASE로 생성되었습니다. 내 구성 관리자가이 구성을 가지고 있기 때문에이 구성을 수행했습니다. 그러나 FireDAC로 마이그레이션하려고 시도 할 때 FireDAC 드라이버 (MSSQL)는 데이터베이스 데이터 정렬을 찾고 속성 "데이터베이스 이름"을 대문자로 변경합니다. FireDAC이 sysdatabase에서 "데이터베이스 이름"을 찾지 못했기 때문에 많은 일이 실패했습니다. "데이터베이스 이름"속성을 변경하는이 기능을 끌 수 있습니까?Delphi Firedac - 대소 문자를 구분합니다.

+0

당신은 FDConnection 속성 'MetaCaseIns'true로 설정하는 시도? – Copilot

+0

예, 작동하지 않았습니다. 'MetaCaseIns'속성을 true로 설정하면 firedac 구성 요소가 데이터베이스 이름을 대문자로 변경했습니다. 데이터베이스 이름을 입력하는 것처럼 유지해야합니다. – user3877647

+0

나는이 주제에 대한 링크를 FireDAC의 저자에게 즉시 보내고, 그가 뭔가를 말할 수 있기를 바랍니다. –

답변

0

FireDAC에서 ansi 대문자 변환을 사용하여 데이터베이스에 액세스하면 MSSQL에서 문제가 발생합니다. 내 경우에는 터키 였어. 수정이 쉬운 것으로 나타났습니다. TFDConnection의 OnBeforeConnect에서 내가 사용 :

TRUpperCase 제대로 터키어 문자를 대문자로 변환하는 기능 (I에 내가 좋아 대신 내가의 I에)입니다
Params.Database := TRUpperCase(Params.Database); 

.

1

연결 매개 변수 MetaCaseInsCat을 찾고 계신 것 같습니다. 카탈로그 이름의 대소 문자 구분 자동 감지를 해제하고 대소 문자를 구분하지 수를 설정하려고 :

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

이이 영업 이익에 대한 직접적인 대답은 아니지만 경우 민감도와 문제가있는 나 같은 미래의 프로그래머 도움이 될 수 있습니다 FireDAC

저는 MSSQL에서 FireDAC을 사용하고 있습니다. 비 소문자를 구분 방법에 TFDQuery 필터에서 'LIKE'을 사용하려면 : TFDQuery.FilterOptions를

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

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