Q&A

  • Form간에 데이터 주고받기를 비롯하여...
델파이를 공부한지 이제 두달쯤 되었는데요, 아직도 모르는게 너무 많네요. 여러 고수님들의 도움을 바랍니다. 우선 참고하셔야 할 사항은 제가 근무하는곳의 개발환경이 3tier라는 겁니다. Tuxedo를 쓰고 있거든요. 이것부터가 많이 당황스럽기도 하지만 분명히 길이 있을거라 믿고 몇가지 질문을 올립니다. 우선 지금까지 구현된 상황을 설명드립니다.



제가 담당하고 있는 화면에는 코드성 데이터(예를 들어, "은행코드 000001 = 한국은행" 식의 데이터)가 거의 40%를 차지하고 있습니다. 이러한 코드성 데이터를, 직접 Server에 접근하지 않고 각 PC에 Text File로 가지고 있다가 form이 생성되는 순간 원하는 ComboBox에 원하는 코드ID를 부여하여 add하는 방식입니다. 작성한 함수는 아래와 같습니다.

function FillCombo(FileName, CodeSect: String; Combo: TComboBox): Boolean;



ComboBox의 OnChange Event에는 user가 코드를 알고 있을 경우를 위하여 직접 입력을 하게되면 다시 파일을 읽고 입력된 code에 해당하는 데이터(위의 경우 한국은행)로 Set하고 그 code를 return합니다. 작성된 함수는 다음과 같습니다. IsKey는 ComboBox를 DropDown한 경우와 직접 typing한 경우를 구분한 것입니다.

function GetCode(FileName, CodeSect, Data: String; IsKey: Boolean): String;



여기까지는 잘 되는데요, 문제는 user가 해당 code(위의 경우 000001)모르거나 item수가 너무 많아 검색을 필요로 하는 경우에 발생합니다. 이것을 해결하기 위해 코드찾기 윈도우(이하 CodeWindow)라는 것을 만들기로 했습니다. MDI Child의 특정 ComboBox에서 입력된 item이나 text가 없을경우 enter를 치면 CodeWindow가 뜨구요, 그 CodeWindow에는 예의 ComboBox에 들어간 코드성 데이터(예를 들어, 대출과목코드 등)를 가지고 있는 StringGrid가 있고 이것을 검색하여 호출한 본래의 form(MDI Child)으로 그 code값을 되돌려주어야 합니다. 중요한 것은 이 CodeWindow는 어느 form에서나 호출할 수 있어야 한다는 겁니다.



여기서 해결하지 못하고 있는 문제점은...



첫째, CodeWindow를 호출한 폼을 어떻게 알아낼수 있느냐하는 겁니다.



둘째, DBGrid가 아닌 StringGrid에서, 입력된 검색 Key Word를 가지고 SQL문의 select ~ like ~ 같은 기능을 구현하는 방법을 모르겠다는 겁니다. 제가 원하는 방식은 '한'이라고 입력하면 '한'으로 시작하는 모든 은행명이 은행코드과 함께 select되는 것입니다.



셋째, 이렇게 검색된 결과에서 원하는 레코드를 선택하고 확인버튼을 누르게 되면 호출한 본래의 form으로 그 code를 넘겨주고 싶습니다. 문제는 어떤 form의 어떤 ComboBox로 넘겨주느냐 하는 것이겠죠. 즉, 첫번째 문제와 함께, CodeWindow를 호출한 form에서 focus를 가졌던 ComboBox를 어떻게 알아내느냐 하는 겁니다.



해결할수 있을까요? 조금이라도 도움이 될수 있는 사항이라면 알려주시기 바랍니다. 필요하다면 제가 작성한 소스를 보내드리겠습니다. 한번 검토해주셨으면 합니다. 왕초보...간곡히 가르침을 부탁드립니다. 도와주십시요......





1  COMMENTS
  • Profile
    방경주 2001.01.16 04:57
    솔직히 저두 초짜라 다는 답변을 못드리겠구여....



    저같은 경우는



    검색 창을 호출할때...



    procedure tform1.search(CBox : TComboBox);

    //CBox는 호출한 폼의 콤보박스가 되겠져..

    begin

    try

    검색폼 생성...

    finally

    검색폼 클로즈....

    end;

    CBox.Text := 결과값(전 전역 변수로 했답니다..)

    end;



    머 이런식으루 했답니다...-_-; 도움이 못되서 지송...



    걍 참고만 하세여...흠...오늘 이말 넘 많이 써 먹네....쩝...아는게 없어서리...





    공병우 wrote:

    > 델파이를 공부한지 이제 두달쯤 되었는데요, 아직도 모르는게 너무 많네요. 여러 고수님들의 도움을 바랍니다. 우선 참고하셔야 할 사항은 제가 근무하는곳의 개발환경이 3tier라는 겁니다. Tuxedo를 쓰고 있거든요. 이것부터가 많이 당황스럽기도 하지만 분명히 길이 있을거라 믿고 몇가지 질문을 올립니다. 우선 지금까지 구현된 상황을 설명드립니다.

    >

    > 제가 담당하고 있는 화면에는 코드성 데이터(예를 들어, "은행코드 000001 = 한국은행" 식의 데이터)가 거의 40%를 차지하고 있습니다. 이러한 코드성 데이터를, 직접 Server에 접근하지 않고 각 PC에 Text File로 가지고 있다가 form이 생성되는 순간 원하는 ComboBox에 원하는 코드ID를 부여하여 add하는 방식입니다. 작성한 함수는 아래와 같습니다.

    > function FillCombo(FileName, CodeSect: String; Combo: TComboBox): Boolean;

    >

    > ComboBox의 OnChange Event에는 user가 코드를 알고 있을 경우를 위하여 직접 입력을 하게되면 다시 파일을 읽고 입력된 code에 해당하는 데이터(위의 경우 한국은행)로 Set하고 그 code를 return합니다. 작성된 함수는 다음과 같습니다. IsKey는 ComboBox를 DropDown한 경우와 직접 typing한 경우를 구분한 것입니다.

    > function GetCode(FileName, CodeSect, Data: String; IsKey: Boolean): String;

    >

    > 여기까지는 잘 되는데요, 문제는 user가 해당 code(위의 경우 000001)모르거나 item수가 너무 많아 검색을 필요로 하는 경우에 발생합니다. 이것을 해결하기 위해 코드찾기 윈도우(이하 CodeWindow)라는 것을 만들기로 했습니다. MDI Child의 특정 ComboBox에서 입력된 item이나 text가 없을경우 enter를 치면 CodeWindow가 뜨구요, 그 CodeWindow에는 예의 ComboBox에 들어간 코드성 데이터(예를 들어, 대출과목코드 등)를 가지고 있는 StringGrid가 있고 이것을 검색하여 호출한 본래의 form(MDI Child)으로 그 code값을 되돌려주어야 합니다. 중요한 것은 이 CodeWindow는 어느 form에서나 호출할 수 있어야 한다는 겁니다.

    >

    > 여기서 해결하지 못하고 있는 문제점은...

    >

    > 첫째, CodeWindow를 호출한 폼을 어떻게 알아낼수 있느냐하는 겁니다.

    >

    > 둘째, DBGrid가 아닌 StringGrid에서, 입력된 검색 Key Word를 가지고 SQL문의 select ~ like ~ 같은 기능을 구현하는 방법을 모르겠다는 겁니다. 제가 원하는 방식은 '한'이라고 입력하면 '한'으로 시작하는 모든 은행명이 은행코드과 함께 select되는 것입니다.

    >

    > 셋째, 이렇게 검색된 결과에서 원하는 레코드를 선택하고 확인버튼을 누르게 되면 호출한 본래의 form으로 그 code를 넘겨주고 싶습니다. 문제는 어떤 form의 어떤 ComboBox로 넘겨주느냐 하는 것이겠죠. 즉, 첫번째 문제와 함께, CodeWindow를 호출한 form에서 focus를 가졌던 ComboBox를 어떻게 알아내느냐 하는 겁니다.

    >

    > 해결할수 있을까요? 조금이라도 도움이 될수 있는 사항이라면 알려주시기 바랍니다. 필요하다면 제가 작성한 소스를 보내드리겠습니다. 한번 검토해주셨으면 합니다. 왕초보...간곡히 가르침을 부탁드립니다. 도와주십시요......

    >

    >