Q&A

  • edit 에 값을 넣지않으면 에러가 나는 버그 좀 해결 해주세요
procedure TForm4.Button1Click(Sender: TObject);
var
val01 : string;


begin
        if cbxemp01.text='성' then
        val01:='select * from  s_emp where last_name = :valu02 '
        else if cbxemp01.text='이름' then
        val01:='select * from  s_emp where first_name = :valu02 '
        else if cbxemp01.text='직책' then
        val01:='select * from  s_emp where title = :valu02 '
        else if cbxemp01.text='전체' then
        val01:='select * from  s_emp'

        else
        showmessage('조건을 선택해 주세요');


        empqry01.close;
        empqry01.SQL.Clear;
        empqry01.SQL.Add(val01);
      

        
        empqry01.Parambyname('valu02').asstring:=emptxt.text;
        

                empqry01.open;

            
end;

라고 코딩을 했습니다.
cbxemp01 은 콤보박스구요
emptxt 는 edit 입니다.
콤보박스에서 colum 명을 정하고
edit 값을 넣으면 조회 되는 것입니다.

버그는
콤보바스에서 전체로 선택하고 바로 버튼을 클릭 하게 되면
에러가 발생 합니다.


null 값일때 valu02 가 '' 라고 해주면 될것 같은데..
코딩을 해보면 계속해서 에러가 발생 하네요.


3  COMMENTS
  • Profile
    박홍재 2002.10.16 19:49
    안녕하세요. 도움이 되셨으면 하는 군요. 일단 전체를 조회 할때의 쿼리문에는
    valu02 라는 파라메터가 들어가지 않는데 Sql은 고정이 되어 있군요. 그래서 당연히 Sql 이 에러가 나는 거구요. 이렇게 바꾸어 보셨으면 합니다.

    else if cbxemp01.text='전체' then
            val01:='select * from  s_emp'

            else
            showmessage('조건을 선택해 주세요');


            empqry01.close;
            empqry01.SQL.Clear;
            empqry01.SQL.Add(val01);
          

        --> 조건절 삽입
            if  cbxemp01.text<>'전체' then    
             empqry01.Parambyname('valu02').asstring:=emptxt.text;

    이게 맞나...애구 일단 이렇게 함 해보세요. 그럼
  • Profile
    이태원 2002.10.16 21:40
    if  cbxemp01.text<>'전체' then
    이거 넣으니깐.. 잘 되는군요..

    제 나름대로 조건절을 엄청 만들어 보았었는데..

    역시 내공의 차이가 있나보네요...

    열심히 수련 해야 겠습니다..

    감사합니다.


  • Profile
    머슴 2002.10.16 18:37
    안녕하세요...

    제 잚은 소견으로는  emptxt.text 가 Null인경우 파라미터를 ''을 넘기는 것은  

    쿼리의 결과가 없으므로  큰 의미가 없는 것 같습니다..

    그래서  이부분을 필수 입력열로 하여 반드 입력이 될 수 있도록 하는 방법을

    사용하거나  Null입력되었을때는 전체가 조회되도록 하는 방법으로 수정을

    하는 것이 옳다고 생각이 들어서 몇자 적습니다.

      
      1. 반드시 입력되도록 하는 방법

         if  emptxt.text = '' then      
          begin
            MessageDlg('emptxt은 반드시 입력하셔야 합니다.',
                              mtError,[mbOK],0);
            exit;
          end
         else  empqry01.Parambyname('valu02').asstring:=emptxt.text;


      2. 전체가 조회될 수 있도록 수정

         여러가지 방법이 있지만 코딩을 적게 하는 방향으로
         쿼리를 수정 하는 where 조건을 모두 수정
          select * from  s_emp where first_name = :valu02 or :valu02 = '*'
        
        if  emptxt.text = '' then      
          empqry01.Parambyname('valu02').asstring:='*'
        else  empqry01.Parambyname('valu02').asstring:=emptxt.text;