Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

Qry: Parameter 'var_key' not found. 는 대체 어디서 나는건가요?


리도

질문

텍스트박스가 하나 있고, 조건은 단어시작 검색, 단어포함 검색 조건이 있습니다.

텍스트박스에 예시로 지역과 번호로 검색하고 싶어서 아래와 같이 코딩하였습니다.

 

지역으로 검색 시 검색 조건(시작,포함)에 상관없이 정상적으로 검색이 되나

번호로 검색 시 데이터가 나오지 않습니다.

아래쪽에 주석 처리 된 부분을 풀면 

Qry: Parameter 'var_key' not found. 오류가 납니다.

 

 

 

Try
       cg1TV1.BeginUpdate;

       with DBM.Qry do
       begin
           close;

           sql.Clear;

           if  edt_gb.Text = '1' then
           begin
               sql.Add('SELECT a.NO1               as        NO1        ,');
               sql.Add('       a.NO2               as        NO2        ,');
               sql.Add('       a.NO3               as        NO3        ,');
               sql.Add('       b.JM_BNO            as        JM_BNO     ,');
               sql.Add('       b.GONGSA_NM         as        GONGSA_NM  ,');
               sql.Add('       b.ADDR              as        ADDR       ,');
               sql.Add('       b.CNO               as        CNO        ,');
               sql.Add('       b.CDATE             as        CDATE      ,');
               sql.Add('       b.BIGO              as        BIGO       ,');
               sql.Add('       c.SAWON_NM          as        SAWON_NM    ');
               sql.Add('FROM ( SELECT DISTINCT                           ');
               sql.Add('              x.NO1        as        NO1        ,');
               sql.Add('              x.NO2        as        NO2        ,');
               sql.Add('              x.NO3        as        NO3         ');
               sql.Add('       FROM   YU006        x                    ,');
               sql.Add('              YU007        y                     ');
               sql.Add('       WHERE  x.CUST_CD    =         :var_cust_cd');
               sql.Add('       AND    x.NO1        =         :var_team   ');
               sql.Add('       AND    x.STAT_CD    =         ''0''       ');
               sql.Add('       AND    y.STAT_NO1   =         x.STAT_NO1  ');
               sql.Add('       AND    y.STAT_NO2   =         x.STAT_NO2  ');
               sql.Add('       AND    y.TAX_IND    =         ''N''       ');
               sql.Add('       AND    y.STAT_CD    =         ''0''       ');
               sql.Add('     )                     a                    ,');
               sql.Add('       YU002               b                    ,');
               sql.Add('       SAWON_INFO          c                     ');


               //기존where 구문
               sql.Add('WHERE  b.NO1               =         a.NO1       ');
               sql.Add('AND    b.NO2               =         a.NO2       ');
               sql.Add('AND    b.NO3               =         a.NO3       ');


               if  trim(edt_key.Text) <> '' then
               sql.Add('AND    b.GONGSA_NM         LIKE      :var_key    ');


               /////추가
               if trim(edt_no_1.Text) <> '%%' then
               sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');
               /////추가


               sql.Add('AND    c.SAWON_ID          =         b.SAWON_ID  ');
               sql.Add('ORDER  BY      b.GONGSA_NM, a.NO1,  a.NO2,  a.NO3');

           end
           else
           begin
               sql.Add('SELECT a.NO1               as        NO1        ,');
               sql.Add('       a.NO2               as        NO2        ,');
               sql.Add('       a.NO3               as        NO3        ,');
               sql.Add('       a.JM_BNO            as        JM_BNO     ,');
               sql.Add('       a.GONGSA_NM         as        GONGSA_NM  ,');
               sql.Add('       a.ADDR              as        ADDR       ,');
               sql.Add('       a.CNO               as        CNO        ,');
               sql.Add('       a.CDATE             as        CDATE      ,');
               sql.Add('       a.BIGO              as        BIGO       ,');
               sql.Add('       b.SAWON_NM          as        SAWON_NM    ');
               sql.Add('FROM   YU002               a                    ,');
               sql.Add('       SAWON_INFO          b                     ');


               //기존where 구문
               sql.Add('WHERE  a.CUST_CD           =         :var_cust_cd');
               sql.Add('AND    a.NO1               =         :var_team   ');


               if  trim(edt_key.Text) <> '' then
               sql.Add('AND    a.GONGSA_NM         LIKE      :var_key    ');
               //sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');


               /////추가
               //if trim(edt_no_1.Text) <> '%%' then
               //sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');
               /////추가


               sql.Add('AND    a.STAT_CD           =         ''0''       ');
               sql.Add('AND    b.SAWON_ID          =         a.SAWON_ID  ');
               sql.Add('ORDER  BY      a.GONGSA_NM, a.NO1,  a.NO2,  a.NO3');

           end;

           ParamByName('var_cust_cd').Value := edt_cust_cd.Text;
           ParamByName('var_team').Value    := edt_no_1.Text;

           //기존
           if  trim(edt_key.Text) <> '' then
           begin
               if  rbtn_like.Checked = true then ParamByName('var_key').Value := '%' + trim(edt_key.Text) + '%'
                                            else ParamByName('var_key').Value := trim(edt_key.Text) + '%';
           end;


           /////이부분주석풀면 var_key 에러가 납니다
           //if trim(edt_no_1.Text) <> '%%' then
           //begin
              //if  rbtn_like.Checked = true then ParamByName('var_key').Value := '%' + trim(edt_key.Text) + '%'
                                           //else ParamByName('var_key').Value := trim(edt_key.Text) + '%';
           //end;

           /////추가


           open;
           First;

이 댓글 링크
다른 사이트에 공유하기

5 answers to this question

Recommended Posts

  • 0

에러 메시지 그대로 쿼리문에 var_key 파라미터가 없다는 내용 입니다.

if 문이 들어간 쿼리에서 :var_key 부분이 조건에 없는 경우에 쿼리문에  :var_key 항목 자체가 만들어 지지 않았을 테니 쿼리문 조건을 잘 파악해 보시면 될 것 같습니다.

 

이 댓글 링크
다른 사이트에 공유하기

  • 0

쿼리문 첫번째 부분에

if  trim(edt_key.Text) <> '' then
               sql.Add('AND    b.GONGSA_NM         LIKE      :var_key    ');


               /////추가
               if trim(edt_no_1.Text) <> '%%' then
               sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');
               /////추가

var_key 들어있고

쿼리문 하단쪽에

if  trim(edt_key.Text) <> '' then
               sql.Add('AND    a.GONGSA_NM         LIKE      :var_key    ');
               //sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');


               /////추가
               //if trim(edt_no_1.Text) <> '%%' then
               //sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');
               /////추가

이렇게 추가했었는데 이 부분 주석을 풀면 또 오류가 나더라구요.

일단은 주석처리 해놨습니다.

그래서 이렇게 var_key 에러가 나는것인지..

/////이부분주석풀면 var_key 에러가 납니다
           //if trim(edt_no_1.Text) <> '%%' then
           //begin
              //if  rbtn_like.Checked = true then ParamByName('var_key').Value := '%' + trim(edt_key.Text) + '%'
                                           //else ParamByName('var_key').Value := trim(edt_key.Text) + '%';
           //end;
           /////추가

하단쪽 구문 추가가 잘못된걸까요?

이 댓글 링크
다른 사이트에 공유하기

  • 0

테이블과 데이터를 모르는 상태에서 조건이 맞는지 틀리는지는 소스만 보고 제 3자가 파악 할 수는 없으니 직접 찾아 보셔야 합니다.

일단 실행 가능한 쿼리문을 만드시고 그것을 델파이를 통하지 않고 데이터베이스 브라우져에서 정상적으로 쿼리문이 실행 되는지 확인하시고

그것을 가지고 델파이에서 조건을 하나하나 따지면서 실행해 보시길 바랍니다.

이 댓글 링크
다른 사이트에 공유하기

  • 0

답변해주신 쿼리문 조건 관련해서는 (if문) 각각 실행이 가능합니다. 쿼리 실행 시 정상적으로 데이터 나옵니다.

디버깅을 시도해봤는데 바로 오류를 뱉어내버려서 우선 다시 진행해보려고 합니다.

var_key not found 오류는 해결했으나,

WHERE 구문 밑에

 

 if  trim(edt_key.Text) <> '' then
               sql.Add('AND    b.GONGSA_NM         LIKE      :var_key    ');



if trim(edt_no_1.Text) <> '%%' then
sql.Add('AND    a.NO1 + a.NO2 + a.NO3         LIKE      :var_key    ');
 

두개의 if 문 중 하나의 if 문씩 실행하면 각각은 되는데 이렇게 둘 다 풀어놓으면 오류값은 없는데 반응이 없네요

Edited by 리도
이 댓글 링크
다른 사이트에 공유하기

  • 0

항목에 직접 값을 넣기 전에 화면에서 메모장 같은 것에 데이터를 띄워서 눈으로 보면서 작업해 보시거나

하드코딩으로 데이터를 할당해서 로직 문제인지 데이터 문제인지 먼저 체크를 하시면 작업하기 좀더 수월 합니다.

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.