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

FireBird Q&A
[4250] 파이어버드 검색 질문
이유를 모르겠습니다. [] 2498 읽음    2011-10-11 14:39
파이어버드 Ver 2.1 + 델파이 Xe를 사용하고 이며 서버에 데이터를 저정하고 클라이언트에서
실시간조회를 하는 구성입니다.(트래픽이 많지 않아 미들웨어는 사용하지 않음)

Timer를 써서 2분마다 서버에서 데이터를 읽어 그리드에 표시 하는데 프로그램을 종료하고 다시
실행 하였을때는 최신 값이 표시되지만 타이머에서 쿼리 문을 날렸을때는 프로그램 실행시 불러온
값만 표시가 되고 업데이트가 되지를 않는군요,,,

Timer문제인가 하여 쓰레드로 바꾸어 보아도 동일한 증상이 나옵니다.

더 이상한건 내부 시험에서는 더 낮은 사양의 클라이언 PC에 적용하여도 정상 동작하는데 업체에
설치된 곳에서는 이와 같은 증상이 나타 나는군요..

혹시 이와 같은 문제가 있으셨거나 어디가 문제인지 짐작 되시는 분 있으면 알려 주시면 감사하겠습니다.

쿼리는 진짜 간단합니다.

  with RMSIWQueryRT do
  begin
    Close;
    SQL.Clear;

    SQL.Text := ' Select LDate, SENSORID,CHANNELID,CHANNELMODE,RVALUE,STATUS From TBDATALOG ' +
                ' Where (USERNAME=:a or USER1=:a or USER2=:a or USER3=:a or USER4=:a ) and ((LDate>=:b) and (LDate<=:c))' +
                ' order by CHANNELID, LDate desc';


    ParamByName('a').DataType := ftString;
    ParamByName('a').Size     := 20;
    ParamByName('a').Value    := UName;

    ParamByName('b').DataType := ftString;
    ParamByName('b').Size     := 19;
    ParamByName('b').Value    := formatDatetime('yyyy-mm-dd hh:nn:ss', IncDay(Now,-1));

    ParamByName('c').DataType := ftString;
    ParamByName('c').Size     := 19;
    ParamByName('c').Value    := formatDatetime('yyyy-mm-dd hh:nn:ss', Now);

    try

      Open;
      FetchAll;

      first;

      i := 1;

      while Not Eof do
      begin
        if (FieldByName('CHANNELID').AsInteger  = i) and (FieldByName('CHANNELID').AsInteger < 32) then
        begin
          Grd1.Cells[3,FieldByName('CHANNELID').AsInteger] := FieldByName('LDate').AsString;

          Grd1.Cells[4,FieldByName('CHANNELID').AsInteger] := Format('%3.3f',[FieldByName('RVALUE').AsSingle]);

          if FieldByName('STATUS').AsInteger = 1 then
          begin
            Grd1.Colors[0,FieldByName('CHANNELID').AsInteger] := ClNone;
          end
          else Grd1.Colors[0,FieldByName('CHANNELID').AsInteger] := clred;

          inc(i);

          Continue;
        end
        else if (FieldByName('CHANNELID').AsInteger  = i) and (FieldByName('CHANNELID').AsInteger > 31) then
        begin
          Grd2.Cells[3,FieldByName('CHANNELID').AsInteger - 31] := FieldByName('LDate').AsString;

          Grd2.Cells[4,FieldByName('CHANNELID').AsInteger - 31] := Format('%3.3f',[FieldByName('RVALUE').AsSingle]);

          if FieldByName('STATUS').AsInteger = 1 then
          begin
            Grd2.Colors[0,FieldByName('CHANNELID').AsInteger - 31] := ClNone;
          end
          else Grd2.Colors[0,FieldByName('CHANNELID').AsInteger - 31] := clred;

          inc(i);

          Continue;
        end;

        Next;

        if FieldByName('CHANNELID').AsInteger >= (i+1) then
           i := FieldByName('CHANNELID').AsInteger;
      end;

    Except On EIBInterBaseError do
      begin
        Cancel;
      end;
    end;
  end;

+ -

관련 글 리스트
4250 파이어버드 검색 질문 이유를 모르겠습니다. 2498 2011/10/11
4251     Re:파이어버드 검색 질문 michael 2566 2011/10/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.