소스는 아래와 같습니다.
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
라는 예외 메시지가 뜹니다.
위의 메시지의 의미와 해결방법 좀 알려 주시면 감사하겠습니다.
수고 하십시요.
첫번째 해결 방법
반드시 입력하게 만드는 것 입니다...
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 := '*';