Q&A

  • SQL문.. 좀 봐주세요
select a.*, b.ga_clnm,b.ga_aesb,b.ga_aedv,b.ga_upcd from cunggu a, gamsdb b
where (a.cg_krno = b.ga_tpcd||b.ga_year||b.ga_mnth||b.ga_srno)
  and (a.cg_date between '2003-01-01' and '2003-01-31')  
  and (substr(a.cg_krno,1,1) = 'G') and (a.cg_clcd = '1010')

SQL문인데요... Open을 못하네요... 필드명이 틀린것은 아니구요..
먼가 논리가 안맞는듯..and (a.cg_clcd = '1010')요넘을 빼면 됩니다.
그렇다고 요넘이 문제인듯하지는 않고요 논리가 안맞는 것 같아요...
고넘 넣구요 (a.cg_krno = b.ga_tpcd||b.ga_year||b.ga_mnth||b.ga_srno)요넘을 빼면
됩니다.
에궁 금방 끝낼 줄 알았는데... 몇시간째 이것 가지고 꿍꿍대네요... 허참...
5  COMMENTS
  • Profile
    아폴론 2003.02.18 08:37
    a.cg_krno : G200301001 ...이런 형식의 Char문자가 들어갑니다
    a.cg_date : 2003-01-31 ...이런 형식의 Char문자가 들어갑니다.
    a.cg_clcd : 1010       ...이런 형식의 Char문자가 들어갑니다.

    b.ga_tpcd : G 또는 C.....  이런 형식의 Char 문자가 들어갑니다.
    b.ga_year : 2003       ... 이런 형식의 Char 문자가 들어갑니다.
    b.ga_mnth : 01, 05     ... 이런 형식의 Char 문자가 들어갑니다.
    b.ga_srno : 001, 002   ... 이런 형식의 Char 문자가 들어갑니다.


    select a.*, b.ga_clnm,b.ga_aesb,b.ga_aedv,b.ga_upcd from cunggu a, gamsdb b
    where (a.cg_krno = b.ga_tpcd||b.ga_year||b.ga_mnth||b.ga_srno)
      and (a.cg_date between '2003-01-01' and '2003-01-31')  
      and (substr(a.cg_krno,1,1) = 'G')  
    Open
    //위 SQL문은 잘 됩니다.

    select a.*, b.ga_clnm,b.ga_aesb,b.ga_aedv,b.ga_upcd from cunggu a, gamsdb b
    where (a.cg_krno = b.ga_tpcd||b.ga_year||b.ga_mnth||b.ga_srno)
      and (a.cg_date between '2003-01-01' and '2003-01-31')  
      and (substr(a.cg_krno,1,1) = 'G')
      and (a.cg_clcd = '1010') <====================이넘들어가면 뭔가 논리가 안맞나? 에러나요
    Open
    //위 SQL문은 Open에서 모래시계로 바뀌며 프로그래밍 다운됩니다.얼어버리는 거겠죠?
  • Profile
    이중철 2003.02.18 11:24
    마지막 필드 추가했다고 논리가 맞지 않는것은 아니에요.

    단지 모래시계만 나왔다는 것은 Query가 최적해가 아니라는데 문제가

    있는거죠..

    제가 다시 정리해서 옮길께요

    제대로된 DB 해본지도 꽤 되어서 될지 안될지 잘 모르겠지만

    제가 하는 방법이 어떤것인지 잘 보세요..

    select a.*, b.ga_clnm,b.ga_aesb,b.ga_aedv,b.ga_upcd from cunggu a, gamsdb b
    where (a.cg_krno = b.ga_tpcd||b.ga_year||b.ga_mnth||b.ga_srno)
    and (a.cg_date between '2003-01-01' and '2003-01-31')  
    and (substr(a.cg_krno,1,1) = 'G') and (a.cg_clcd = '1010')

    이게 님께서 하신 방법이죠..

    쿼리문을 보면 cunggu 테이블을 한정해서 gamsdb의 데이타를 추출하는

    식 입니다.

    자 보세요..

    목적 : cunggu 테이블을 한정해서 gamsdb의 데이타를 추출

    방법 : cunggu 테이블의 데이타를 인덱스를 쫒아 먼저 챃고

             다시 gamsdb의 데이타를 인덱스를 쫗아 찾자..

    도구 : 인덱스가 설정되어 있는가?

             cunggu 테이블에는 cg_clcd, cg_date 로

             gamsdb테이블에는 ga_tpcd, ga_year, ga_mnth , b.ga_srno

             로 설정되어 있어야 합니다.

    Query 문을 만들자

        select a.*, b.ga_clnm,b.ga_aesb,b.ga_aedv,b.ga_upcd
        from cunggu a, gamsdb b
        where
          (
          a.cg_clcd = '1010' and
          a.cg_date between '2003-01-01' and '2003-01-31' and
          substr(a.cg_krno,1,1) = 'G'
          )
          and
          (
          b.ga_tpcd = substr(a.cg_krno,1,1) and
          b.ga_year = substr(a.cg_krno,2,4) and
          b.ga_mnth= substr(a.cg_krno,6,2) and
          b.ga_srno= substr(a.cg_krno,8,3)
          )

    이런식으로 해야 인덱스가 제대로 먹혀 듭니다.

    굳이 답만 가르쳐드리지 않고 절차를 밣은 것은

    DB에 대한 이해를 돕고자 함에 있습니다. 그럼 안녕히..

  • Profile
    아폴론 2003.02.18 19:31
    이중철님 감사합니다.
    설명까지 해 주시고...덕분에 해결이 되었고요
    앞으론 SQL문을 좀더 신중히, 차근차근 접근해 보도록 하겠습니다.
    정말 감사합니다.
  • Profile
    이중철 2003.02.18 05:28
    음 데이타 베이스가 오라클인것 같은데...
    하여간..
    님께서 쿼리를 쓰신것 보고는 판단이 안서요..
    왜냐 데이타베이스 구조를 모르니 ^^
    그러나 추측은 가능해요..
    님께서 논리적으로 맞다고 생각되시면..
    원인은 NULL입니다.
    즉,
    a.cg_krno = b.ga_tpcd||b.ga_year||b.ga_mnth||b.ga_srno
    에서
    필드 한개라도 NULL이 들어가 있으면
    위 항목은 FALSE 입니다.
    그것이 아니라면 추가적으로 또하나..
    b.ga_mnth 필드가
    9 이하달이 2char가 아니라 1일수도 있다..
    그런식 같은데요.
    하여간 먼저 gamsdb 테이블의 조인필드에 널이 있는가 확인해보세요..

  • Profile
    열심히 2003.02.18 04:32
    어떤 오류인지 알려주실래요?

    델파이에서만 오픈이 안되는건지..

    아님 다른데서도 안되는지...


    • 진돌
    • 2003.02.19 02:35
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.19 02:58
      SizeOf 함수는 데이터 형의 크기가 반환됩니다. 님이 원하시는 것은 StrLen 이겠군여. 널값을 제외한...
    • 진돌
      2003.02.19 03:04
      그렇다면 Socket 통신을 할때 aaa : String; ________________________________ | size | &nb...
    • 구창민
      2003.02.19 03:22
      무슨 질문인지를 모르겠군여..^_^ 님이 처한 상황을 제가 알수 없기 때문입니다. 다만, 통신을 할때 ...
    • 한원희
      2003.02.19 20:35
      안녕하세요. 한원희입니다. GetActivateWindow API를 이용해 보세요. 그리고, WindowState 속성도 검사...
    • 임옥섭
      2003.02.19 01:37
      vb의 직접실행창 보다는 불편하지만. 델파이도.. Evaluate/Modify 메뉴가 있습니다. 원하는 변수/식 에다...
    • 최용일
      2003.02.19 01:25
      안녕하세요. 최용일입니다. Watch Window를 이용하세요... Ctrl+F5던가... ^^ 항상 즐코하세요...
    • cell
    • 2003.02.19 01:11
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.19 01:32
      이렇게 해 보세여.. procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char); begin &n...
    • cell
      2003.02.19 01:41
      ..
    • 김기문
    • 2003.02.19 00:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.02.19 01:47
      안녕하세요. 최용일입니다. 델파이 메뉴의 Help/Windows SDK에서 찾아보세요... 그냥 F1누르면 델파이에...
    • 전원이
    • 2003.02.19 00:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.02.19 02:01
      안녕하세요. 최용일입니다. InPortB, OutPortB는 델파이에 없네요... 걍 만들어 쓰세요... procedure...
    • 한원희
      2003.02.19 00:11
      안녕하세요. 한원희입니다. Rx 패키지를 설치하면 됩니다. 자료실에 Rx 패키지가 있으니, 받아서 설치...
    • 김현승
    • 2003.02.18 21:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • △┫┃▒┃COLON
      2003.02.18 23:50
      안녕하세요... 세미콜론입니다. 저도 초보라 잘은 모르지만.... *.DCU  파일은 컴파일시에 자동...
    • Sean
    • 2003.02.18 20:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 신승욱
      2003.02.19 01:42
      이렇게 해보세요..안돼면..저도 몰래요.. close; sql.clear; sql.add('insert into ' + temp_table + '(...
    • 구창민
      2003.02.18 21:11
      DB 질문을 하실때는, 사용하시는 DB 가 먼지를 알려주시면 양질의 답변을 얻으실 수 있을 것입니다. ...
    • Sean
      2003.02.18 23:56
      네.... 답변 감사합니다. DB는 Access이고요... 제가 질문의 내용이 조금 미흡한거 같네요. 지금...
    • 강보춘
    • 2003.02.18 20:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.18 20:57
      Hint Window 와 똑같이 생긴 윈도우를 만들어 현 좌표를 구하신다음, 타이머 내에서 동적 생성 하시...
    • 진돌
    • 2003.02.18 20:12
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.18 21:06
      너무 어렵게 생각하신게 아닌지.. 말씀하시는 가변 길이 문자열 형은 string 을 쓰시면 됩니다. ...
    • 진돌
      2003.02.18 21:18
      그런데요.. digitString : String; 으로 선언을 해도 에러가 납니다.. 다음과 같습니다 [Error]Type '...
    • 박상윤
      2003.02.26 21:41
      일단 어떤 용도로 사용을 하실려 하는지. 크기를 줄이는 방법은 여러가지가 있습니다. 필요에 따라 사용...
    • 이희진
      2003.02.22 01:08
      어떤 이유에서 파일 크기의 한계를 두어야 하는지 잘 모르겠지만, 이미지 크기가 크게 문제되지 않는거...
    • 김정명
    • 2003.02.18 06:15
    • 0 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.02.18 18:47
      for i:=0 to 10 do begin    Application.ProcessMessages;    edit1.text := int...
    • 미소나눔
      2003.02.18 18:56
      Application.ProcessMessages; 이게 있어야징... 즐푸~
    • 토미사랑
      2003.02.18 23:33
      sleep()함수를 사용하면, 프로그램이 완전히 멈춰버리게 되잖아요... sleep()을 사용하지 않고서는???
    • 열심히
    • 2003.02.18 05:38
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 넘버3
      2003.02.18 05:43
      TPageControl를 Creat할 때 override가 빠진것 같군요... public     constru...
    • 열심히
      2003.02.18 05:51
      페이지 컨트롤은 생성이 됩니다... 탭시트를 생성할때 먼저 생성된 pagecontrol을 넣어줘야하는데 앞...
    • 아폴론
    • 2003.02.18 04:24
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 아폴론
      2003.02.18 08:37
      a.cg_krno : G200301001 ...이런 형식의 Char문자가 들어갑니다 a.cg_date : 2003-01-31 ...이런 형식의 C...
    • 이중철
      2003.02.18 11:24
      마지막 필드 추가했다고 논리가 맞지 않는것은 아니에요. 단지 모래시계만 나왔다는 것은 Query가 최적...
    • 아폴론
      2003.02.18 19:31
      이중철님 감사합니다. 설명까지 해 주시고...덕분에 해결이 되었고요 앞으론 SQL문을 좀더 신중히, 차근...
    • 이중철
      2003.02.18 05:28
      음 데이타 베이스가 오라클인것 같은데... 하여간.. 님께서 쿼리를 쓰신것 보고는 판단이 안서요.. 왜냐...
    • 열심히
      2003.02.18 04:32
      어떤 오류인지 알려주실래요? 델파이에서만 오픈이 안되는건지.. 아님 다른데서도 안되는지...