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

C++빌더 FAQ
C++Builder Programming FAQ
[83] TDBChart의 최대-최소 범위 설정
박지훈.임프 [cbuilder] 16452 읽음    2005-10-06 17:14
질문 김시환님

모니터링 시스템을 구축하고 들어온 데이타값을 5분 단위로 DB에 저장하고 있습니다. 이 DB에는 날짜와 시간 그리고 3개의 데이타 필드가 있습니다. 날짜와 시간의 시스템의 정보를 읽어서 넣고 있고 나머지 데이타는 시리얼 포트를 통해 들어온 값을 입력합니다.
문제는 특정한 날짜와 시간을 입력하면 그 시간을 기준으로 1시간전의 데이타 값을 그래프로 나타내려고 합니다.

예) 1999년 11월 12일 ,  11시 를 입력하면

1999년 11월 12일 10 - 11시 사이의 12개 데이타를 그래프로
표현하는 것입니다.


답변 박지훈.임프님

별로 좋은 방법은 아닙니다만, 김시환님이 생각하시는 스타일로 해결하려면 차트의 Axis에서 Maximum과
Minimum을 설정하면 됩니다. 또 편법을 쓰자면 차트의 줌 기능을 이용해서 초기에 원하는 부분만 나오도록
할 수도 있습니다.

하지만 이런 방법은 적어도 일반 차트가 아닌 디비차트에서는 사용하시지 않는 것이 좋습니다.
저역시 그 중에 하나이지만, 디비 어플리케이션 작성에 익숙하시지 않으신 분들이 자주 하는 "적법한" 실수중의
하나가 무분별하게 테이블을 쓰는 것입니다. 테이블은 해당 데이터베이스 테이블에서 모든 데이터를 다 읽어오므로,
데이터가 몇십개나 몇백개 단위가 아닌 이상(실제 디비를 사용하는 프로그램은 몇만개 단위 이상이 되겠죠?)
읽어오는 퍼포먼스가 심각하게 떨어집니다. 정말 데이터를 저장하는 저장소의 역할이라서 데이터 갯수가 어느정도
이상이라면, 가능하면 테이블을 쓰지 않는 것이 좋습니다. 대신에 쿼리를 쓰는 것이 좋죠. 쿼리는 해당 조건
내의 데이터만 읽어오므로 당연히 테이블보다 엄청나게 좋은 퍼포먼스를 보입니다. 만약 쿼리를 테이블과
똑같은 용도로 사용하려고 한다면 단지 다음과 같은 SQL 문을 쓰기만 하면 되니까요.
select * from "테이블이름"

너무나 당연하지만, 쿼리에서 이 SQL문은 동적으로 바뀌는 것이므로, 필요한 경우에 얼마든지 Where 문을 써서
범위를 설정하여 사용할 수 있습니다. 앞에서도 말했다시피, 이렇게 범위를 설정하여 쿼리를 할 경우
경우에 따라 다르겠지만 적어도 테이블보다는 엄청나게 빠른 속도를 보일겁니다. 또 원하시는 것과 같이
범위가 설정되므로 그런 작업에도 적당하구요.

혹 SQL 문에 익숙하시지 않으시다면, 다음과 같이 하면 됩니다.
모든 범위의 데이터들을 다 쿼리하려면 앞서와 같이 하면 되고, 만약 특정 범위로 제한해야 한다면, 앞의 SQL문에
다음의 한줄을 추가하시면 됩니다.
Where 필드이름 Between 최소값 and 최대값
아주 간단하지요?

http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=2290

+ -

관련 글 리스트
83 TDBChart의 최대-최소 범위 설정 박지훈.임프 16452 2005/10/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.