Q&A

  • 현재 날짜를 입력시 그달의 합계 구하기..
DB는 MSACCESS 이고요..



DateTimePicker를 이용해서 날짜를 클릭했을 때요..



클릭한 날짜가 2001-05-24 라고 하면 2001년 5월 한달동안의 작업량 합계를 구해야 하거든요..



만약 입력한 날짜가 2001-04-24 이면 2001년 4월 1일부터 오널 입력한 마지막 날까지의 작업량 합계를 구해야 하고요..



조건을 날짜로 해서 다른 필드의 합계를 구해야 하는데.. 잘 모르겠어요..



꼭 좀 도와주세요.. ^^



제가 원하는 걸 제대로 전달했는지 모르겠네요..

3  COMMENTS
  • Profile
    ^-_-^ 2001.05.25 01:55
    yo`



    그러니깐 해당월 한달동안 합계를 구하는거죠? ^^;;

    (마지막 입력자료가 20이라도 기간을 30일로 줘도 괜찮다면...)



    쉽네여 ^^;; 팁란이나 찾아보시면 날짜를 조작하는 함수들이 많을껍니다. 걸 함

    보시구여



    일단 여기서 문제는 해당월의 마지막 날짜를 구하는것이겟네요??

    어차피 시작일은 해당월의 1일이니 -_-;;



    function Get_date_DaysInMonth(nYear,nMonth: Integer): Integer;

    const

    DaysPerMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    begin

    Result := DaysPerMonth[nMonth];

    if (nMonth = 2) and IsLeapYear(nYear) then Inc(Result);



    위의 함수는 제가사용하는건데 보시면 아시겟지만, 년도와 월을 전달해주면 마지막

    날짜를 돌려주죠...



    흠..그럼...도움이 되셨길...



    이은영 wrote:

    > DB는 MSACCESS 이고요..

    >

    > DateTimePicker를 이용해서 날짜를 클릭했을 때요..

    >

    > 클릭한 날짜가 2001-05-24 라고 하면 2001년 5월 한달동안의 작업량 합계를 구해야 하거든요..

    >

    > 만약 입력한 날짜가 2001-04-24 이면 2001년 4월 1일부터 오널 입력한 마지막 날까지의 작업량 합계를 구해야 하고요..

    >

    > 조건을 날짜로 해서 다른 필드의 합계를 구해야 하는데.. 잘 모르겠어요..

    >

    > 꼭 좀 도와주세요.. ^^

    >

    > 제가 원하는 걸 제대로 전달했는지 모르겠네요..

  • Profile
    이은영 2001.05.25 02:18
    저기요.. 제가 엄청 초보라서 그걸 어떻게 응용해야 할지 모르겠거든요..



    DB에 있는 날짜와 DateTimePicker의 년와 달을 비교해서 한달동안의 합계를 구해야 하는 거라서 마지막 날짜하고는 상관이 없는 것 같은데.. ^^;;



    만약 5월이면 DB에 있는 5월에 해당하는 작업량의 합계를 구하는 거라서요.



    DB에 있는 날짜형식이 2001-05-24 이런 식이구요..



    글구 여기서 Group by를 써야 할 거 같은데.. 그건 사번으로 묶을 거거든요.



    님이 말씀하신 걸 어떻게 DB와 연결해서 써야 하는지 모르겠어요..



    제가 델파이를 한지 한달밖에 안되서요.. ^^;;



    다시 한번 답변 부탁 드립니다..



    ^-_-^ wrote:

    > yo`

    >

    > 그러니깐 해당월 한달동안 합계를 구하는거죠? ^^;;

    > (마지막 입력자료가 20이라도 기간을 30일로 줘도 괜찮다면...)

    >

    > 쉽네여 ^^;; 팁란이나 찾아보시면 날짜를 조작하는 함수들이 많을껍니다. 걸 함

    > 보시구여

    >

    > 일단 여기서 문제는 해당월의 마지막 날짜를 구하는것이겟네요??

    > 어차피 시작일은 해당월의 1일이니 -_-;;

    >

    > function Get_date_DaysInMonth(nYear,nMonth: Integer): Integer;

    > const

    > DaysPerMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    > begin

    > Result := DaysPerMonth[nMonth];

    > if (nMonth = 2) and IsLeapYear(nYear) then Inc(Result);

    >

    > 위의 함수는 제가사용하는건데 보시면 아시겟지만, 년도와 월을 전달해주면 마지막

    > 날짜를 돌려주죠...

    >

    > 흠..그럼...도움이 되셨길...

    >

    > 이은영 wrote:

    > > DB는 MSACCESS 이고요..

    > >

    > > DateTimePicker를 이용해서 날짜를 클릭했을 때요..

    > >

    > > 클릭한 날짜가 2001-05-24 라고 하면 2001년 5월 한달동안의 작업량 합계를 구해야 하거든요..

    > >

    > > 만약 입력한 날짜가 2001-04-24 이면 2001년 4월 1일부터 오널 입력한 마지막 날까지의 작업량 합계를 구해야 하고요..

    > >

    > > 조건을 날짜로 해서 다른 필드의 합계를 구해야 하는데.. 잘 모르겠어요..

    > >

    > > 꼭 좀 도와주세요.. ^^

    > >

    > > 제가 원하는 걸 제대로 전달했는지 모르겠네요..

  • Profile
    ^-_-^ 2001.05.25 05:11
    yo'



    그러니깐..



    select 사번, sum(작업량) as 합계 from table

    where dt1 >= 시작날자 and dt1 <= 마지막날자

    group by 사번



    이렇게 하면 되잖아요!



    DateTimePicker 에서 우선 년과 월을 추출해야겟죠



    (제가 DateTime형은 잘 안써서 String으로해서 예제를 만들어보겟슴돠...)

    (물론 DateTime타입으로도 얼마든지 날자연산을 할수도 있죠...^^;;)

    ...

    cDt:= DateToStr(DateTimePicker1.DateTime);

    cYear:= Copy(cDt,1,4); //YYYY-MM-DD 형식일때..

    cMonth:= Copy(cDt,6,2);

    nLastDay:= Get_date_DaysInMonth(StrToInt(cYear),StrToInt(cMonth));



    With Query1 Do Begin

    Close;

    Sql.Add('Select 사번,sum(작업량) as 합계 from workdb');

    Sql.Add('where dt1 >= :pDt1 and dt1 <= :pDt2');

    Sql.Add('Group by 사번');

    ParamByName('pDt1').AsString:= cYear+'-'+cMonth+'-'+'01';

    ParamByName('pDt2').AsString:= cYear+'-'+cMonth+'-'+IntToStr(nLastDay);

    Open;

    End;

    ....

    이상임돠 물론 위의 예제에선 테이블에 날자필드가 스트링타입이였을때고요...

    날자타입으로 되어 있다면 형변환을 해주시면 되겟죠!!



    그럼...도움이 되셨길...



    휘리릭~



    bLue bLood.

    이은영 wrote:

    > 저기요.. 제가 엄청 초보라서 그걸 어떻게 응용해야 할지 모르겠거든요..

    >

    > DB에 있는 날짜와 DateTimePicker의 년와 달을 비교해서 한달동안의 합계를 구해야 하는 거라서 마지막 날짜하고는 상관이 없는 것 같은데.. ^^;;

    >

    > 만약 5월이면 DB에 있는 5월에 해당하는 작업량의 합계를 구하는 거라서요.

    >

    > DB에 있는 날짜형식이 2001-05-24 이런 식이구요..

    >

    > 글구 여기서 Group by를 써야 할 거 같은데.. 그건 사번으로 묶을 거거든요.

    >

    > 님이 말씀하신 걸 어떻게 DB와 연결해서 써야 하는지 모르겠어요..

    >

    > 제가 델파이를 한지 한달밖에 안되서요.. ^^;;

    >

    > 다시 한번 답변 부탁 드립니다..

    >

    > ^-_-^ wrote:

    > > yo`

    > >

    > > 그러니깐 해당월 한달동안 합계를 구하는거죠? ^^;;

    > > (마지막 입력자료가 20이라도 기간을 30일로 줘도 괜찮다면...)

    > >

    > > 쉽네여 ^^;; 팁란이나 찾아보시면 날짜를 조작하는 함수들이 많을껍니다. 걸 함

    > > 보시구여

    > >

    > > 일단 여기서 문제는 해당월의 마지막 날짜를 구하는것이겟네요??

    > > 어차피 시작일은 해당월의 1일이니 -_-;;

    > >

    > > function Get_date_DaysInMonth(nYear,nMonth: Integer): Integer;

    > > const

    > > DaysPerMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    > > begin

    > > Result := DaysPerMonth[nMonth];

    > > if (nMonth = 2) and IsLeapYear(nYear) then Inc(Result);

    > >

    > > 위의 함수는 제가사용하는건데 보시면 아시겟지만, 년도와 월을 전달해주면 마지막

    > > 날짜를 돌려주죠...

    > >

    > > 흠..그럼...도움이 되셨길...

    > >

    > > 이은영 wrote:

    > > > DB는 MSACCESS 이고요..

    > > >

    > > > DateTimePicker를 이용해서 날짜를 클릭했을 때요..

    > > >

    > > > 클릭한 날짜가 2001-05-24 라고 하면 2001년 5월 한달동안의 작업량 합계를 구해야 하거든요..

    > > >

    > > > 만약 입력한 날짜가 2001-04-24 이면 2001년 4월 1일부터 오널 입력한 마지막 날까지의 작업량 합계를 구해야 하고요..

    > > >

    > > > 조건을 날짜로 해서 다른 필드의 합계를 구해야 하는데.. 잘 모르겠어요..

    > > >

    > > > 꼭 좀 도와주세요.. ^^

    > > >

    > > > 제가 원하는 걸 제대로 전달했는지 모르겠네요..