기고글 토론 "SQL 및 MQL5: SQLite 데이터베이스로 작업하기" - 페이지 2

 

구조체 복사 변경으로 인해 - 유니온을 사용하도록 ByteImg.mqh 파일 수정

https://www.mql5.com/ru/forum/6291#comment_4967832 에서 새로운 FastFile을 다운로드하세요.
파일:
ByteImg.mqh  6 kb
 
 string query="SELECT COUNT(*) FROM '"+table+"' WHERE low<"+lowLevel+" AND high>"+highLevel+" AND date>'"+TimeToString(time)+"'";

if(sql3.Query(tbl,query)!=SQLITE_DONE)

        {

         Print(sql3.ErrorMsg());

         return 0.0;

        }

      sql3.Disconnect();

      CSQLite3Cell cell;

      tbl.Cell(0,0,cell);

      int gg=cell.GetInt64();


gg는 항상 0을 출력합니다. 쿼리를 데이터베이스에 직접 입력하면 올바른 값을 출력합니다.

그리고 카운트 대신 어떤 열을 넣은 다음 배열 크기 ArraySize(tbl.m_data)를 보면 모든 것이 정상입니다. 즉, 카운트가 작동하지 않습니다. 모르겠어요, 제가 뭔가 잘못하고 있을지도 모르겠네요.....

 
한 해를 버티는 것이 좋습니다.
 
cvera 자체는 작동합니다. 잘못된 위치에서 결과를 가져오고 있거나 쿼리어를 데이터베이스에 전달하는 클래스가 제대로 작동하지 않습니다.
 

현재 이 오류가 발생하고 있는데 도와주실 수 있나요?

파일:
Immagine.jpg  268 kb
 
d.bignotti:

현재 이 오류가 발생하고 있는데 도와주실 수 있나요?

게시해 주셔서 감사합니다

아카이브에서 수정

 

트레이딩, 자동매매 시스템, 트레이딩 전략 테스트에 관한 포럼

"SQL과 MQL5: SQLite 데이터베이스 작업" 문서에 대한 토론

데니스 카나피스, 2017.06.11 15:28

 string query="SELECT COUNT(*) FROM '"+table+"' WHERE low<"+lowLevel+" AND high>"+highLevel+" AND date>'"+TimeToString(time)+"'";

if(sql3.Query(tbl,query)!=SQLITE_DONE)

        {

         Print(sql3.ErrorMsg());

         return 0.0;

        }

      sql3.Disconnect();

      CSQLite3Cell cell;

      tbl.Cell(0,0,cell);

      int gg=cell.GetInt64();


gg는 항상 0을 출력합니다. 쿼리를 데이터베이스에 직접 입력하면 올바른 값을 출력합니다.

그리고 카운트 대신 어떤 열을 넣은 다음 배열 크기 ArraySize(tbl.m_data)를 보면 모든 것이 정상입니다. 즉, 카운트가 작동하지 않습니다. 모르겠어, 내가 뭔가 잘못하고 있을지도 몰라.....


COUNT는 0을 출력하지만 SQLiteStuido에서 스크립트를 실행하면 모든 것이 계산됩니다.

실제로 이것은 ~10000> number ofStrokes가 있는 테이블에서 발생하는 것으로 나타났습니다. 또한 위의 예에서와 같이 얻은 테이블 tbl이(코드에 내장 된 함수에 의해) 인쇄되는 경우 INTEGER 유형의 열은 물론 0이 아니지만 0으로 인쇄됩니다. 그리고 동일한 인쇄물에서 두 배로 올바르게 출력됩니다.

정수에 뭔가 문제가 있는 것 같습니다(아직 테스트할 시간이 없었습니다).

 

트레이딩, 자동매매 시스템, 트레이딩 전략 테스트에 관한 포럼

"SQL과 MQL5: SQLite 데이터베이스 작업" 문서에 대한 토론

BeforeFlight, 2017.08.31 07:55 AM


같은 것 - COUNT는 0을 출력하지만 SQLiteStuido에서 스크립트를 실행할 때 모든 것이 계산됩니다.

실제로 ~10000> number ofStrokes가 있는 테이블에서 이런 일이 발생한다는 것을 발견했습니다. 또한 위의 예에서와 같이 얻은 테이블 tbl이(코드에 내장 된 함수에 의해) 인쇄되는 경우 INTEGER 유형의 열은 물론 0이 아니지만 0으로 인쇄됩니다. 그리고 동일한 인쇄물에서 두 배로 올바르게 출력됩니다.

정수에 문제가있는 것 같습니다 (아직 테스트 할 시간이 없었습니다).


"Include\MQH\Ctrl\ByteImg.mqh" 파일에서 찾았습니다:

대신

int ViewInt() { __int d; d.v=0; ViewArray(d.b,0,4); return(d.v); }

분명히 의미했습니다:

int ViewInt() { __int d={0}; ViewArray(d.b,0,4); return(d.v); }

그 후 모든 것이 카운트 및 테이블 출력에 정확합니다. 적어도 테스트는 통과했습니다.

@o_o @데니스 카나피스

 
BeforeFlight:

"Include\MQH\Ctrl\ByteImg.mqh" 파일에서 찾았습니다:

대신

를 의미합니다:

그 후 COUNT와 테이블 출력에 모든 것이 정확합니다. 적어도 테스트는 통과했습니다.

@o_o @데니스 카나피스


이 오류에 대해 말씀 드리고 싶었습니다, 당신은 저보다 앞서있었습니다 :). INT 값의 경우 항상 0 값이 주어졌습니다.

 

__int가 유니온이기 때문에 SD에 대한 버그를 설명했습니다.

union __int { int v; uchar b[4]; };

__int d; d.v=0;

и

__int d={0};

와 차이가 없어야 합니다.

표시된 코드 조각은 COUNT에 어떤 영향을 미치는지 전혀 이해하지 못합니다.

ViewInt 함수는 쓰지 않고 정반대로 숫자를 읽기 때문입니다 . 그리고 d.v의 현재 값은 신경 쓰지 않습니다.

-----

더 편안하게 느끼실 수 있도록 제안하신 수정 사항을 ByteImg에 추가했습니다.


하지만 이 버그를 현지화하여 다시 제공해 주세요. 지금까지는 모든 것이 버그처럼 보이지만 확실히 라이브러리의 버그는 아니기 때문입니다.