Q&A

  • 데이터 베이스 출력 부분이 안됩니다.
안녕하세요 ^^

데이터셋 쿼리를 아래와 같이 세팅하고

select pdate, count(seq) from citi_event where pdate >= :sdate and pdate <= :edate group by pdate

클릭 이벤트를 아래와 같이 코딩했습니다.

begin
    datamodule2.citi_date_set.ParamByName('sdate').AsString := sdate.Text;
    datamodule2.citi_date_set.ParamByName('edate').AsString := edate.Text;
    memo1.Clear;
    datamodule2.citi_date_set.First;
    while not datamodule2.citi_date_set.Eof do
      begin
      memo1.text := memo1.text + datamodule2.citi_date_set.FieldValues['pdate'];
      datamodule2.citi_date_set.Next;
      end;
end;

에러도 없이 값이 메모판에 출력이 안됩니다.

어디가 잘못됐나요?

부탁드립니다.
5  COMMENTS
  • Profile
    nilriri™ 2005.05.17 08:59
    움..먼저 메모 컴포넌트에. text추가할땐..

    memo.lines.add('어쩌구저쩌구'); 를 이용하는게 좋을것 같구요.

    select문에서 >= <= 로 조건을 줬는데..혹시 pdate라는 컬럼이 datetime형이라면

    시간을 염두에두고 쿼리를 해야할겁니다.  

    그럼..

  • Profile
    김종윤 2005.05.17 18:41
    답변 감사합니다.

    칼럼이 2002-1-1 과 같은 date형식이에요.

    datetime 형식이 아니라 그런지 어떻게 쿼리문을 날려야 할지 모르겠어요,.

    asstring으로 해서 결과값이 안나온거 같은데,

    2000-1-1 과 같이 날자만 나오는 형식은 어떤방식으로 해야 하나요?




  • Profile
    nilriri™ 2005.05.17 23:54
    디비의 컬럼 데이터 형식이 어떤것인지 언급이 없어서 뭐라 답변을 드리기가

    char, varchar, datetime형...중 어떤걸 사용하시는지요?


    mdb라면 팁게시판에서 mdb로 검색하시면 관련 자료 있습니다 참고하시구요.

    우선은 쿼리 문장을 ms_sql이라면. 쿼리 분석기 같은 툴을 이용해서..

    정확히 해당 컬럼에 어떤 자료가 어떤 형식으로 저장되어있는지 먼저 확인하시고 작업하세요.

    그럼..

  • Profile
    김종윤 2005.05.18 00:19
    답변 감사합니다.

    제가 안되서 다른 방법으로 해봐도 안돼는군요.

    우선 데이터베이스는 mysql이고,

    pdate 의 형식은 char(10) 으로 2004-04-04 와 같은 형식으로 들어있습니다.

    이 데이터를 한번 읽어와서 컴보박스에 담았습니다.

    두개의 컴보박스에 선택된 날짜 사이의 데이터를 불러오는것입니다.

    sdate와 edate가 날자가 들어있는 컴보박스입니다.


        datamodule2.citi_date_set.CommandText := 'select pdate, count(seq) from citi_event2
        where pdate >= ''' + sdate.Text + ''' and pdate <= ''' + edate.text + ''' group by pdate';

        datamodule2.citi_date_set.Active := true;
        memo1.Clear;
        memo1.lines.add (datamodule2.citi_date_set.commandtext);
        datamodule2.citi_date_set.First;
        while not datamodule2.citi_date_set.Eof do
          begin
          memo1.Lines.Add (datetostr(datamodule2.citi_date_set.FieldValues['pdate'])+'  '+inttostr
         (datamodule2.citi_date_set.FieldValues['count(seq)']));
          datamodule2.citi_date_set.Next;
          end;

    mysql 에서 직접

    SELECT pdate, count( seq ) FROM citi_event2 WHERE pdate >= '2005-02-17' AND pdate <= '2005-05-11'GROUP BY pdate

    라고 쿼리를 날리니 잘 되었습니다.

    그런데 데이터셋에 직접 위의 쿼리를 날리니 안되더라고요..

    도와주세요.
  • Profile
    nilriri™ 2005.05.18 22:26
    우선 mysql은 직접 써보지 않아서 뭐라고 딱 꼬집어 말씀드리긴 그렇지만..

    우선 님의 글중에 약간 의심스런 부분이..

    memo1.Lines.Add (datetostr(datamodule2.citi_date_set.FieldValues['pdate'])...

    여기에서..

    char(10) 라면..  datetosrt을 안해도 될거 같습니다.

    memo1.Lines.Add (datamodule2.citi_date_set.fields.fields[0].asString); 을 이용해보시구요.

    혹시 모르니 쿼리 하신후에 recordcount확인해 보시구요..

    쿼리할때 조건 넘기는 부분에서.

    ''' + edate.text + '''   이부분을.

    ' + QuotedStr( Trim(edate.text)) + '....     // QuotedStr 함수는 DB.pas파일에 정의 되어있을겁니다.

    처럼 해보세요..

    그리고 dataset 이라면..  

    dataset --> datasource --> dbgrid   에 연결하셔서 우선 들어있는 데이터 그대로를 델파이 기본 컴포넌트인 디비그리드에서 어떻게 인식하고 있는지를 확인해 보시는것도 좋을거 같습니다.

    문제 해결에 도움이 될만한 내용이었는지 모르겠네요..^^;

    그럼..좋은 결과 있으시길..