Q&A

  • 오라클과 델파이 연결에서 자꾸 걸리네염...
name    주소  
   ㅁㅁㅁ  서울
   ㄹㄹㄹ  부산
   ㄱㄱㄱ  서울
   ㅅㅅㅅ  인천

이렇게 자료가 있는데염..
여기서 서울인사람만..select하여 보여주는데...

where 주소='서울'이렇게 하잖아여..
근데 앞에 디비에는 없는id 를 주소 싶거등여..
긍까출력을 하면.

~~서울
id   name    주소  
1   ㅁㅁㅁ  서울
2   ㄱㄱㄱ  서울

~~부산
id   name    주소  
1   ㄹㄹㄹ  서울


이렇게요..
어떻게 할수 있는 방법이 없을까요?

쿼리를 조정하여 디비그리드에 나타날떄는 아래 그림처럼..나타나게 할수 없을까염??

4  COMMENTS
  • Profile
    김경록 2002.03.13 02:20
    오라클에는 시스템 변수중에 rownum이라는 것이 있습니다.
    Select절 추가해 보십시오..

    예)  select rownum, name, address from 테이블

    물론, 필드 알리어스를 줘서 필드명을 변경해도 됩니다.
            물론 아시겠지만...  ^^;

    예)  select rownum id, name, address from 테이블
    결과)
    =========================================
         id          name       address
    =========================================
         1           ..                ..
         2           ..                ..
         3           ..                ..
    =========================================

  • Profile
    염상철 2002.03.13 02:57
    오늘 하루 종일 그것만 붙잡거 있었는데...
    바로 해결해 주시니 정말 감솨합니다.

    근데여..하나더 물어봐더 되져?
    코드를 자동생성하거 싶은데..
    날짜+코드
    즉..
    오늘 날짜면..
    20020312+001=20020312001
    두번째 데이타는 20020312002
    날짜가 바뀌면 20020313+001←초기화 시킬려거 하는데 어케 하는게 나을까염..
    제생각으로는 뒤에 3개를 짤라낸후 오늘 날짜와 비교해서
    같다면...바로 1을 더하거..
    아니면 ..오늘 날짜에 001을 더하는방식을 생각하는데...쉽게 하는 방법이 있을까염??


  • Profile
    김경록 2002.03.13 06:14
    음... Query로는 많은 시간이 투자될듯 하군여..
    그래서, Query와 DataSet 컴포넌트를 가지고 해결하는게
    빠를듯 하군요..
    코딩 길이나 여러가지 시간상으로 말입니다.


    1.  일단계
    ===============================================================
    혹시 CalcField라고 아시는지요.
    DataSet 컴포넌트에 Query되어진 내용에 특정기능의 필드를
    추가할때 사용하거나,
    특정 값을 계산할때 사용할 수 있는 필드입니다.
    DataSet(Table, Query 컴포넌트)에서 마우스 오른쪽 클릭하면,
    나타나는 팝업메뉴에서 FieldEditor라는 것이 있습니다.
    그것을 클릭한 후 나타나는 팝업에서
    다시 마우스 클릭하면,
    팝업메뉴 중 New Field를 선택 합니다..
    이 필드는 실제 Field 또는 CalcField, Lookup필드를 정의하기
    위한 것입니다.
    그곳에서 필드Type을 CalcField를 선택하고
    Name에는 필드명을, Type에는 필드 Type을 (String으로 하면 되겠져?)
    입력한 후 ok버튼을 클릭하면,
    Query 또는 실제 Table의 Field가 아닌 가상의 Field가 생기게 됩니다.
    그곳에 님이 나타내고자 하는 Code값을 나타나게 하면 됩니다..
    ===============================================================

    여기까지가 준비단계입니다..


    이단계로는
    ===============================================================
    Query문에서
    가져올 Date일자를 해결하는 문제입니다..

    Query는

           SELECT TO_CHAR(SYSDATE, 'YYYYMMDD')  CODE, .....
              FROM 테이블
            WHERE 비교조건

    이렇게 작성을 합니다.. 즉 날짜만 가져옵니다(님이 원한 형식데로..)


    <---   이제는 델파이에서 코딩해야한 부분입니다.  --->


    <---   순번을 저장할 변수 선언  --->
    Private:
          ps_PrvCode, ps_CurCode: String;   //이전일자, 현재Record의 일자.
                                                            //주의, Query가 Open되기전
                                                            //초기화 할 것.
          pl_Seqno: Int;                               //Open되기전 역시 초기화 할것


    그 후 DataSet(Table, Query)의 OnCalcFields 이벤트에
    아래와 같이 코딩합니다.


    Procedure TForm.Query1CalcFields(DataSet: TDataSet);
    Begin
          ps_CurCode := DataSet.FieldByName('CODE').AsString;

          If ps_PrvCode <> ps_Code Then
          Begin
                //ps_PrvCode는 초기화될때 '' 을 대입받았을 것임
                //또한, pl_Seqno는 1로 세팅되었을 것임
                pl_Seqno    := 1;
                ps_PrvCode := DataSet.FieldByName('CODE').AsString;
                DataSet.FieldByName('칼크필드명').AsString
                                 := ps_CurCode + '001';
          End
          Else Begin
                Inc(pl_Seqno);

                If (pl_Seqno < 10) Then
                      DataSet.FieldByName('칼크필드명').AsString
                                  := ps_CurCode + '00' + IntToStr(pl_Seqno)
                Else If (pl_Seqno < 100) Then
                      DataSet.FieldByName('칼크필드명').AsString
                                  := ps_CurCode + '0' + IntToStr(pl_Seqno)
                Else
                      DataSet.FieldByName('칼크필드명').AsString
                                  := ps_CurCode + IntToStr(pl_Seqno);
          End;  
    End;


    이상입니다.
    이렇게 하면, 조회될때에 코드가 자동으로 생기게 될 것 같네여..
    위에 OnCalcFields내용은 이해되시겠져?  ^^;
    이전에 읽어진 날짜가 지금 읽은 날짜와 다르면,
    코드를 001로 초기화 한 후
    해당 코드를 CalcField에 대입하는 것입니다.
    그렇지 않을때는
    이런 방식을 주로 사용할 경우가 많으니..
    알아 두시면 좋을 것 같습니다..
    단, 단점이 있는데, CalcField는 가상으로 추가된 Field이므로
    속도가 아주조금.. 아주 조금 느려진다는 단점이 있습니다.
    그렇지만, 이렇게 하면,
    오라클 DB에서 Function을 쓰거나,
    Query를 복잡하게 하지 않아도 되는 장점이 있습니다.
    시간절약이지여... 아시겠지만..
    그럼..

             최강의 프로그래머를 위하여~~~~




  • Profile
    염상철 2002.03.13 19:41
    정말 감솨합니다.~~
    정말 정말  정말  정말  정말 감솨합니다.

    • 이창환
    • 2002.03.13 02:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김강수
      2002.03.13 03:09
      첫번째 답변은 제가 웹커낵션을 해보지 않아서 답변 드릴 수가 없구요. 전 DATA간의 형식 불일치로 인한 i...
    • 이정석
    • 2002.03.13 02:44
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 공성환
      2002.03.13 02:49
    • 이은정
      2002.03.13 03:16
    • 이창환
      2002.03.14 07:22
    • 나두초보!!
      2002.03.13 10:01
    • 이은정
      2002.03.13 23:14
    • 나두초보!!
      2002.03.13 23:59
    • 김광재
    • 2002.03.13 02:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.03.13 02:36
      단순히 님이 말씀하신 6자리를 필요로 한다면, if문을 사용하여 '0' 문자를 추가해 주심 되는것 같은데.. ...
    • 이채성
      2002.03.13 02:26
      포맷함수를 쓰면 될 것 같은데요..   Label1.Caption := Format('%.2d',[1]); 이렇게 하면 ...
    • 염상철
    • 2002.03.13 02:07
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.03.13 02:20
      오라클에는 시스템 변수중에 rownum이라는 것이 있습니다. Select절 추가해 보십시오.. 예)  ...
    • 염상철
      2002.03.13 02:57
      오늘 하루 종일 그것만 붙잡거 있었는데... 바로 해결해 주시니 정말 감솨합니다. 근데여..하나더 물어...
    • 김경록
      2002.03.13 06:14
      음... Query로는 많은 시간이 투자될듯 하군여.. 그래서, Query와 DataSet 컴포넌트를 가지고 해결하는게 ...
    • 염상철
      2002.03.13 19:41
      정말 감솨합니다.~~ 정말 정말  정말  정말  정말 감솨합니다.
    • Sean
    • 2002.03.13 02:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장지용
      2002.03.13 02:24
      "REGEDIT" 을 실행하시고 HKEY_CURRENT_USER      SOFTWARE  &...
    • 오정훈
    • 2002.03.13 01:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.03.13 03:07
      안녕하세요. 최용일입니다. 그냥 리소스에다가 RCDATA형식으로 JPG를 구겨넣으시구, 리소스 관련 API함...
    • 오정훈
      2002.03.13 03:25
      감솨 합니다.. 함 적용해 보구 이상있으면 글올리겠습니다.
    • 최석기
      2002.03.13 01:54
      무슨 함수로 서브 프로그램을 실행 시키시는 지는 모르겠지만 Winexec 함수의 두번째 파라메터로 조정이 ...
    • 이채성
      2002.03.13 02:21
      답변 감사합니다 프로그램을 COM으로 설계해서 COM으로 실행하고 있습니다. 그래서 WinExec로는 해결이...
    • 김광재
    • 2002.03.13 01:28
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.03.13 01:48
      님 질문을 자세히 해지시면 좋겠네여.. 그냥 1~12까지만 for문을 돌리겠다는건지. 아님.. 1~12월까지 ...
    • 미소나눔
      2002.03.13 01:37
      for i:=1 to 12 do   for j:=1 to 31 do
    • 김경록
      2002.03.13 01:23
      음.. 일반 책을 보시면 나올듯 한 질문이군여.. 일단 어떻게 DB와 연결하는지 아시다니까 그것은 빼고 쓰...
    • 프로초보
      2002.03.13 01:37
      님 말씀하신대루 그대루 하니깐 되네염.. 전 님이 맹그신 간단한 도표(??)의 두번째 방법을 쓴건데염.. ...
    • 김경록
      2002.03.13 02:15
      일단은 해결되셨다니 다행이네요.. 수정하신 글 읽었습니다. 그런데여.. 님은 꺼꾸로 하셔서.. 그렇게 ...
    • 프로초보
      2002.03.13 03:29
      감사드려염~~ 다음에 이어질 검색 질문을 기대해 주시길..ㅋㅋ..^^;;;;;;;; 후후... 이렇게만 척척 나가 ...
    • 김경록
      2002.03.13 01:28
      익스플로어 버젼을 확인해 보세여.. 익스플로어 버젼 때문에 생길 수 있는 문제같습니다..
    • 어린왕자A
      2002.03.13 02:22
      그냥 익스플로러를..6.0으로 깔았습니다. 그래도 안되는 군요..
    • 김강수
      2002.03.13 03:15
      음냐. 수고하십니다. 귀하의 문제는 Install Shield 사의 홈페이지에 가시면 BDE 세팅에 관련된 Script 파...
    • 강신구
    • 2002.03.13 00:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장지용
      2002.03.13 03:35
      "SY" 로 시작되는 건 "SYMBOL TABLE" 에러 입니다. 해당 ".DSM" 화일 지...
    • 최석기
    • 2002.03.12 23:53
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최영환
    • 2002.03.12 23:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.03.13 00:23
      글쎄여.. 님이 어떤 컴포넌트를 사용할지는 잘 모르겠지만, 또한 DBGrid의 내용을 그데로.. 그러니까 조회...
    • 김강수
      2002.03.13 03:19
      제 기억으로는 해당 사항의 의문점은 해결이 안 된 듯 합니다. MIDAS 연결 방식에 DCOM 방식이 있는데 이...
    • 오경태
    • 2002.03.12 23:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 푸른하늘
      2002.03.13 00:22
      첫번째 Insert 질의문을 감싸는 ' 이 빠졌고요.. sql.add('   )---> sql.add('  ...
    • 서현우
      2002.03.13 00:16
      values가 빠졌네요.... insert into table_name values (field1, field2........)
    • 초보
    • 2002.03.12 22:56
    • 0 COMMENTS
    • /
    • 0 LIKES