Q&A

  • DBLookupComboBox 에서여
소스는 아래와 같습니다.

Close; Clear;
       ADD('select count(*)             ');
       ADD('     , sum(qty)             ');
       ADD('     , sum(gong)            ');
       ADD('     , sum(vat)             ');
       ADD('     , sum(amt)             ');
       ADD('  from table                ');
       ADD(' where yyyy_mm   = :YYYY_MM ');
       ADD('   and tax_op    = :TAX_OP  ');
       ADD('   and tax_seq   = :TAX_SEQ ');
       ADD('   and banpum    = :BANPUM  ');
       ADD('   and tax_cust  = :TAX_CUST');

       ParamByName('YYYY_MM').AsString  := edt_YYYYMM.Text;
       ParamByName('TAX_OP').AsString   := DBLC_TaxOP.KeyValue;
       ParamByName('TAX_SEQ').AsInteger := StrToInt(edt_TaxSeq.Text);
       ParamByName('BANPUM').AsString   := DBLC_Banpum.KeyValue;
       ParamByName('TAX_CUST').AsString := DBLC_Cust.KeyValue;

       Open;

DBLookup의 아이템을 아무것도 선택하지 않은 상태... KeyValue가 '' 인 상태에서는

Project ****.exe raised exception class EVariantError with message 'Invalid variant type conversion'. Process stopped. Use Step or Run to continue

라는 예외 메시지가 뜹니다.

위의 메시지의 의미와 해결방법 좀 알려 주시면 감사하겠습니다.

수고 하십시요.
2  COMMENTS
  • Profile
    머슴 2002.05.14 23:20

      첫번째 해결 방법

        반드시 입력하게 만드는 것 입니다...

        if DBLC_Banpum.Text <> '' then
         begin
           에러메세지;
           DBLC_Banpum.SetFocus;
         end;



      두번째 방법
        
         선택을 안해도 반드시 검색을 해야한다면....

         쿼리 수정 (OR는 둘중에 하나만 참이면 참을 이용)
      
        ADD('   and (banpum = :BANPUM  OR :BANPUM = ''*'')');
        ADD('   and (tax_cust  = :TAX_CUST OR :TAX_CUST =''*'')');

        조건수정

      if DBLC_Banpum.Text <> '' then
        ParamByName('BANPUM').AsString   := DBLC_Banpum.KeyValue
      else ParamByName('BANPUM').AsString   :=  '*';

      if DBLC_Cust.Text <>'' then
         ParamByName('TAX_CUST').AsString := DBLC_Cust.KeyValue
    else  
        ParamByName('TAX_CUST').AsString := '*';
      
  • Profile
    nilriri™ 2002.05.15 02:39
    'Invalid variant type conversion'.

    이 에러는 DBLookupComboBox에서 null값이 리턴되어서 그런거 아닌가요?
    ParamByName('').asString := dlcb_1.KeyValue; <-여기서 에러가 발생하는거 아닌지??ㅡㅡ;

    폼이 생성될때..
    해당 DBLookupComboBox컴포넌트에..
    KeyValue := '';
    형식으로 초기화를 해주면 ...
    '' ms_sql 디비의경우 Empty String으로 비교가 되어지므로
    해당 컬럼에 Empty String인 값을 결과열로 리턴합니다.