Q&A

  • Query를 활용하여 DBGrid에 표현하는 방법에 대한 문제입니다
고수님들 보아 주세요.
  이곳에 몇번의 질문을 올렸는데 아시는 분이 적은 탓인지 아님 제가 질문을 잘못
올리는 것인지.. 모쪼록 다시한번 고수님들의 조언을 듣고자 합니다.
  전 현재 Delphi 4.0과 Paradox DB를 사용하여 제품 입/출고 프로그램을 하고 있습니다.
  Query를 활용하여 DBGrid에 표현하는 방법에 대한 문제입니다.
  제가 Table 설계를 잘못한 것이라면 Table 설계에 대한 조언을 부탁드리며 또는
Query 구성을 잘못한 것이라면 Query 부분을 조언을 해주시면 감사드리겠습니다.

#.Table : Mast
dday (A:10) : 입출고 일자
sqno (N)    : 일련번호
iosw (A:1)  : 입고(-)/출고(+)
pcod (A:5)  : 제품코드
qtyn (N)    : 수량
cost ($)    : 단가
amtn ($)    : 금액

#.SQL Query
select dday, sqno, iosw, pcod, qtyn, cost, amtn
  from mast
union
select dday, 999, 'T', '     ', sum(qtyn), 0, sum(amtn)
  from mast
group by dday
union
select '  총  계  ', 9999, 'T', '     ', sum(qtyn), 0, sum(amtn)
  from mast

#.DBGrid
2003-01-01/   1/-/A0101/ 15/ 1000/ 15000
2003-01-01/   2/-/A0101/ 20/ 2000/ 40000
2003-01-01/   3/+/A0101/ 10/ 1200/ 12000
2003-01-01/   4/+/A0101/ 15/ 1200/ 18000
*2003-01-01/ 999/T/     / 60/    0/ 85000
2003-01-02/   1/-/A0101/ 20/ 1000/ 20000
2003-01-02/   3/+/A0101/ 10/ 1200/ 12000
2003-01-02/   4/+/A0101/ 15/ 1200/ 18000
*2003-01-02/ 999/T/     / 45/    0/ 50000
*  총  계  /9999/T/     /105/    0/135000

  제가 구현한 SQL Query문으론 위와 같은 DBGrid가 생성되는데...
전 다음과 같이 만들고 싶습니다.

#.DBGrid (New)
2003-01-01/   1/-/A0101/ 15/ 1000/ 15000
2003-01-01/   2/-/A0101/ 20/ 2000/ 40000
2003-01-01/   3/+/A0101/ 10/ 1200/ 12000
2003-01-01/   4/+/A0101/ 15/ 1200/ 18000
*2003-01-01/ 999/T/     /-10/    0/-25000
2003-01-02/   1/-/A0101/ 20/ 1000/ 20000
2003-01-02/   3/+/A0101/ 10/ 1200/ 12000
2003-01-02/   4/+/A0101/ 15/ 1200/ 18000
*2003-01-02/ 999/T/     /  5/    0/ 10000
*  총  계  /9999/T/     / -5/    0/-15000

  고수님들 저의 고민을 해결해 주실수 있는 분은 어디에 계신지요?
전 다소 바쁘지만... 저의 Table 설계부분이 잘못된 것이라면 어떤식으로
설계를 해야 할지..아님 Query 구현 방안을 알려 주시면 고맙겠습니다.

  많은 고수님들의 아낌없는 조언을 부탁드립니다.
3  COMMENTS
  • Profile
    이병훈 2003.04.09 10:50
    안녕하세요.

    전 이렇게 함 풀어 봤습니다.

    CREATE TABLE TMP1 (
       dday VARCHAR2(10),
       sqno NUMBER,
       iosw VARCHAR2(1),
       pcod VARCHAR2(5),
       qtyn NUMBER,
       cost NUMBER,
       amtn NUMBER
    )
    /

    INSERT INTO TMP1 VALUES('2003-01-01', 1, '-', 'A0101', 15, 1000, 15000);
    INSERT INTO TMP1 VALUES('2003-01-01', 2, '-', 'A0101', 20, 2000, 40000 );
    INSERT INTO TMP1 VALUES('2003-01-01', 3, '+', 'A0101', 10, 1200, 12000 );
    INSERT INTO TMP1 VALUES('2003-01-01', 4, '+', 'A0101', 15, 1200, 18000 );
    INSERT INTO TMP1 VALUES('2003-01-02', 1, '-', 'A0101', 20, 1000, 20000 );
    INSERT INTO TMP1 VALUES('2003-01-02', 3, '+', 'A0101', 10, 1200, 12000 );
    INSERT INTO TMP1 VALUES('2003-01-02', 4, '+', 'A0101', 15, 1200, 18000 );

    SELECT DECODE(J, 3, '합계', DDAY)
         , DECODE(J, 3, '합계', 2, '중계', SQNO)
         , MIN(IOSW)
         , MIN(PCOD)
         , SUM(IOSW||QTYN)
         , SUM(IOSW||COST)
         , SUM(IOSW||AMTN)
      FROM TMP1, (SELECT 1 J FROM DUAL
                  UNION ALL
                  SELECT 2 FROM DUAL
                  UNION ALL
                  SELECT 3 FROM DUAL
                  )
    GROUP BY DECODE(J, 3, '합계', DDAY)
         , DECODE(J, 3, '합계', 2, '중계', SQNO)

    이렇게 하면 일단 결과는 나오는데. 약간 해결 하지 못한 것은..

    각 로우마다 '-' 넘이 붙어서 나오네여. ^^;;

    지금은 시간이 늦어서리.. 나중에 시간이 나면... 다시.. ^^;;

    그럼. 수고하세여. ~


  • Profile
    오선배 2003.04.06 23:23
    델마당에 있어요

    그렇게   ????
  • Profile
    타락천사 2003.04.06 22:29
    안녕하세여.. 타락임다..

    답변이 없는 것은, 쿼리 사용법의 문제가 아니라고 보기 때문입니다.

    이런 종류의 Summary 는 기능을 지원해 주는 그리드를 사용하길 권합니다.
    제가 써본 걸로는 "익스프레스 퀀텀 그리드"가 있습니다.(점 비싸죠.)
    글 올라오는 걸로 봐서, "리얼그리드" 와 "어드밴스 그리드" 도 있더군요.

    다 안되고, Summary 를 직접 내야 한다면

    안보이는 TStringGrid 에 결과셋을 뿌린다음에, 원하는 Summary 를 얻은 다음에, TDBGrid 에 결과셋을 뿌리는 방법을 쓰세여..

    쿼리 여러번 날리는 것보다, 수행속도가 좋습니다.

    즐푸하세여..

    타락천사..


    • 이정택
    • 2003.04.07 22:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Drop
      2003.04.08 03:38
      안녕하세요. 주삼식입니다. 있는데 못 찾은 것 뿐이네요. MaxPage를 설정하셔야 되구요. FromPage, T...
    • 박상호
    • 2003.04.07 21:48
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김희곤
    • 2003.04.07 21:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.04.08 00:06
      안녕하세요. 최용일입니다. 걍 ShellExecute로 실행하세요... uses     ShellA...
    • KDDG_Drop
      2003.04.08 04:31
      안녕하세요. 주삼식입니다. 꼭 그 프로시져를 넘길려고 하지마시구요. 특정 사용자 함수를 만듭니다. ...
    • 최남선
      2003.04.08 00:08
      방금 어떤 분이 답변을 해주셨다가 지우셨네여... 비슷한 야그인데... Incompatible Type 에러가 나는 이...
    • 타락천사
      2003.04.07 21:41
      안녕하세요. 타락임다.. 에러로 봐서.. 두 프로시저의 타입이 안맞는 것 같습니다. 즉, Comport.OnRx...
    • 김민수
      2003.04.07 22:09
      Comport.OnRxChar:=ComportRxChar(nil,count) 같이 nil을 넘겼는데도 컴파일 에러가 나네요... 다시 한번...
    • nilriri™
      2003.04.07 18:35
      좌측에 Left로 Panel하나 놓고 우측에 Client로 Panel 하나 놓고 촤측 Panel위에 트리뷰를 Client로 놓고...
    • SEN
      2003.04.07 18:21
      showmessage(IntToStr(i)); 하시면 메세지 보실수 있습니다~
    • 정재호
    • 2003.04.07 04:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.04.07 19:17
      안녕하세요 하얀까마귀 입니다. 제가 그책을 안봐서 정확한건 아니겠지만 아마  일반적인 윈...
    • 박헤정
    • 2003.04.07 02:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신연근
      2003.04.07 18:43
      답변하는 사람들은 전혀 급하지 않느뎅..^^ keypreview를 true로 하시구요 프로퍼티에서 해도 되구 직접...
    • SEN
      2003.04.07 18:33
      F3 의 VirtualKey 는 VK_F3 입니다. KeyDown 이벤트에서 쓰시면 될것같습니다~~
    • 조태근
    • 2003.04.06 23:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.04.07 18:54
      Visible 의 속성 True False 가 안되면 크기를 변환시켜줘 보세요. 예를 들어 width =0 height=0 으로 주...
    • 장태원
      2003.04.07 18:56
      폼을 Create 해서 showmodal 하여 주십시오. 보통 Create 문장이 project 파일에 삽입되어잇는데..이부분...
    • Mountain
    • 2003.04.06 21:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이병훈
      2003.04.09 10:50
      안녕하세요. 전 이렇게 함 풀어 봤습니다. CREATE TABLE TMP1 (    dday VARCHAR2(10)...
    • 오선배
      2003.04.06 23:23
      델마당에 있어요 그렇게   ????
    • 타락천사
      2003.04.06 22:29
      안녕하세여.. 타락임다.. 답변이 없는 것은, 쿼리 사용법의 문제가 아니라고 보기 때문입니다. 이런 ...
    • 궁금이
    • 2003.04.06 04:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.04.07 19:08
      ListBox1.ItemIndex := ListBox1.count-1;
    • 이우준
    • 2003.04.06 03:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2003.04.06 20:02
      안녕하세여.. 타락임다..ㅡㅡ 5 : if ADOQuery.Recordcount <= 0 then 를 if ADOQuery1.Recordcou...
    • 이우준
      2003.04.08 05:58
      ㅜ.ㅜ 흑.. 5 : <- 요고는 설명하려고 제가 임의로 넣은건뎅.. ㅠ.ㅠ 실제 코드에는 없어요.. ㅠ.ㅠ ...
    • 이승근
    • 2003.04.06 01:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.04.07 19:11
      책을 사세요. 질문하신것들은 데이타베이스를 전혀 모르시는듯 합니다. 알고자하는것만 물어서 답을 ...
    • 그냥
    • 2003.04.05 20:55
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2003.04.08 00:22
      ^^ 그거는 DirectX가 아니구 DirectShow입니다. Show는 기본적으로 DirectX의 기반위에 있기는 하지만은....
    • 그냥
      2003.04.08 02:34
      캬 박상윤님..DX쪽은 박상윤님의 답글이 많더니.. 역쉬 예상대로 박상윤님이 답변을 해 주시네요..^^ Dir...
    • 박상윤
      2003.04.10 00:11
      감솨 합니다.... msn 쓰구 잇으니  아뒤 멜이나 쪽지로 날려 주세여... 그리구 시간내서 한번 ...
    • 그냥
      2003.04.10 06:54
      ... 국방의 의무를 하러...8월에 간다..ㅋㅋ
    • SEN
      2003.04.07 19:01
      procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin    if (key >= #...
    • 정욱
    • 2003.04.05 05:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 벤지
      2003.04.05 06:52
      bin 안에 bpl 를 선택하시면 Tab 에 나타나구요오 다른 bpl 들도 지원은 하지만 Tab 에만 안 나타날뿐이예...
    • 타락천사
      2003.04.05 05:58
      안녕하세요. 타락임다.. 델파이의 리소스 편집기라고 붙어 있는 ImageEditor는 별로 입니다. 16 Bit 시...
    • 벤지
      2003.04.05 06:09
      답변 진심으로 감사 들입니다. 유명하신 타락천사님에게 설명 받으니 기분이 좋은데요 ( 거의 아~부~지요...
    • 타락천사
      2003.04.05 10:49
      안녕하세요. 타락임다.. VC++ 쪽으로는 기본 툴만 씁니다. 델파이는 컴파일러와 디버거로 쓰고, 다른...
    • 벤지
      2003.04.06 00:32
    • 박헤정
    • 2003.04.05 04:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 벤지
      2003.04.05 05:10
      방법은 많거든요오 1) 리소스를 로딩해서 사용하는 방법하구요    implementation  ...
    • 우소
      2003.04.07 23:44
      Beep 간단히 삐 소리가 나구요.. MessageBeep함수가 있음 ..좀더 다양함..