Q&A

  • Combobox에 관한 질문입니다.
<!--CodeS-->
procedure TForm1.FormCreate(Sender: TObject);
begin


  query1.Active:= false;

  With query1 Do
        Begin

        strSQL :=
        ' Select  stname, stcode  From  store ';

        SQL.Clear;
        SQL.Add(strSQL);
        OPEN;FIRST;


        While not EOF Do
        Begin
        combobox1.Items.Add(FieldByName('stname').AsString);
        Next;
        End;

        End;
end;
<!--CodeE-->

안녕하세요. 저는 이제 막 델파이에 발을 담근...병아리 입니다.
combobox에다 쿼리를 연결해서 store 테이블에 있는
stname (예:순이네슈퍼, 철수네미용실, 영희네옷가게....)이 item에 쭉~ 나타나게까지는 했는데
이중에 하나를 선택했을때 stcode, 즉 code 값이 넘어가 조회버튼을 클릭했을때
판매량이라던가 뭐 이런게 DBGrid에 뜨게끔 프로그램해야 합니다.

DB와 Dataset, datasource 연결해서 DBGrid에 쿼리결과가 뜨긴하는데요.

질문1) item을 선택했을때 combobox에 onselect 이벤트를 쓰는게 맞나요?

질문2)item을 선택해서 조회버튼을 눌렀을때 item 을 이용하여 (예:철수네슈퍼를 조건으로)
         쿼리문을 하나 더 돌려 코드값을 넘겨받아 변수에 저장해서 써야 하나요?
          너무 질문이 길져? ㅠㅠ

프로젝트 저장하는 것도 무서운 병아리가 질문드려요 ㅠㅠ
3  COMMENTS
  • Profile
    Crazy™ 2007.08.23 10:43
    1. Change 나 CloseUp, Select 등 상관없습니다.
    2. 어떻게 하시냐 나름인데 제 경우에는 아래처럼 STringList 를 생성해서 씁니다..
        ComboBox나 memo나 listbox....등등 하나더 생성하시던가, 변수로 꼭 가지고 계셔야 겠다면 배열변수를 쓰시던가 하시기 나름이지만 변수보다는 컴퍼넌트를 하나 더 생성하시길 추천합니다..;;

      private
        { Private declarations }
        gvslSTOP_CODE : TStringList;

    procedure Tform1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      gvslSTOP_CODE.Free;
    end;

    procedure Tform1.FormCreate(Sender: TObject);
    begin
        gvslSTOP_CODE  := TStringList.Create;
        with query1 do
        begin
             Close;
             SQL.....
             Open;      
        end;
        ufSetDropDownListClass(fDM.qryTemp,'32',gvslSTOP_CODE,cmbSTOP_CODE);
    end;

    procedure ufSetDropDownListClass(pQuery : TOraQuery; pClassCode: string;
      pString : TStringList; pTargetControl : TCustomCombo);
    var
      sTempData : String;
    begin
        if pTargetControl <> nil then pTargetControl.Items.Clear;
        with pQuery do begin
            Close;
            sTempData := 'SELECT * FROM CODE_D  ' +
                         ' WHERE CODE_ID = ''' + pClassCode + ''' ORDER BY CODE';
            SQL.Text := sTempData;
            Open;
            while not EOF do begin
                pString.Add(Fields[1].AsString);
                if pTargetControl <> nil then
                    pTargetControl.Items.Add(Fields[2].AsString);
                Next;
            end;
            if pTargetControl <> nil then pTargetControl.ItemIndex := 0;
        end;
    end;

    procedure Tform1.Button1Click(Sender: TObject);
    begin
          with query2 do
          begin
              Close;
              SQL.....
              SQL.add( where aaa = '''+gvslSTOP_CODE.Strings[cmbSTOP_CODE.ItemIndex]+''' );
              Open;
          end;
    end;

  • Profile
    이미례 2007.08.24 01:15
    답변 너무 감사합니다.
    TStringList  컴포넌트를 찾아 보았는데 못찾겠더라구요ㅠㅠ
    다시 한번 찾아서 열심히 공부해 보겠습니다.


  • Profile
    구창민 2007.08.28 03:49
    안녕하세요..

    TStringList 는 컴포넌트가 아니고, class 입니다.

    classes unit 에 선언되어 있지요..

    uses 에 classes 가 포함되어 있는지 확인하시고 아래 처럼 그냥 쓰시면 됩니다.

    대충예제)

    var
      stringList : TStringList;
    begin
      stringList := TStringList.Create;
      stringList.Add('룰루~');
      ShowMessage(StringList.Strings[0]);
      ...
      FreeAndNil(StringList);

    참고하시고 즐거운 프로그래밍 하시길~