안녕하십니까 전봉수 입니다.
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;
// 정렬항목 설정
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 할수 없다는 것 같은데요.