Q&A

  • 급해여..급해!!! insert 버그예여...
급여를 계산하는 프로그램을 짜고 있습니다.

While을 이용해서 사원전체의 급여를 돌리기 싫어서 insert Select 를 이용해서

한꺼번에 넣으려고 합니다.

근데 한달에 사원의 데이터가 한번들어가야하는데...자꾸 같은데이터가 여러번 들어가요...

그래서 사원번호의 데이터를 중복제거했습니다.---> distinct 사원.S_No

P_ilsu에 (주월차.J_ilsu-(일수.Ji_Min + 일수.Ji_yeh))를 insert 하려하니까.. 또 여러번 들어가지더라구요.. 딱 2번씩 더 들어가있습니다. 총 3개의 중복데이터가 들어가져요...

고수님들... 이거 대체 어케된걸까요?







With Paysql do begin

Close;

Sql.Clear;

Sql.Add('Insert into 급여');

Sql.Add('(P_No,P_Ilsu,P_Month,P_Jucha,P_Moncha,P_Tday,');

Sql.Add('P_TPay,P_pay,P_Wi,P_Sub,P_Che)');

Sql.Add('Select distinct 사원.S_No,(주월차.J_ilsu-(일수.Ji_Min + 일수.Ji_yeh)),주월차.J_Month,');

Sql.Add('주월차.J_Jucha,주월차.J_Moncha,');

Sql.Add('((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)-');

Sql.Add('(Round((일수.Ji_jiil+일수.Ji_joil)/3))),');

Sql.Add('((((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)-(Round((일

수.Ji_jiil+일수.Ji_joil)/3)))*직급.F_Pay)+(5000*주월차.J_Ilsu)),');

Sql.Add('(((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)');

Sql.Add('*직급.F_Pay)');

Sql.Add('+(5000*주월차.J_Ilsu)-(국민연금.N_Pay+건강보험.H_Pay)),');

Sql.Add('(((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)');

Sql.Add('*직급.F_Pay)+(5000*주월차.J_Ilsu))*0.005,');

Sql.Add('(국민연금.N_Pay+건강보험.H_Pay),');

Sql.Add('"재직"');

Sql.Add('from 사원,주월차,직급,국민연금,건강보험,일수');

Sql.Add('Where 주월차.J_Month like'+#39+str+#39);

Sql.Add('and 사원.S_No = 주월차.J_No');

Sql.Add('and 직급.F_code = 사원.S_Tcheck');

Sql.Add('and 사원.S_Boss=True');

Sql.Add('and 국민연금.N_Code=사원.S_Np');

Sql.Add('and 건강보험.H_Code=사원.S_Nhi');

Sql.Add('and 일수.Ji_No=사원.S_No');

ExecSQL;

end;



1  COMMENTS
  • Profile
    조복기 2001.06.15 09:50


    테이블명이 한글로 되어있어서 소스를 보기 무척 난해하네요^^

    전 필드명인줄 알았거든여..

    insert select문장을 사용하실때 중복으로 데이타가 들어갈 경우에는

    거의 select문이 만들어지는 과정의 잘못이라고 보시면 됩니다.

    조인되는 과정에서 중복된 자료가 나올수 있는만큼

    디버깅하실때 select부분만 독립적으로 테스트해보셨음 합니다.

    글구..아래처럼 긴내용의 쿼리문같은 경우에는

    프로시저로 작성을 하시거나, 아님 sql.add대신

    sql.text기능을 사용하셔서 한번에 입력하시는방법도

    나중에 유지보수에 편리하실거라 생각이 듭니다..

    참고로 db쪽 에러가 날경우에는 어떤 RDB인지도 같이 말씀해주시면

    답변을 하시는분들이 편하실거라 생각이 드네요^^



    그럼 수고하세요..



    info wrote:

    > 급여를 계산하는 프로그램을 짜고 있습니다.

    > While을 이용해서 사원전체의 급여를 돌리기 싫어서 insert Select 를 이용해서

    > 한꺼번에 넣으려고 합니다.

    > 근데 한달에 사원의 데이터가 한번들어가야하는데...자꾸 같은데이터가 여러번 들어가요...

    > 그래서 사원번호의 데이터를 중복제거했습니다.---> distinct 사원.S_No

    > P_ilsu에 (주월차.J_ilsu-(일수.Ji_Min + 일수.Ji_yeh))를 insert 하려하니까.. 또 여러번 들어가지더라구요.. 딱 2번씩 더 들어가있습니다. 총 3개의 중복데이터가 들어가져요...

    > 고수님들... 이거 대체 어케된걸까요?

    >

    >

    >

    > With Paysql do begin

    > Close;

    > Sql.Clear;

    > Sql.Add('Insert into 급여');

    > Sql.Add('(P_No,P_Ilsu,P_Month,P_Jucha,P_Moncha,P_Tday,');

    > Sql.Add('P_TPay,P_pay,P_Wi,P_Sub,P_Che)');

    > Sql.Add('Select distinct 사원.S_No,(주월차.J_ilsu-(일수.Ji_Min + 일수.Ji_yeh)),주월차.J_Month,');

    > Sql.Add('주월차.J_Jucha,주월차.J_Moncha,');

    > Sql.Add('((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)-');

    > Sql.Add('(Round((일수.Ji_jiil+일수.Ji_joil)/3))),');

    > Sql.Add('((((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)-(Round((일

    > 수.Ji_jiil+일수.Ji_joil)/3)))*직급.F_Pay)+(5000*주월차.J_Ilsu)),');

    > Sql.Add('(((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)');

    > Sql.Add('*직급.F_Pay)');

    > Sql.Add('+(5000*주월차.J_Ilsu)-(국민연금.N_Pay+건강보험.H_Pay)),');

    > Sql.Add('(((주월차.J_Ilsu+주월차.J_Jucha+주월차.J_Moncha)');

    > Sql.Add('*직급.F_Pay)+(5000*주월차.J_Ilsu))*0.005,');

    > Sql.Add('(국민연금.N_Pay+건강보험.H_Pay),');

    > Sql.Add('"재직"');

    > Sql.Add('from 사원,주월차,직급,국민연금,건강보험,일수');

    > Sql.Add('Where 주월차.J_Month like'+#39+str+#39);

    > Sql.Add('and 사원.S_No = 주월차.J_No');

    > Sql.Add('and 직급.F_code = 사원.S_Tcheck');

    > Sql.Add('and 사원.S_Boss=True');

    > Sql.Add('and 국민연금.N_Code=사원.S_Np');

    > Sql.Add('and 건강보험.H_Code=사원.S_Nhi');

    > Sql.Add('and 일수.Ji_No=사원.S_No');

    > ExecSQL;

    > end;

    >

    • info
    • 2001.06.15 03:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조복기
      2001.06.15 09:50
      테이블명이 한글로 되어있어서 소스를 보기 무척 난해하네요^^ 전 필드명인줄 알았거든여.. insert sel...
    • 권순택
    • 2001.06.15 03:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2001.06.15 03:42
      라이브러리(DLL)로 만드셔서 Dll을 호출하면 되겠죠... 권순택 wrote: > 안녕하세요 > > 아시는 ...
    • 써니
    • 2001.06.15 03:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 쿠쿠리
    • 2001.06.15 02:01
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Ziker
      2001.06.21 01:05
      안녕하세요 Ziker 입니다. 아래 이경문님께서도 글 올려 주셨듯이, 델파이에서 사이즈를 기대 하기란 힘...
    • 이경문
      2001.06.17 09:40
      가슴아픈 얘기지만 Borland계열이 제품으로는 200k도 작은 용량입니다. 흑흑흑... 방법에 대해 많이 고민...
    • 쿠쿠리
      2001.06.19 01:14
      그럼 볼랜드 계열이 아닐 경우엔 어떤가요? 뭐 VC++이나 VB나 썼을때는 용량 줄일 방법이 있는지... 급...
    • 이경문
      2001.06.19 01:23
      VB는 잘 모르겠구요(아무래도 VB는 dll없으면 안돌아 가는 놈이라서 예상컨데 델파이 product보다 크기가 ...
    • 아폴론
    • 2001.06.15 01:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정종섭
      2001.06.15 19:28
      아폴론 wrote: > 델가족 여러분중 오라클 고수님들께 질문 합니다. > > 델5와 오라클8i를 이용해 서버...
    • 아폴론
      2001.06.16 03:05
      어떻게 하면 아카이브모드를 노아카이브모드로 바굴수 있나요? > 델파이 에서 외부 명령어를 실행하면...
    • XXX
    • 2001.06.15 01:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Lee
      2001.06.15 01:52
      group by 문장에서는 보통 max라는 함수를 잘 사용하지 않는것 같은데 정확히는 모르겠구요 제가 일때...
    • 초보2
    • 2001.06.15 01:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • SHANS
      2001.06.19 18:21
      그 에러는 타프로세스의 영역을 침범했을 경우등에 나타나는 에러로서 치명적인 에러입니다. 즉, 이 에러...
    • 이재식
      2001.06.15 02:24
      이렇게 ..... unprepare를 빼버리세요. 그리고, prepare앞에 이렇게 해보세요 if Prepared then ...
    • 델초보
    • 2001.06.15 01:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 토맛토
      2001.06.15 10:02
      그림위에 마우스로 사각형의 도형을 드래그 하고자 하시는 것인가요? 이때 그림이 무지하게 깜박거린다는 ...
    • 델맹맹
    • 2001.06.15 00:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.06.15 00:31
      안녕하세요. 최용일입니다. 굉장히 많이 나오는 질문이네요... 빠른 답변을 바란다면 항상 먼저 검색해...
    • 델맹맹
      2001.06.15 00:34
      최용일 wrote: > 안녕하세요. 최용일입니다. > > 굉장히 많이 나오는 질문이네요... 빠른 답변을 바란...
    • 최용일
      2001.06.15 00:19
      안녕하세요. 최용일입니다. 툴버튼의 Tag속성에 2번째를 표시하는 숫자를 넣어서 Sender파라매터를 이용...
    • Ziker
      2001.06.15 00:22
      최용일 wrote: > 안녕하세요. 최용일입니다. > > 툴버튼의 Tag속성에 2번째를 표시하는 숫자를 넣어서 ...
    • 정세민
    • 2001.06.14 23:29
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 박진훈
      2001.06.15 04:42
      1.멀티플랫폼 지원 여부 델파이는 윈도용이구, 리눅스에서는 비슷한 카일릭스가 있죠, 파워빌더는 윈...
    • 최용일
      2001.06.14 23:47
      안녕하세요. 최용일입니다. 1. 지원 (유닉스플랫폼에는 Kylix를 쓰시면 됩니다) 2. 아주 잘 지원 3. ...
    • 정세민
      2001.06.15 00:41
      빠른 답변 감사드립니다. 다름이 아니라 Kylix에 대한 부분인데요. 이거는 Delphi하구는 다른 Tool로 알...
    • 최용일
      2001.06.15 00:47
      다른 툴이지만 Kylix는 유닉스용 델파이라고 생각하시면 됩니다. 특별히 윈도우플랫폼에만 적용되는 코...
    • 정세민
      2001.06.15 02:41
      ..
    • 정우
    • 2001.06.14 22:44
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Lee
      2001.06.14 23:28
      이 방법은 어떨까요? 한개의 쿼리를 활용하세요. Select 팀.팀명, 사원.사번, 사원....
    • blackjewel
      2001.06.15 01:02
      답변감사해여^^; 그런데 질문이...... Query문 안에 case문이 사용가능한가여? > case whe...
    • Lee
      2001.06.15 01:39
      말씀하신데로 case문입니다. case when 출근부.일자='01' and 출근부.출근확인='o' then 'O' else 'X' e...
    • 최용일
      2001.06.15 00:00
      안녕하세요. 최용일입니다. 스트링그리드에서 쓰는 TInplaceEdit를 제어해서 하는 방법두 있겠구... 생...
    • 초보님
    • 2001.06.14 21:49
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 윤광희
      2001.06.16 22:53
      디플로이 옵션에서 include file version을 체크하시구 디플로이하면 HTML 만들어지죠? 거기에 버전 표시...
    • 나그네
      2001.06.16 04:49
      초보님 wrote: > ACTIVEXFORM으로 만든 프로그램을 을 익스플로우로 잘 나옵니다... > > 근데...갱신은...
    • 최용일
      2001.06.15 00:39
      안녕하세요. 최용일입니다. Web Deployment Options에서 Include file version number 와 Auto incremen...
    • 초보님
      2001.06.15 00:52
      확인했어요........그래도 않되요........ㅜ.ㅜ 최용일 wrote: > 안녕하세요. 최용일입니다. > > We...
    • 최용일
      2001.06.15 01:32
      되는데.... 쩝 Project/Options메뉴의 Version Info탭에서 버전을 크게 올려보세요... 아마두 예전에...
    • 최용일
      2001.06.15 00:07
      안녕하세요. 최용일입니다. 흠~ FindWindow로 다이얼로그 찾아서 다이얼로그의 버튼에 마우스 이벤트를 ...
    • 궁금
    • 2001.06.14 21:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 바람개비
      2001.06.14 23:43
      유닛컴파일후 생기는 파일입니다. 해당 유닛파일(compute.pas)이 존재하지 않거나 선언된 유닛이 없다는 ...
    • 시빌더
    • 2001.06.14 20:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • kuma
      2001.06.15 04:37
      시빌더 wrote: > RxRichEdit 에서 선이나 Box를 그리는 방법아시는분 > 좀 갈쿄주셔요... 간단한 코드...
    • 이성찬
      2001.06.16 20:55
      IndexFieldNames := 'field1;field2';