2017-05-12 3 views
1

를이 잘 작동 : 나는 그러나 LIKE 문을 사용하려고 해요 그리고 그것은이 경우 매개 변수 값을 찾을 수 있다고 말한다SQL 쿼리 매개 변수

Query = 'SELECT * from table_1 where code = :value; '; 

:

Query = 'SELECT * from table_1 where code LIKE ''%:value;%'''; 

Param := ADOQuery1.Parameters.ParamByName('value'); 
Param.DataType := ftString; 
Param.Value := 'bob'; 

대부분의 언어에서는 작동하지만 델파이에서는 작동하지 않기 때문에 백 슬래시를 사용하여 인용 부호를 무시하고 싶습니다.

+1

값에서';'를 제거하면 어떻게됩니까? 확실히 그것은 그것을 던지고있는 것이 확실합니다. 나는 그것이 유효한 SQL 구문이라고 생각조차하지 않았다. ** 편집 ** 사실, 당신의 문제를 참조하십시오. 매개 변수를 따옴표로 묶을 수는 없지만 동시에 '%'가 필요합니다. 대신, 명령문이 아니라 매개 변수에 전달한 실제 값에'%'를 포함하십시오. –

+0

그게 효과가! 덕분에 –

+0

어느 부분이 효과가 있었습니까? –

답변

5

매개 변수는 자동으로 문자열 주위에 따옴표를 넣습니다. 따라서 SQL 쿼리에 이러한 따옴표를 포함 할 수 없습니다. 따라서 쿼리를 사용하여 % 구문도 전달할 수 없습니다.

대신 명세서를 원본으로 유지하고 (=LIKE으로 대체) 실제 값을 %으로 전달하십시오. 보조 노트에


Query = 'SELECT * from table_1 where code LIKE :value'; 
Param := ADOQuery1.Parameters.ParamByName('value'); 
Param.DataType := ftString; 
Param.Value := '%bob%'; 

,이 코드는 ... 좀 더 우아

ADOQuery1.Parameters.ParamValues['value']:= '%bob%'; 

은 문자열의 IT 말할 필요가 없습니다. 자동으로 감지합니다.

1

"문자열 (Param.DataType)을 알릴 필요가 없습니다. 자동으로이를 감지합니다."

일반적으로 사실입니다. 실제로는 .ParamCreate, .ResourceOptions.AssignedValue.rvParamCreate, .ResourceOptions.AssignedValue.rvDefaultParamType=falsedefaultParamDataType과 같은 일부 TConnection 속성에 따라 다릅니다. 해당 속성이 변경되지 않은 경우 자동으로 감지합니다.

일부 경우 명시 적입니다.