Q&A

  • [질문] 퀴리문 에러좀 봐주세요.
안녕하십니까 전봉수 입니다.

Jaryo.BD와 Mupmu.BD 양쪽 테이블이 코드가 Date 날자형식으로 코드화
되어 아래와같이 Union 으로 조인을하여 퀴리문을 구성하였는데요 컴파일은
되는데 실행하면 에러가 발생하여 무었이 잘못 되었는지 도무지 알길이
없어 질문을 드립니다. 고수님들 부탁드립니다.
운영체제 : WIN_XP P.R.O  Delphi 6.0

에러 메세지 : Field in order by must be in result set.

1. 일반 폼
// 인쇄버튼을 눌렀을때 선택한 조건에 따른 SQL 구문을 작성한다.
procedure TMupmuForm.BtnPRINT1Click(Sender: TObject);
VAR
  sSQL: STRING;
begin
  TRY
    STRTODATE(TRIM(ED_PIMDATE.TEXT));
  EXCEPT
    SHOWMESSAGE('접수 일자가 잘못되었습니다.');
    ACTIVECONTROL:=ED_PIMdate;
    EXIT;
    END;

// 요부분
//---------------------------------------------------------------------------------
    // 기본 SQL 구문생성
    sSQL:=' Select Jdate From Jaryo Where Jdate Between :PIJdate1 and :PIJdate2 '+
          ' Union '+
          ' Select Mdate From Mupmu Where Mdate Between :PIMdate1 and :PIMdate2 ';
//---------------------------------------------------------------------------------

    // 인쇄하고져하는 신고부서 코드를 입력하였으면
    IF TRIM(ED_PIScode.TEXT) <>'' THEN
      sSQL:=' Select Scode From Jaryo Where Jdate Between :PIJdate1 and :PIJdate2 '+
            ' and Scode = '+FORMAT('''%s''',[TRIM(ED_PIScode.TEXT)])+
            ' Union '+
            ' Select Scode From Mupmu Where Mdate Between :PIMdate1 and :PIMdate2 '+
            ' and Scode = '+FORMAT('''%s''',[TRIM(ED_PIScode.TEXT)]);

    // 인쇄하고져하는 처리부서 코드를 입력하였으면
    IF TRIM(ED_PIHcode.TEXT) <>'' THEN
      sSQL:=' Select Hcode From Jaryo Where Jdate Between :PIJdate1 and :PIJdate2 '+
            ' and Hcode = '+FORMAT('''%s''',[TRIM(ED_PIHcode.TEXT)])+
            ' Union '+
            ' Select Hcode From Mupmu Where Mdate Between :PIMdate1 and :PIMdate2 '+
            ' and Hcode = '+FORMAT('''%s''',[TRIM(ED_PIHcode.TEXT)]);

    // 정렬항목 설정
    CASE SORT_PTYPE1.ITEMINDEX OF
      0: sSQL:=sSQL + ' ORDER BY JDate'; //,A.SEQ ';
      1: sSQL:=sSQL + ' ORDER BY Scode'; //, A.SEQ ';
      2: sSQL:=sSQL + ' ORDER BY HCode'; //, A.SEQ ';
    END;

     // SHOWMESSAGE(Qr_Jaryo.SQL.Text);

    // 정렬방법 설정
    CASE SORT_PTYPE1.ITEMINDEX OF
      0: sSQL:=sSQL + ' ASC ';
      1: sSQL:=sSQL + ' DESC ';
    END;

    TRY
      // 인쇄 디자인 화면 CALL
      MupmuiPFORM:=TMupmuiPFORM.Create(APPLICATION);
      // 작성한 SQL구문과 파라메타(작성일자)를 넘긴다.(파라독스는 날짜변환 함수
      // 가 없어 파라메타로 전달함
      MupmuiPFORM.sSQL:=sSQL;
      MupmuiPFORM.sTDate:=TRIM(ED_PIMDATE.TEXT);
      MupmuiPFORM.sBDate:=TRIM(ED_PIMDATE.TEXT);
      MupmuiPFORM.sLDate:=TRIM(ED_PIMDATE.TEXT);
      MupmuiPFORM.sHDate:=TRIM(ED_PIMDATE.TEXT);
      MupmuiPFORM.QRLabel2.CAPTION:= Lb_PIHname.Caption;

      // 인쇄조건 넘기기
      IF TRIM(ED_PIMDATE.TEXT) <> '-  -' THEN
        MupmuIPFORM.QRLabel9.CAPTION:='작성일자: '+ ED_PIMDATE.TEXT
      ELSE
        MupmuIPFORM.QRLabel9.ENABLED:=FALSE;

      IF TRIM(Ed_PIScode.Text) <>'' Then
        MupmuIPFORM.QRLabel35.CAPTION:='신고부서: '+ Lb_PISname.Caption
      ELSE
        MupmuIPFORM.QRLabel35.ENABLED:=FALSE;

      IF TRIM(Ed_PIHcode.Text) <>'' Then
        MupmuIPFORM.QRLabel34.CAPTION:='부서/실별: '+ Lb_PIHname.Caption
      ELSE
        MupmuIPFORM.QRLabel34.ENABLED:=FALSE;

      // 인쇄버튼을 누를때
      IF SENDER = BTNPRINT1 THEN
        MupmuiPFORM.QUICKREP1.PRINT
       // 미리보기 버튼을 누를때
      ELSE
        MupmuiPFORM.QUICKREP1.PREVIEW;
  EXCEPT
    MupmuiPFORM.Free;
  END;
end;

2. 퀴리 레포트폼
// 인쇄하기전 POEN
procedure TMupmuiPForm.QuickRep1BeforePrint(Sender: TQuickRep;
  var PrintReport: Boolean);
begin
  QR_Jaryo.Close;
  QR_Jaryo.SQL.Clear;
  QR_Jaryo.SQL.Add(sSQL);
  //접수일자 파라메타 전달
  IF Trim(sLDate) <> '-  -' then
    begin
      QR_Jaryo.ParamByName('PIJDATE1').ASDATETIME:=STRTODATE(sTDate);
      QR_Jaryo.ParamByName('PIJDATE2').ASDATETIME:=STRTODATE(SBDate);
      QR_Jaryo.ParamByName('PIMDATE1').ASDATETIME:=STRTODATE(sLDate);
      QR_Jaryo.ParamByName('PIMDATE2').ASDATETIME:=STRTODATE(sHDate);
      //Qr_Jaryo.ParamByName('PIMdate').AsDateTime := StrToDate(sLDate);
    end;
    Qr_Jaryo.Open;
end;

// 인쇄후 CLOSE
procedure TMupmuiPForm.QuickRep1AfterPrint(Sender: TObject);
begin
  QR_Mupmu.CLOSE;
  QR_Jaryo.CLOSE;
  QR_SAYO1.CLOSE;
end;
1  COMMENTS
  • Profile
    박종철 2008.10.09 19:21
    얼핏 보면

    // 정렬항목 설정
    CASE SORT_PTYPE1.ITEMINDEX OF
    0: sSQL:=sSQL + ' ORDER BY JDate'; //,A.SEQ ';
    1: sSQL:=sSQL + ' ORDER BY Scode'; //, A.SEQ ';
    2: sSQL:=sSQL + ' ORDER BY HCode'; //, A.SEQ ';
    END;


    요 부분에서요 JDate를 조회하질 않기 때문에
    Order By 할수 없다는 것 같은데요.