2017-04-18 1 views
2

내가이 TFDQuery를 사용하여이 쿼리를 실행할 때, 레코드가 반환됩니다 데이터베이스로 (2.5) 파이어 버드를 사용하여 Firedac (델파이 시애틀)와 함께 일하고 있어요 안녕하세요 :Firedac 파이어 버드 반환 작업을 선택 더 레코드가

SELECT ID FROM USERS WHERE PWD = 'êHÆ–!+' 

데이터베이스 프로그램에서 IbExpert와 동일한 쿼리가 하나의 레코드를 반환합니다. 이 문제를 해결할 수 있도록 구성 할 Firedac 구성 요소가있는 매개 변수가 있습니까? 감사.

+0

연결 문자 집합이 무엇입니까? 열의 문자 집합은 무엇입니까? BTW : 이것이 실제 프로덕션 코드 인 경우 보안을 염두에두고 사용자를 인증하는 방법을 재고하십시오. 암호는 적절한 암호 해시 알고리즘으로 해시되어야하며 암호로 선택하지 않고 사용자 이름으로 선택한 다음 해시를 확인해야합니다. –

+0

Firebird에서이 필드에 사용되는 charset은 UTF8이며 Firedac Connection 구성 요소에 사용되는 CharacterSet은 csUTF8입니다. 어쨌든이 코드는 예제이며이 선택을 사용하기 전에 몇 가지 코드가 있으며 실행 후 또 다른 체크가 있습니다. –

+7

매개 변수화 된 쿼리를 사용해 보셨습니까? –

답변

2

검색어 문자열에 있으며 입니다! char. 기본적으로 쿼리 문자열은 사전 처리되어 있으므로 과 같은 상수 문자를 이스케이프 처리해야합니다!, , :, ?, { 또는 }, 그렇지 않으면 특수 문자로 사용됩니다.

가장 좋은 옵션은 매개 변수를 사용하는 것입니다. 그것은 (다른 이득을 제외하고) 그 를 제거 할 것이다! 전처리 명령 문자는 :

FDQuery.SQL.Text := 'SELECT ID FROM USERS WHERE PWD = :Password'; 
FDQuery.ParamByName('Password').AsString := 'êHÆ–!+'; 
FDQuery.Open; 

또 다른 옵션은 상수 char 또는 매크로 처리기를 사용하지 않도록 설정하는 것이 탈출한다. 자세한 내용은 Special Character Processing 항목을 참조하십시오.

+1

에서 마지막 세 가지 예와 같이 인코딩 고정 접두어 접두어로 시도해보십시오. 나중에 몇 달 후에 Uwe 제안이 문제를 해결하기 때문에 읽었습니다. 당신의 설명을 이해하면 문제를 이해하는 데 도움이됩니다. –