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

 
Eugeniy Lugovoy:

안녕하세요, 제임스입니다,

저는 현재 Upwork에서 하나의 큰 프로젝트만 진행하고 있습니다. 그래서 요즘은 여유 시간이 별로 없어요. 라이브러리에 어떤 문제가 있나요? 어떻게 도와드릴까요?

안녕하세요,

결국 알아냈지만 어쨌든 라이브러리에 감사드립니다.... 매우 도움이 되었습니다!!

James
 

빌드 890 MT4로 업그레이드한 후 모든 것이 작동을 멈춘 이유는 무엇인가요?

로그에 'D:\MT4\MQL4\libraries\MQLMySQL.dll'에서 0x00000000으로 읽은 액세스 위반이 표시됩니다.

 
또한 관심 있는 ...
 
Itum:
또한 관심 있는 ...
여러분, 며칠 후에 확인해보겠습니다.
 
기대해 주세요!
 
alhimik7:
기대해주세요!

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

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

2015.12.05 12:20:09.984 Script MySQL-005 EURUSD,H1: removed
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: uninit reason 0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Passed!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Closing cursors...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 4 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 3 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 2 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 1 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connecting...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: initialized
2015.12.05 12:20:09.968 Script MySQL-005 EURUSD,H1: loaded successfully
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: removed
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: uninit reason 0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[3]: id = 4, code = USDJPY, start_time = 2014.01.03 03:00:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[2]: id = 3, code = EURJPY, start_time = 2014.01.02 00:02:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[1]: id = 1, code = EURUSD, start_time = 2014.01.01 00:00:01
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[0]: id = 123279852, code = ACCOUNT, start_time = 2015.12.05 12:20:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Rows affected: 4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: 4 row(s) selected.
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: SQL> SELECT id, code, start_date FROM `test_table`
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connecting...
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: initialized
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: loaded successfully
2015.12.05 12:20:00.093 Script MySQL-003 EURUSD,H1: removed
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: uninit reason 0
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Rows affected: 2
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Succeeded! 2 rows has been updated.
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Succeeded! 3 rows has been inserted by one query.
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Succeeded: INSERT INTO `test_table` (id, code, start_date) VALUES (123279852,'ACCOUNT','2015.12.05 12:20:00')
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:59.968 MySQL-003 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Connecting...
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: initialized
2015.12.05 12:19:59.953 Script MySQL-003 EURUSD,H1: loaded successfully
2015.12.05 12:19:55.531 Script MySQL-002 EURUSD,H1: removed
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: uninit reason 0
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connecting...
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: initialized
2015.12.05 12:19:55.218 Script MySQL-002 EURUSD,H1: loaded successfully
2015.12.05 12:19:49.625 Script MySQL-001 EURUSD,H1: removed
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: uninit reason 0
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: All connections closed. Script done!
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#2
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#1
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Connecting...
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: initialized
2015.12.05 12:19:49.546 Script MySQL-001 EURUSD,H1: loaded successfully

여러분, 설명해 주세요:

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

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

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

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

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

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

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

 

안녕하세요,

파일을 통해 메타트레이더를 Mysql에 연결하려고 합니다.
다운로드 및 설치 후 내 DB의 정보를 설정하여 "MyConnection"파일을 변경했습니다.

여기에 문제가 있습니다:

처음에는 모든 것이 정상적으로 작동하여 스크립트가 DB 내부에 테이블을 생성했습니다. 그런 다음 코드를 약간 변경하고(테이블 이름만 변경) 데이터베이스에서 테이블을 삭제하여 스크립트가 이전 테이블을 삭제하지 않고 처음부터 새 테이블을 만들도록 했습니다. 그런데 열만 생성되고 데이터는 전혀 생성되지 않았습니다.
그래서 이전 스크립트를 다시 사용하기로 결정했습니다. 그러자 테이블도 생성되지 않고 아무것도 얻지 못했습니다. 그 이후로 DB가 비어 있는 상태로 유지되고 있습니다.

무엇이 잘못되었을 수 있는지에 대한 아이디어가 있으신가요?

미리 감사드립니다!

 
peg:

안녕하세요,

파일을 통해 메타트레이더를 Mysql에 연결하려고 합니다.
다운로드 및 설치 후 내 DB의 정보를 설정하여 "MyConnection"파일을 변경했습니다.

여기에 문제가 있습니다:

처음에는 모든 것이 정상적으로 작동하여 스크립트가 DB 내부에 테이블을 생성했습니다. 그런 다음 코드를 약간 변경하고(테이블 이름만 변경) 데이터베이스에서 테이블을 삭제하여 스크립트가 이전 테이블을 삭제하지 않고 처음부터 새 테이블을 만들도록 했습니다. 그런데 열만 생성되고 데이터는 전혀 생성되지 않았습니다.
그래서 이전 스크립트를 다시 사용하기로 결정했습니다. 그러자 테이블도 생성되지 않고 아무것도 얻지 못했습니다. 그 이후로 DB가 비어 있는 상태로 유지되고 있습니다.

무엇이 잘못되었을 수 있는지에 대한 아이디어가 있으신가요?

미리 감사드립니다!

안녕하세요 Peg,

테이블을 만들려면 SQL 명령을 사용하세요 http://dev.mysql.com/doc/refman/5.7/en/create-table.html.

데이터를 삽입하려면 SQL 명령 INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html 를 사용하세요 .

이러한 명령을 실행하려면 MySqlExecute 함수를 사용하십시오.

또한 코드를 제공해 주시면 문제를 파악할 수 있습니다.

MySQL :: MySQL 5.7 Reference Manual :: 13.1.14 CREATE TABLE Syntax
  • dev.mysql.com
creates a table with the given name. You must have the privilege for the table. Rules for permissible table names are given in Section 9.2, “Schema Object Names”. By default, the table is created in the default database, using the storage engine. An error occurs if the table exists, if there is no default database, or if the database does not...
 
Eugeniy Lugovoy:

안녕하세요 Peg,

테이블을 생성하려면 SQL 명령 CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html 을 사용하세요.

데이터를 삽입하려면 SQL 명령 INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html 를 사용합니다.

이러한 명령을 실행하려면 MySqlExecute 함수를 사용하십시오.

또한 코드를 제공하면 문제를 파악할 수 있습니다.

안녕하세요 유지니님,

링크 주셔서 감사합니다.

처음에는 귀하의 코드를 사용하여 데이터베이스에 연결했습니다 (유용한 경우 mySql Server를 사용하고있었습니다). 그리고 테이블을 볼 수있었습니다. 그런 다음 MySQL-002 스크립트에서 테이블 이름을 변경했는데 (아래에서 볼 수 있듯이) 테이블이 생성되지 않는 것 같았습니다. 이제 WampServer를 사용하고 있습니다:

0 11:09:37.579 스크립트 MySQL-002 EURUSD,H1: 성공적으로 로드되었습니다.

0 11:09:37.730 MySQL-002 EURUSD,H1: 초기화됨

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 데모 저작권 © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , 사용자: , 데이터베이스:

0 11:09:37.730 MySQL-002 EURUSD,H1: Connecting...

0 11:09:37.741 MySQL-002 EURUSD,H1: Connected! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: `table` 테이블을 만들 수 없습니다. 오류가 발생했습니다: 기본 데이터베이스가 없습니다.

0 11:09:37.742 MySQL-002 EURUSD,H1: 연결이 끊어졌습니다. 스크립트 완료!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit reason 0

0 11:09:37.743 스크립트 MySQL-002 EURUSD,H1: 제거됨

//+------------------------------------------------------------------+
//|MySQL-002.mq4 |
//|저작권 2014, 유진 루고보이 |
//|http://www.fxcodexlab.com |
//| 테이블 생성(데모)|
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // 데이터베이스 자격 증명
 int Port,ClientFlag;
 int DB; // 데이터베이스 식별자
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // INI 파일에서 데이터베이스 자격 증명 읽기
 Host = ReadIni(INI, "MYSQL", "Host");
 User = ReadIni(INI, "MYSQL", "User");
 Password = ReadIni(INI, "MYSQL", "Password");
 Database = ReadIni(INI, "MYSQL", "Database");
 Port     = StrToInteger(ReadIni(INI, "MYSQL", "Port"));
 Socket   = ReadIni(INI, "MYSQL", "Socket");
 ClientFlag = StrToInteger(ReadIni(INI, "MYSQL", "ClientFlag"));  

 Print ("Host: ",Host, ", User: ", User, ", Database: ",Database);
 
 // 데이터베이스 연결 열기
 Print ("Connecting...");
 
 DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
 
 if (DB == -1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}
 
 string Query;
 Query = "DROP TABLE IF EXISTS `test`";
 MySqlExecute(DB, Query);
 
 Query = "CREATE TABLE `test` (id int, code varchar(50), start_date datetime)";
 if (MySqlExecute(DB, Query))
    {
     Print ("Table `test` created.");
    }
 else
    {
     Print ("Table `test` cannot be created. Error: ", MySqlErrorDescription);
    }
 
 MySqlDisconnect(DB);
 Print ("Disconnected. Script done!");
}
//+------------------------------------------------------------------+
 
peg:

안녕하세요 유지니님,

링크 주셔서 감사합니다.

처음에는 귀하의 코드를 사용하여 데이터베이스에 연결했습니다 (유용 할 경우를 대비하여 mySql Server를 사용하고있었습니다). 그리고 테이블을 볼 수 있었습니다. 그런 다음 MySQL-002 스크립트에서 테이블 이름을 변경했는데 (아래에서 볼 수 있듯이) 테이블이 생성되지 않는 것 같았습니다. 이제 WampServer를 사용하고 있습니다:

0 11:09:37.579 스크립트 MySQL-002 EURUSD,H1: 성공적으로 로드되었습니다.

0 11:09:37.730 MySQL-002 EURUSD,H1: 초기화됨

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 데모 저작권 © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , 사용자: , 데이터베이스:

0 11:09:37.730 MySQL-002 EURUSD,H1: Connecting...

0 11:09:37.741 MySQL-002 EURUSD,H1: Connected! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: `table` 테이블을 만들 수 없습니다. 오류가 발생했습니다: 기본 데이터베이스가 없습니다.

0 11:09:37.742 MySQL-002 EURUSD,H1: 연결이 끊어졌습니다. 스크립트 완료!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit reason 0

0 11:09:37.743 스크립트 MySQL-002 EURUSD,H1: 제거됨

로그에 표시된 오류에 따르면: 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");