Q&A

  • SQL문 작성시 Field Editor관련 질문!!
먼저 지난번 질문에 답해주신 이재식님께 대단히 감사드립니다.



저에겐 큰 도움이 되었네요..담엔 제가 도움이 될수 있었으면 좋겠슴다.



질문..



SQL문 작성시 파라미터 변수를 사용했슴다..sql.add 뭐뭐 하는거이죠.



DBGrid상의 Text에 어떤 변화를 주기 위해 쿼리컴포넌트의 Field Editor에서 필드추가를



했줬슴다.. 이때부터 에러가 나더군요..필드를 찾지 못하겠다는 에러..



파라미터 변수와 Field Editor를 같이 쓰지 못하는지 궁금하네요..



같이 쓸수 있다면 어떤 방법이 있는지..답변 부탁드림다.. 그럼 이만..수고하세요..



1  COMMENTS
  • Profile
    이재식 1999.09.15 05:16
    안녕하세요.

    우선 친절한 인사에 대단히 감사드립니다.

    그 에러는 많이들 겪는 에러입니다.

    질문의 요지는 알겠지만 구체적으로 코딩을 안 보아서, 무엇을 시도하는

    것인지 상상이 잘 안가요.

    먼저 패라미터와 Field Editor는 같이 쓸 수 있슴을 말씀드립니다.

    예를 들어보죠.

    SQL컴포넌트의 SQL속성에 다음과 같이 코딩했다고 합시다.

    select acctyear, acctgbcd

    from myTable

    where acctyear = :year // 매개변수

    그러면 :year는 어떻게 값을 세팅해야 하는가?

    바로 SQL컴포넌트에 Params속성에가서 값을 세팅시키는 거죠.

    그 속성에가면 여러가지 입력하는 부분이 있는데 금방 알 수 있을 거예요.

    그런데 거기에 보면 value속성이 있습니다.그런데 그곳에 값과 그 값의 타입을

    세팅한다는 건 별루 의미없는 작업인거 아시겠죠?(고정처리 되잖아요)



    그래서 유닛파일의 어떤 이벤트에 이렇게 코딩하면 말 그대로 동적인

    매개변수의 의미를 가질 수 있죠.

    --- 어떤 컴포넌트 이벤트라고 가정하고---

    begin

    Query1.ParamByName('year').asString := Edit1.Text ;

    Query1.Open ;

    end ;

    그런데, 사실 이렇게 안써요. 유지보수 및 분석이 어려워요.

    쿼리와 매개변수가 따로 존재하잖아요.

    그래서 실제로는 이렇게 많이 씁니다. DBGrid를 쓴다고 가정할께요.

    쿼리 컴포넌트의 SQL속성에

    select a1, a2, a3, ....

    from 테이블명

    where 1 = 2 // 여기서 거짓조건을 주는것을 명심하세요.

    이렇게 하면 데이터는 없고 다만 열거한 필드명만 가져오죠.

    그리구, 디자인시에 데이터를 가져오질 않기 때문에

    과부하도 없답니다.

    그리고 나서 open하면 필드명만 있고, 말 그대로 데이터는 없죠.

    그런다음 Field Editor에 필요한 필드만을 추가하면 됩니다.

    그리고, 실제로는 유닛파일에 이렇게 코딩합니다.

    with Query1 do

    begin

    Close ;

    SQL.Clear ;

    SQL.Add('select acctyear, acctgbcd') ;

    SQL.Add('from myTable') ;

    SQL.Add('where acctyear = :year') ;

    ParamByName('year').asString := Edit1.Text ;

    Open ;

    end ; // 이렇게 한곳에 모아두면 분석 및 작성이 보기좋지 안습니까?



    그럼 필드를 못찾겠다는 에러는 왜 나오냐면,

    사용자가 SQL속성에 쿼리를 던진 후 Field Editor에 필요한 필드를

    추가했다고 합시다.

    가령, 위에서는 acctyear만 추가했다고 합시다.

    그런데, 실제로 유닛파일에서 쿼리를 던졌을때는

    select acctyear, acctgbcd ...

    이렇게 했다고 합시다. 그러면 바로 acctgbcd가 Field Editor에 없기

    때문에 그런 에러가 떨어집니다.

    즉, 실행시 끌고온 필드가 Field Editor에 추가한 필드에 존재하지 않으면

    그런 에러가 떨어져요. 그럴때는 쿼리를 수정하든가 아니면 추가해야죠.



    너무 장황하게 설명해서 죄송합니다.

    아무쪼록 도움이 되셨으면 하는 진정한 마음입니다.

    그럼 좋은 나날을...