본문 바로가기

프로그래밍/Delphi

델파이에서 TStoredProcedure의 CreateParameter 사용시 주의점

TStorecProcedure의 CreateParameter를 이용하여 파라미터 생성후 파라미터 값을 전달할 경우에 원하는 쿼리 결과가 나오지 않는 경우에 대한 처리

델파이에서 TStoredProcedure를 사용할 경우에 컴포넌트를 올려놓고 미리 지정된 스토어드 프로시저를 실행할 경우에는
Prepare에 의해서 자동으로 파라미터들이 생성 되어 사용하는데 전혀 문제가 없습니다..
그러나 동적으로 TStoredProcedure를 Create하여 사용할 경우, 또 Parameter를 자동생성하지 않고 수동으로 CreateParameter를 이용하여 생성할 경우에는 생성하는 순서가 StoredProcedure를 만들때 선언한 파라미터의 순서와 동일하게 Create를 해 주어야만 정상적인 파라미터 전달이 됩니다. 이는 파라미터 전달 순서와 밀접한 관계가 있는듯 합니다.


  ads := TADOStoredProc.Create(nil);
  try
    searchStr := sm.StringReplace(AKeyword, ' ', ',', [rfReplaceAll]);
    ads.ConnectionString := DB4_CONNECTION_STR;
    ads.ProcedureName := 'dbo.usp_local_search_list';
    ads.Parameters.Clear;
    ads.Parameters.CreateParameter('@keyword_list', ftString, pdInput, 50, null);
    ads.Parameters.CreateParameter('@operation', ftString, pdInput, 6, null);
    ads.Parameters.CreateParameter('@sct', ftString, pdInput, 5, null);
    ads.Parameters.CreateParameter('@article_count', ftInteger, pdInput, 4, 30); //Default 값 지정
    ads.Parameters.CreateParameter('@page_index', ftInteger, pdInput, 4, 1); //Default 값 지정
    ads.Parameters.CreateParameter('@term', ftInteger, pdInput, 4, null);
    ads.Parameters.CreateParameter('@debug', ftInteger, pdInput, 4, 0); // Default 값 지정


    ads.Parameters.ParamByName('@keyword_list').Value := searchStr;
    ads.Parameters.ParamByName('@operation').Value := 'AND';
    ads.Parameters.ParamByName('@sct').Value := ASCT;
    ads.Parameters.ParamByName('@term').Value := 3;

    ads.Open;
    result := LoadSearchResult;
    ads.Close;
  finally
    ads.Free;
  end;