음....
무슨 말인줄은 이해 하겠습니다만. 의아 하네요
일단 쿼리 문장이 이상이 없다면 데이타가 있고 없고를 떠나서 에러가 나지 않습니다.
그러니 select할 항목이 없을 경우에는 invalid variant type이라는 에러메세지가 가차없이
나온다는 말은 항목이 있고 없고를 떠난 문제 입니다.
invalid variant type 에러는 어찌 되었던간에 데이타(필드) 의 자료형에 대한 오류를 보고하는
겁니다. 따라서 ... 분명히 어떤 자료형을 잘못 사용 하셨다는 이야기 밖에는 않됩니다.
전체적인 이해를 할수 없으므로 답변 하기가 좀 그렀네요 ...
하지만 자료 형을 기준으로 틀린 부분을 찾아 보세요. 분명히 있을 겁니다.
버그는 항상 가장 안전하다고 믿었던 그곳에 있습니다.
하하
ADOQuery3->SQL->Clear();
ADOQuery3->SQL->Add("SELECT " );
ADOQuery3->SQL->Add(" 일련번호, 순서 " );
ADOQuery3->SQL->Add("FROM " );
ADOQuery3->SQL->Add(" table " );
ADOQuery3->SQL->Add("WHERE " );
ADOQuery3->SQL->Add(" memo=" + QuotedStr(mem_name) );
ADOQuery3->SQL->Add(" AND 일련번호 > 0 " );
ADOQuery3->SQL->Add(" AND 일련번호 NOT IN " );
ADOQuery3->SQL->Add(" ( " );
ADOQuery3->SQL->Add(" SELECT " );
ADOQuery3->SQL->Add(" 일련번호 " );
ADOQuery3->SQL->Add(" FROM " );
ADOQuery3->SQL->Add(" del_table " );
ADOQuery3->SQL->Add(" WHERE " );
ADOQuery3->SQL->Add(" memo=" + QuotedStr(mem_name) );
ADOQuery3->SQL->Add(" )" );
자 보십시요...
제 소스 파일이라면 ... SQL 문장을 다음처럼 입력 합니다.
훨씬 보기 좋지 않습니까 ...
이렇게 입력 하시는 버릇을 드린다면은 ... 아마도 훨씬 나은 프로그래머가
되실수 있을 겁니다.
참고로 QuotedStr() 함수는 문자열을 '' (홋 따옴표) 로 묶어주는 함수입니다.
그럼 도움 되셨기를..............
Jun 님이 쓰신 글 :
: 답변 감사드립니다...
: 그 부분은 말씀하신대로 적용하여 해결이 된 것 같습니다...꾸벅~!
: 그런데 현재 adoquery-datasource-dbgrid를 쓰는데요...
: select한 항목이 있을 때는 제대로 가져옵니다...헌데 dbgrid에 뿌려진 항목들을 모두 del_table로 넣어서 결국 select할 항목이 없을 경우에는 invalid variant type이라는 에러메세지가 가차없이 나옵니다.
: try-catch로 감싸주어도 에러메시지는 여전히 뜹니다.
: 제가 던져준 sql문의 뜻은 table에서 일련번호와 순서를 가져오는데 memo필드는 mem_name이고 일련번호는 0보다 크고 del_table의 memo필드는 mem_name인 일련번호와 일치하지 않는 항목만을 select하는 것입니다.
: 말이 좀 꼬인 것 같은데요...결론은 del_table에 있는 항목은 빼고 table에서 가져오고자 하거든요.
: try로 감싸주어도 에러메시지가 뜨는 이유와 invalid variant type이라는 에러메시지를 해결하는 방법을 알고 싶습니다.
: 골치아프게 해드려 죄송합니다.
:
:
: 최보현.U&I 님이 쓰신 글 :
: : Jun 님이 쓰신 글 :
: : : 안녕하세요...
: : : 아래와 같이 sql문을 adoquery에 주었습니다.
: : :
: : : ADOQuery3->SQL->Clear();
: : : ADOQuery3->SQL->Add("select 일련번호, 순서 from table where memo = ");
: : : ADOQuery3->SQL->Add(mem_name);
: : : ADOQuery3->SQL->Add(" and 일련번호 > 0 and 일련번호 NOT IN (select 일련번호 from del_table where memo= ");
: : : ADOQuery3->SQL->Add(mem_name);
: : : ADOQuery3->SQL->Add(")");
: : :
: : : select한 필드가 없을 때...예를 들어 일련번호 > 0 인 row가 없을 때 parameter aaa has no default value 라는 메세지가 뜹니다..
: : :
: : : 만일 adoquery3에 미리 sql을 써 넣고 parameter를 넘겨주는 식으로 하면 invalid variant type conversion이라는 메세지가 계속하여 뜹니다.
: : :
: : : sql문을 잘못 써준 건 아닌 것 같은데 어떤 부분을 손 봐야 할지 감이 잡히지 않아 이렇게 질문드립니다..
: : :
: : : 답변 부탁드릴께요...
: :
: : 음 일단 Memo 의 자료형이 메모형또는 문자열 이라면은 ...
: : SQL 문장이 잘못 되었습니다.
: :
: : 다음과 같이 되어야 하지요 ...
: :
: : ADOQuery3->SQL->Clear();
: : ADOQuery3->SQL->Add("select 일련번호, 순서 from table where memo = '");<-- (') 에 주의
: : ADOQuery3->SQL->Add(mem_name);
: : ADOQuery3->SQL->Add("'"); <-- (') 에 주의
: :
: : 그럼 답변이 되었겠지요
: :
: : 개박살 보다 조금 나은 허접 현이 였습니다.
: :