Q&A

  • 오라클 연동 부분..
안녕하세요..

어제 시간환산 로직 관련 글을 올렸었는데..

삽질한결과 아래 빨간색 부분처럼 구현은 했는데..

Toad로 DB접속하여 조회를 해보면 정상적으로 값이 나옵니다..

근데 꼭 아래 소스를 델파이에서 실행하면 그리드상에 값이 나오질 않네요..

SubStr 쓸때 뭐가 잘못된건가요?

스트링 그리드에 아래 속성들이 보여져야 되는데.. 저 빨간색으로 칠한 출근시간,퇴근시간 속성이

안보여지네요.. 아래 쿼리만으론 분석하기 어려우시겠지만.. 혹시라도 아신다면

지식 공유 부탁드립니다.




  with CDS1,_SQL do begin
    try
      Active:=False;
      ADD('SELECT');
      ADD('A.GDATE          일자           ,');
      ADD('A.SEQ            순번           ,');
      ADD('a.PLAN_LEVEL||'':''||O.C0020      계획단계       ,');
      ADD('a.EXE_LEVEL||'':''||P.C0020       실행단계       ,');
      ADD('A.DEPT_CD        부서           ,');
      ADD('A.DEPT_NM        부서명         ,');
      ADD('C.GONG_CD||'':''||d.c0020    공정명         ,');
      ADD('A.SNO            사번           ,');
      ADD('A.KNAME          성명           ,');
      //ADD('BB.TM_START    출근시간  ,');
      //ADD('BB.TM_CLOSE    퇴근시간  ,');

      ADD(' SUBSTR(REPLACE(REPLACE(AA.STD_TIME + BB.TM_START/24/60,'':'',''''),'' '',''''),1,17) 출근시간,');
      ADD(' SUBSTR(REPLACE(REPLACE(AA.STD_TIME + BB.TM_CLOSE/24/60,'':'',''''),'' '',''''),11,4) 퇴근시간,');
      ADD('BB.CD_WCODE      출근구분  ,');
      ADD('A.PSTART_TIME    계획시간_from  ,');
      ADD('A.PEND_TIME      계획시간_to    ,');
      ADD('A.P_TIME         시간           ,');
      ADD('A.WORK_CONT      작업내용       ,');
      ADD('A.WORK_SU        목표량         ,');
      ADD('A.SSTART_TIME    실작업_from    ,');
      ADD('A.SEND_TIME      실작업_TO      ,');
      ADD('A.S_TIME         시간           ,');
      ADD('A.SWORK_CONT     달성내용       ,');
      ADD('A.SWORK_MI       특이사유       ,');
      ADD('A.WREG_MAN||'':''||E.C0030      계획작성         ,');
      ADD('A.WCON_MAN||'':''||F.C0030      계획승인         ,');
      ADD('A.GREG_MAN||'':''||G.C0030      계획관리작성   ,');
      ADD('A.GREG_MAN2||'':''||H.C0030     계획관리검토   ,');
      ADD('A.GCON_MAN||'':''||I.C0030      계획관리승인 ,');
      ADD('A.REG_MAN        등록자         ,');
      ADD('A.SFRIST_DATE    계획작성       ,');
      ADD('A.SWRITE_DATE    계획승인       ,');
      ADD('A.GFRIST_DATE    계획관리작성       ,');
      ADD('A.GWRITE_DATE    계획관리검토       ,');
      ADD('A.GCON_DATE      계획관리승인       , ');
      ADD('A.WREG_RE_MAN||'':''||J.C0030      결과작성         ,');
      ADD('A.WCON_RE_MAN||'':''||K.C0030      결과승인         ,');
      ADD('A.GREG_RE_MAN||'':''||L.C0030      결과관리작성   ,');
      ADD('A.GREG_RE_MAN2||'':''||M.C0030     결과관리검토   ,');
      ADD('A.GCON_RE_MAN||'':''||N.C0030      결과관리승인 ,');
      ADD('A.SFRIST_RE_DATE    결과작성       ,');
      ADD('A.SWRITE_RE_DATE    결과승인       ,');
      ADD('A.GFRIST_RE_DATE    결과관리작성       ,');
      ADD('A.GWRITE_RE_DATE    결과관리검토       ,');
      ADD('A.GCON_RE_DATE      결과관리승인,'''' 확인 ');
      ADD('FROM    HMU.GUNTAE_TBL A,');
      ADD('(SELECT TRUNC(SYSDATE) STD_TIME FROM DUAL ) AA,');
      ADD('(select DT_WORK,A.NO_EMP,A.TM_START,A.TM_CLOSE,A.CD_WCODE||'':''||B.NM_WCODE CD_WCODE');
      ADD('from HR_WTMCALC@neoelink  A,');
      ADD('(select CD_WCODE,NM_WCODE from HR_WCODE@neoelink');
      ADD('  WHERE CD_COMPANY =''8000'') B ');
      ADD(' where');
      ADD(' A.CD_WCODE = B.CD_WCODE(+) AND');
      ADD(' A.DT_WORK between  '+''''+R[1]+''''+' and '+''''+R[2]+''''+' ');
      ADD('  ) BB ,GONGJONG_GUNTAE_TBL C,CMCD_T7130 D ,' );
      ADD(' ERP2K_PWDS E,ERP2K_PWDS F,ERP2K_PWDS G,ERP2K_PWDS H,ERP2K_PWDS I,' );
      ADD(' ERP2K_PWDS J,ERP2K_PWDS K,ERP2K_PWDS L,ERP2K_PWDS M,ERP2K_PWDS N,' );
      ADD(' (SELECT C0030,C0020 FROM CMCD_T5141 WHERE C0010=''2R'' ) O,  ' );
      ADD(' (SELECT C0030,C0020 FROM CMCD_T5141 WHERE C0010=''2R'' ) P   ');
      ADD('WHERE');
      ADD(' A.SNO =BB.NO_EMP(+) AND');
      ADD(' A.GDATE =BB.DT_WORK(+) AND');
      ADD(' A.WREG_MAN =E.C0010(+) AND');
      ADD(' A.WCON_MAN =F.C0010(+) AND');
      ADD(' A.GREG_MAN =G.C0010(+) AND');
      ADD(' A.GREG_MAN2 =H.C0010(+) AND');
      ADD(' A.GCON_MAN =I.C0010(+) AND');
      ADD(' A.WREG_RE_MAN =J.C0010(+) AND');
      ADD(' A.WCON_RE_MAN =K.C0010(+) AND');
      ADD(' A.GREG_RE_MAN =L.C0010(+) AND');
      ADD(' A.GREG_RE_MAN2 =M.C0010(+) AND');
      ADD(' A.GCON_RE_MAN =N.C0010(+) AND');
      ADD(' A.PLAN_LEVEL =O.C0030(+) AND');
      ADD(' A.EXE_LEVEL =P.C0030(+) AND');
      ADD(' A.SNO = C.SNO(+)  AND c.gong_cd = d.c0010(+) AND ');
      ADD(' A.GDATE between  '+''''+R[1]+''''+' and '+''''+R[2]+''''+' ');
      If R[3]<>'' then Add(' and A.DEPT_CD in '+R[3]);
      If R[4]<>'' then Add(' and A.SNO in '+R[4]);
      If R[5]<>'' then Add(' and d.c0010 in '+R[5]);
      If R[6]<>'' then Add(' and A.PLAN_LEVEL  = ' +''''+R[6]+'''');
      If R[7]<>'' then Add(' and A.EXE_LEVEL  = ' +''''+R[7]+'''');
      IF R[8] = 'ALL' THEN  //EXE 권한
      BEGIN
             //ALLL 조회
      END ELSE IF R[8] = 'DEPT' THEN //SAVE AS 권한
      BEGIN
           Add(' and A.SNO IN  (SELECT SNO FROM  GONGJONG_GUNTAE_TBL WHERE  DEPT_CD  IN     ') ;
           Add('      (SELECT DEPT_CD FROM  GONGJONG_GUNTAE_TBL WHERE SNO = '+''''+FMAIN.ID+''''+' ) )  ')  ;
         { if  (( Fmain.POPKIND =  'B' ) and  (copy(R[9],1,2) = 'A3' ) OR (copy(R[9],1,2) = 'A5')
                 OR (R[9] = 'A604') ) THEN
             Add(' and ( SUBSTR(A.DEPT_CD,1,2) IN ( ''A3'',''A5'') OR A.DEPT_CD = ''A604'' )  AND A.DEPT_CD <> ''A504''  ')
          ELSE
             Add(' and A.DEPT_CD  = ' +''''+R[9]+'''');
          //제조물류자제
          }

      END ELSE BEGIN
          Add(' and A.DEPT_CD  = ' +''''+R[9]+'''');
      END;
      ADD(' ORDER BY  a.GDATE,A.DEPT_CD, C.GONG_CD,A.P_TIME ');

      SQL.TEXT:=_SQL.Text;
//      Clipboard.SetTextBuf(PChar(SQL.Text));
      //SHOWMESSAGE(SQL.TEXT);
      Active:=True;
      QueryToGrid(Grid,ftnone,Fix);
      Result := True;
    except
      if FindChildForm('f9999')= 1 then Application.CreateForm(Tf9999,f9999)
      else f9999.BringToFront;
      f9999.Errlog.Lines.Clear;
      f9999.Errlog.lines.add('====='+Fmain.ID+' Error Generated '+Formatdatetime('YYYYMMDDHH:MM:SS',now)+'=====');
      f9999.Errlog.lines.add(_SQL.Text);
      f9999.Errlog.lines.add('===============================================================');
      Result := False;
    end;
    Active:=False;
  end;
  _SQL.Free;


---------------------------------------------------------------------

안녕하세요.

오라클 DB에서..

480.. 520.. 1303.. 등의 형식으로 출/퇴근 시간이 저장되어지는데..

아래와 같이,

480 : 0800 (08시00분.. 60X8)
520 : 0840 (08시40분.. 60X8 = 480..8시 + 520-480=40분)
1303 : 2143 (21시43분)

YYMM 의 형식으로 조회(SELECT)를 해와야 하는데.. 난감하네요..

답변 부탁드립니다. (__)
1  COMMENTS
  • Profile
    백록화 2012.09.12 23:19

    해당 쿼리는 정상적으로 실행되고 다른 데이터들은 그리드에 뿌려진다면.. 


    QueryToGrid(Grid,ftnone,Fix); 


    이 함수 안에서 뭔가가 빠져 있지 않을까 하는 생각이 드는군요