//--- 포함 #include <MQH\Lib\SQLite3\SQLite3Base.mqh>
//--- 변수
CSQLite3Base sql3;
CSQLite3Table testTable;
CSQLite3Cell testCell;
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+voidOnStart()
{
//--- 데이터베이스 연결 열기if(sql3.Connect("test.db3")!=SQLITE_OK)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
elsePrint("CONNECTED TO DB.");
//--- 테이블 생성if(sql3.Query("DROP TABLE IF EXISTS [test]")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
if(sql3.Query("CREATE TABLE [test] ([i] INT)")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
elsePrint("TABLE CREATED.");
//--- 값 삽입if(sql3.Query("INSERT INTO [test] VALUES(1)")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
elsePrint("VALUE \"1\" INSERTED.");
//--- 테이블 행 개수 계산if(sql3.Query(testTable,"SELECT COUNT(*) FROM [test]")!=SQLITE_DONE)
{Print(sql3.ErrorMsg()); DebugBreak(); return;}
testTable.Cell(0,0,testCell);
Print("RETRIEVED DATA FROM TABLE : Count(*)=",testCell.GetInt());
}
//+------------------------------------------------------------------+
+비교를 위해 int ViewInt() 안에 인쇄 및 테스트 __int d0을 추가했습니다.
Print(__FUNCSIG__," || ENTER FUNCTION");
//--- TEST d0
__int d0={0}; Print ("TEST d0: d0.v=",d0.v, " DATA d.b:"); ArrayPrint(d0.b);
ViewArray(d0.b,0,4);
Print("ViewArray OUTPUT: d0.v=",d0.v," DATA d.b:"); ArrayPrint(d0.b);
//--- d - AS WAS+일부 인쇄물
__int d; d.v=0;Print("\n","d AS WAS: d.v=",d.v," DATA d.b:"); ArrayPrint(d.b);
ViewArray(d.b,0,4);
Print("ViewArray OUTPUT: d.v=",d.v, " DATA d.b:"); ArrayPrint (d.b);
//---return(d.v);
OUTPUT:
//DB에 연결되었습니다.//테이블이 생성되었습니다.//값 "1"이 삽입되었습니다.//int CSQLite3Cell::GetInt() || 함수 입력//int CSQLite3Cell::GetInt() || type=CT_INT 케이스//int CByteImg::ViewInt() || 함수 입력//TEST d0: d0.v=0 DATA d.b://0 0 0 0//ViewArray OUTPUT: d0.v=1 DATA d.b://1 0 0 0// //d AS WAS: d.v=0 DATA d.b://0 0 0 0//ViewArray 출력: d.v=0 DATA d.b://10 0 0// 테이블에서 가져온 데이터 : Count(*)=0
이전 게시물을 작성하기 전에 @o_o 님의 코드를 읽었고 유니온이 있다는 것을 완벽하게 보았기 때문에이 버그도 이상해 보였지만 분명히 존재합니다.
그러나 라이브러리(코드 아래쪽의 ViewArray와 생성자__int)에서 이 버그를 찾지 못했습니다(). 그러나 OUTPUT에서 강조 표시된 내용 (유니온의 경우 분명히 이상 함)을 통해 "종류"컴파일러가 ViewArray (.b 만 작동 함) 이후에 __int의 변경 사항을 보지 못하고 캐시에서 .v = 0 (강조 표시됨) 에 대해 마지막으로 알려진 값을 반환했다고 가정 할 수 있습니다 .v 자체를 "보지 않고" d. v를 "보지 않고".
하지만 여기서는 컴파일러 자체를 보지 못했기 때문에 가정만 하고 있으며, 다시 말씀드리지만 코드에서 이 버그와 관련된 오류를 발견하지 못했습니다.
2017.09.26 07:39:35.569 SQLite3Test'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' 64비트 버전이 아님 2017.09.26 07:39:35.602 SQLite3Test (GAZP,H1)'C:\사용자\로밍\앱데이터\로밍\메타쿼츠\터미널\MQL5\라이브러리\sqlite3_32.dll' [193] 로드할 수 없습니다.
라이브러리 32와 64 모두 아카이브에 있었습니다. Win7 64가 있습니다. 이해가 되지 않습니다 - 어떻게 해야 하나요?
테스트 스크립트:
+비교를 위해 int ViewInt() 안에 인쇄 및 테스트 __int d0을 추가했습니다.
OUTPUT:
이전 게시물을 작성하기 전에 @o_o 님의 코드를 읽었고 유니온이 있다는 것을 완벽하게 보았기 때문에이 버그도 이상해 보였지만 분명히 존재합니다.
그러나 라이브러리(코드 아래쪽의 ViewArray와 생성자 __int)에서 이 버그를 찾지 못했습니다( ). 그러나 OUTPUT에서 강조 표시된 내용 (유니온의 경우 분명히 이상 함)을 통해 "종류"컴파일러가 ViewArray (.b 만 작동 함) 이후에 __int의 변경 사항을 보지 못하고 캐시에서 .v = 0 (강조 표시됨) 에 대해 마지막으로 알려진 값을 반환했다고 가정 할 수 있습니다 .v 자체를 "보지 않고" d. v를 "보지 않고".
하지만 여기서는 컴파일러 자체를 보지 못했기 때문에 가정만 하고 있으며, 다시 말씀드리지만 코드에서 이 버그와 관련된 오류를 발견하지 못했습니다.
새 문서 SQL 및 MQL5: SQLite 데이터베이스 작업하기가 게시되었습니다:
작성자: o_O
안녕하세요, 좋은 글입니다.
안녕하세요,
스크립트를 실행할 때 2 개의 경고가 표시됩니다:
2017.09.26 07:39:35.569 SQLite3Test 'C:\사용자\로만\앱데이터\로밍\메타쿼츠\터미널\MQL5\라이브러리\sqlite3_32.dll'은 64비트 버전이 아닙니다.
라이브러리 32와 64 모두 아카이브에 있었습니다. Win7 64가 있습니다. 이해가 안 됩니다 - 어떻게 해야 하나요?
스크립트를 실행할 때 2개의 경고가 표시됩니다:
2017.09.26 07:39:35.569 SQLite3Test 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' 64비트 버전이 아님
2017.09.26 07:39:35.602 SQLite3Test (GAZP,H1) 'C:\사용자\로밍\앱데이터\로밍\메타쿼츠\터미널\MQL5\라이브러리\sqlite3_32.dll' [193] 로드할 수 없습니다.
라이브러리 32와 64 모두 아카이브에 있었습니다. Win7 64가 있습니다. 이해가 되지 않습니다 - 어떻게 해야 하나요?
아무것도
이것은 가져 오기에 대한 MT의 반응이지만 코드는 계속 작동합니다.
부록에 PrintTable 함수에 대한 수정 사항이 있습니다.
새 문서 SQL 및 MQL5: SQLite 데이터베이스 작업하기 문서가 게시되었습니다:
작성자: o_O
32비트 버전이 있나요?
문제는 32 비트 고객이 많다는 것입니다 ...
안녕하세요.
SQLite3Test.mq5를 실행하면 오류 14(SQLITE_CANTOPEN)가 발생합니다. 제가 뭘 잘못하고 있나요?
안녕하세요.
SQLite3Test.mq5를 실행하면 오류 14(SQLITE_CANTOPEN)가 발생합니다.
제가 뭘 잘못하고 있나요?
오류 위치를 디버깅하거나 로깅하지 않음
디버깅하지 않거나 오류 위치를 로그에 인쇄하지 않습니다.
1. 아카이브에서 스크립트를 "있는 그대로" 실행합니다.
2. "실제 데이터에서" 디버그합니다. 첫 번째 함수를 입력합니다:
3. SQLite3Base.mqh 파일에서 이 위치로 이동합니다:
4. 줄을 실행한 후
int res=::sqlite3_open(file,m_db);14와 같은 res를 얻습니다. 이것이 스크립트의 끝입니다.
기사의 텍스트로 판단하면 다음과 같아야합니다.
"В результате работы появится файл базы данных в папке установки терминала MetaTrader 5."그 이유는 무엇일까요? 어느 쪽을 봐야 할까요?
다운로드한 스크립트를 확인했습니다.
처음에 모든 것이 올바르게 작동했습니다.
세히이 셰브추크:
어느 방향으로 봐야 하나요?
여기서 시작
다운로드한 스크립트를 확인했습니다.
저도 확인했습니다:
여전히 오류 14입니다.
도움을 받기가 어렵다는 것을 알고 있습니다. 제가 직접 알아내야겠네요. 이 예제가 모든 곳에서 작동하는 것은 아니라는 점을 명심하세요. 이유를 모르겠어요.