2011-11-22 4 views
1

델파이에서 StoredProc 구성 요소를 사용할 때 ParamByname('ParamName').Clear NULL 값을 보낼 수 있습니다.Delphi에서 Unidac Query 구성 요소의 NULL 값을 전달하는 방법은 무엇입니까?

그러나 Query 구성 요소를 사용할 때 어떻게 NULL 값을 전달할 수 있습니까?

with Query do 
begin 
SQL.ADD('exec d_upd_calc'+Quoted(EditCalc.Text)); 
end 

위의 시나리오에서 편집 상자가 비어 있으면 NULL을 보내려고합니다.

저는 Sybase와 함께하는 UniCAD에서 Delphi 2010을 사용하고 있습니다.

답변

2

에도 쿼리에 당신은 매개 변수를 사용하여 작업 할 수 있습니다.

+0

추가 : 매개 변수 데이터 형식을'DataType : = ftString' 또는 다른 방법으로 지정해야 할 수도 있습니다. –

+0

내가 이것을 사용해 볼게. – SSE

1

장점 DB로 나는이 라인을 따라 뭔가를 할 것이다 : 키워드는 NULL입니다

var 
    sqlText: string; 

with Query do 
begin 
    if EditCalc.Text = '' then 
    sqlText := 'exec d_upd_calc NULL' else 
    sqlText := 'exec d_upd_calc '+Quoted(EditCalc.Text); 
    SQL.ADD(sqlText); 
end; 

경우,이 작업을해야합니다.

Quoted은 SQL 삽입을 방지하기 위해 위험한 사용자 입력을 제거/이스케이프합니까? 그렇다면 좋은 것입니다. 그렇지 않다면 그렇게해야합니다.

Query.SQL.Text := 'exec d_upd_calc :myparam'; 
Query.Prepare; 
Query.ParamByName('myparam').Clear; 

을 그리고 전체 문자열을 구축하는 것보다 당신이 따옴표를 처리하고 SQL 주입을 통해 보안 누수를 피할해야하기 때문에, 매개 변수를 사용하는 것이 좋습니다 :

+0

Trim (CalcType.Text) <> ''인 경우 Calc : = 따옴표 붙이기 (Trim (CalcType.Text)) else Calc : = 'Null'; SQL에 추가하기 전에 Quoted로 제공하고 있습니다. 그래서 문제가되지 않습니다. 감사합니다. – SSE

관련 문제