기고글 토론 "MQL5(MQL4)에서 MySQL 데이터베이스에 액세스하는 방법" - 페이지 9

 
Eugeniy Lugovoy:

MT4 빌드 890 x32 방금 확인했습니다. 모든 것이 작동합니다.

테스트 스크립트 실행 로그입니다:

여러분, 설명해 주세요:

1. 어떤 작업에서"액세스 위반 읽기" 가 발생합니까??

2. MySQL-001 스크립트를 실행할 때 전문가 탭에 표시되는 MQLMySQL 버전은 다음과 같아야 합니다: MQLMySQL v2.2 x32 저작권 © 2014, FxCodex Laboratory

3. MySQL 데이터베이스의 버전은 무엇입니까?

4. MySQL을 로컬에서 사용합니까, 아니면 원격 호스트에서 사용합니까?

5. 어떤 운영 체제에서 터미널을 실행합니까?

오류를 재현할 수 없으니 확인 후 다시 알려주세요.

비슷한 환경을 만들어서 테스트해 보겠습니다.

MT4(950)를 사용하고 있습니다. 문서에 첨부된 아카이브에서 파일을 가져왔습니다. 최신 버전이 아니라는 것을 올바르게 이해했나요? MySQL-001 EURUSD,M1: MQLMySQL v2.0 데모 저작권 © 2014, FxCodex Laboratory.

구성 파일에서 데이터를 읽지 않습니다.

 
Sergey Deynego:

저는 MT4(950)를 사용합니다. 기사에 첨부된 아카이브에서 파일을 가져왔습니다. 최신 버전이 아니라는 것을 올바르게 이해했습니까? MySQL-001 EURUSD,M1: MQLMySQL v2.0 데모 저작권 © 2014, FxCodex Laboratory

구성 파일에서 데이터를 읽지 못합니다.

예, v2.0은 이전 버전입니다. 이 글의 토론에 이미 최신 버전을 게시했습니다.

지금 첨부하겠습니다.

MQLMySQL v2.2 - x64 및 x86용 DLL 프로젝트 소스

이것에서 뭔가를 시도해보십시오. 최신 버전인 것 같습니다.

파일:
MQLMySQL_v2.2.zip  4801 kb
MQL4_x32.zip  1073 kb
MQL5_x32.zip  1073 kb
MQL5_x64.zip  1076 kb
 
Eugeniy Lugovoy:

로그에 표시된 오류에 따르면: 0 11:09:37.742 MySQL-002 EURUSD,H1: `table` 테이블을 만들 수 없습니다.

MySQL 데이터베이스의 키워드 인 "table"이라는 이름을 사용하고 있으며 테이블 이름으로 사용할 수 없으므로 예를 들어 "table1"로 변경하여 작동하는지 확인하십시오.

또는 데이터베이스가 선택되지 않았거나 설정되지 않았을 수 있습니다. 연결 직후 "USE database_name" 명령을 실행할 수 있으며, 여기서 database_name은 데이터베이스의 이름입니다.

예를 들어 내 데이터베이스가 "mysql"인 경우:

DB = MySqlConnect(호스트, 사용자, 비밀번호, 데이터베이스, 포트, 소켓, 클라이언트플래그);

if (DB ==-1) { Print ("연결 실패! 오류:"+MySqlErrorDescription); } else { Print ("연결됨! DBID#",DB);}

MySqlExecute(DB, "USE mysql");

테이블 이름과 MySqlExecute(DB, "USE mt4") 명령에 대한 제안을 따랐지만 여전히 오류 메시지가 표시됩니다:

0 12:51:40.534 스크립트 MySQL-002new EURUSD,M1: 로드에 성공했습니다.

0 12:51:40.549 MySQL-002new EURUSD,M1: 초기화됨

0 12:51:40.549 MySQL-002new EURUSD,M1: MQLMySQL v2.0 데모 저작권 © 2014, 에프엑스코덱스 연구소

0 12:51:40.549 MySQL-002new EURUSD,M1: Host: , 사용자: , 데이터베이스:

0 12:51:40.549 MySQL-002new EURUSD,M1: Connecting...

0 12:51:40.565 MySQL-002new EURUSD,M1: Connected! DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: `test_table` 테이블을 만들 수 없습니다. 오류입니다: 기본 데이터베이스가 없습니다.

0 12:51:40.565 MySQL-002new EURUSD,M1: 연결이 끊어졌습니다. 스크립트 완료!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 스크립트 MySQL-002new EURUSD,M1: removed

 

안녕하세요 유지니 루고보이입니다,

유용한 프로젝트에 감사드립니다.

테이블에서 약 3,000자의 문자열 필드를 읽으려고 하는데, 다음과 같이 "MySqlGetFieldAsString"을 사용했습니다:


if (커서 >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

하지만 문제는 Get_String이 1025자만 반환한다는 것입니다,

그 필드를 완전히 읽어야합니다.

이 문제를 해결하도록 도와주실 수 있나요?

안부

 
FX. MDA7:

안녕하세요 유지니 루고보이입니다,

유용한 프로젝트에 감사드립니다.

테이블에서 약 3,000자의 문자열 필드를 읽으려고 하는데, 다음과 같이 "MySqlGetFieldAsString"을 사용했습니다:


if (커서 >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

하지만 문제는 Get_String이 1025자만 반환한다는 것입니다,

그 필드를 완전히 읽어야합니다.

이 문제를 해결하도록 도와주실 수 있나요?

안녕하세요

예, 문자 데이터의 최대 길이를 1024자로 설정했습니다. 이 제한을 변경하고 DLL을 다시 빌드 할 수 있습니다. 그런데 DB 측에서 해당 열에 어떤 데이터 유형을 사용하고 있습니까?
 
peg:

테이블 이름과 MySqlExecute(DB, "USE mt4") 명령에 대한 제안을 따랐지만 여전히 오류 메시지가 표시됩니다:

0 12:51:40.534 스크립트 MySQL-002new EURUSD,M1: 로드에 성공했습니다.

0 12:51:40.549 MySQL-002new EURUSD,M1: 초기화됨

0 12:51:40.549 MySQL-002new EURUSD,M1: MQLMySQL v2.0 데모 저작권 © 2014, 에프엑스코덱스 연구소

0 12:51:40.549 MySQL-002new EURUSD,M1: Host: , 사용자: , 데이터베이스:

0 12:51:40.549 MySQL-002new EURUSD,M1: Connecting...

0 12:51:40.565 MySQL-002new EURUSD,M1: Connected! DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: `test_table` 테이블을 만들 수 없습니다. 오류입니다: 기본 데이터베이스가 없습니다.

0 12:51:40.565 MySQL-002new EURUSD,M1: 연결이 끊어졌습니다. 스크립트 완료!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 스크립트 MySQL-002new EURUSD,M1: removed

왜 버전이"MQLMySQL v2.0" 인가요? 2.2여야 합니다.
 

훌륭합니다!

MQL5를 사용하여 MQL4용 데이터를 생성했습니다.

쿼리 명령에서 테이블 이름 주위의 작은따옴표를 제거해야 한다는 점을 제외하면 모든 것이 훌륭하게 작동했습니다.

쿼리 ="SELECT Symbol,Composite,Pattern FROM summarytable";

정상 작동

 
Ingvar Engelbrecht:

훌륭합니다!

MQL5를 사용하여 MQL4용 데이터를 생성했습니다.

쿼리 명령에서 테이블 이름 주위의 작은따옴표를 제거해야 한다는 점을 제외하면 모든 것이 훌륭하게 작동했습니다.

쿼리 ="SELECT Symbol,Composite,Pattern FROM summarytable";

정상 작동

예, 대/소문자(mysql은 대소문자를 구분함) 및 특수 기호를 사용하여 테이블 이름을 지정하지 않으려는 경우 따옴표 없이 사용할 수 있습니다. 참고로, 작은따옴표 기호 "'"가 아니라 "`"입니다.

따라서 다음과 같이 쿼리할 수도 있습니다: Query ="SELECT `Symbol`,`Composite`,`Pattern` FROM `summarytable`";

열의 이름을 Symbol로 지정하고 기호 또는 SYMBOL이 아닌 경우

 

안녕하세요 유지니,

모듈을 보내주셔서 감사합니다. 필드 이름을 가져오는 함수를 추가하는 데 도움을 주시겠습니까? 아니면 VC++에서 어떻게 추가할 수 있을까요?

 

안녕하세요!

시스템 win10 64x, 데이터베이스에 연결할 수 없습니다, 도와 주시겠습니까?