C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[12858] Re:[질문] DBGrid 에서.
V6 [] 1196 읽음    2001-11-20 06:14
Query를 사용한 방법입니다.

TDataSet *pDS;
pDS = DBGrid->DataSource->DataSet;

pDS->Close();
pDS->SQL->Clear();
pDS->SQL->Add("SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(DATETIME))) FROM 테이블명 WHERE 조건식");
pDS->ExecSQL();
AnsiString SumTime = pDS->Fields->Fields[0]->AsString;

Query말고 다른 컴포넌트를 사용하시면 아래 SQL 명령어를 사용하시면 됩니다.
자세히 보시면 아주 쉽습니다.

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(DATETIME))) FROM 테이블명 WHERE 조건식

TIME_TO_SEC(DATETIME) //여기서 DATETIME 은 필드명
시간을 초로 환산해 주는 SQL 함수입니다.

SUM(필드명)
필드명의 레코드 합을 구하는 SQL 함수입니다.

SEC_TO_TIME(초)
초를 시간으로 환산해 주는 SQL 함수입니다.

위 함수 세가지를 한꺼번에 사용한 겁니다.

#주의 : 이렇게 하면 쿼리된 실제 필드명이 SEC_TO_TIME(SUM(TIME_TO_SEC(DATETIME))) 이렇게 나옵니다.

그리고 쿼리된 값을 읽을 때는 두가지 방법이 있습니당.

첫번째
pDS->Fields->Fields[0]->AsString;
이 말은 쿼리결과 값의 첫번째(0) 필드의 값을 스트링으로 읽은거구요.

두번째는 실제 필드명을 대입하는겁니다. 필드명이 너무 길어서...
pDS->Fields->FieldByName("SEC_TO_TIME(SUM(TIME_TO_SEC(DATETIME)))")->AsString;




아래는 MySQL에서 쿼리한 값을 화면저장한 내용 입니다. 참고하세용.

mysql> SELECT DATETIME FROM test WHERE POS = 'X';
+----------+
| DATETIME |
+----------+
| 10:12:20 |
| 11:22:43 |
| 09:02:03 |
| 02:42:22 |
+----------+
4 rows in set (0.00 sec)

mysql> SELECT TIME_TO_SEC(DATETIME) FROM test WHERE POS = 'X';
+-----------------------+
| TIME_TO_SEC(DATETIME) |
+-----------------------+
|                 36740 |
|                 40963 |
|                 32523 |
|                  9742 |
+-----------------------+
4 rows in set (0.00 sec)

mysql> SELECT SUM(TIME_TO_SEC(DATETIME)) FROM test WHERE POS = 'X';
+----------------------------+
| SUM(TIME_TO_SEC(DATETIME)) |
+----------------------------+
|                     119968 |
+----------------------------+
1 row in set (0.00 sec)

mysql> SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(DATETIME))) FROM test WHERE POS = 'X';
+-----------------------------------------+
| SEC_TO_TIME(SUM(TIME_TO_SEC(DATETIME))) |
+-----------------------------------------+
| 33:19:28                                |
+-----------------------------------------+
1 row in set (0.00 sec)





이상 V6 였습니다.
즐프프프프






초보 님이 쓰신 글 :
:
:  DATA Field 는 DATETIME입니다.
:
:  그중에 시간 정보만 입력이 됩니다.
:
:  특정 기간 동안 이 시간 필드의 값들을 더해서 출력을 하고자 하는데..
:
:  그냥 더해버리면..
:
:  00:00:00 으로만 나타나버리고
:
:  제가 원하는
:
:  234:23:00 (234시간:23분:00초) 이렇게 나타나지가 않네요.
:
:  어케 해야 할까요..
:
:  고수님들의 도움 부탁드립니다.

+ -

관련 글 리스트
12834 [질문] DBGrid 에서. 초보 804 2001/11/19
12858     Re:[질문] DBGrid 에서. V6 1196 2001/11/20
12881         Re:Re:[질문] DBGrid 에서. 초보 839 2001/11/20
12895             Re:Re:Re:[질문] DBGrid 에서. V6 1019 2001/11/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.