현재 구현 버전에서 INSERT 작업 후 (AUTO_INCREMENT 열이 있는 테이블에서) "LAST_INSERT_ID"를 검색할 수 있는 방법이 있나요?
미리 감사 드리며 좋은 하루 되세요 :)
안녕하세요 arsenico42 님, 한 쿼리에서 삽입을 한 다음 다른 쿼리에서 LAST_INSERT_ID를 선택하는 방법을 시도 할 수 있지만 LAST_INSERT_ID는 전역 데이터베이스 변수를 반환하는 함수이며 원래 삽입과 LAST_INSERT_ID 선택 사이에 다른 삽입 (다른 사용자로부터 동시에 실행되는)이 LAST_INSERT_ID 값에 영향을 줄 수 있으므로이 방법을 권장 할 수는 없습니다.
이것은 라이브러리에 의존하는 것이 아니라 mysql/mariadb의 작동 방식입니다.
하지만 데이터베이스 측에서 필요한 값을 삽입하는 함수를 생성하고 LAST_INSERT_ID를 선택한 후 이 ID를 함수 값으로 반환하는 것이 좋을 것 같습니다:
CREATE FUNCTION `import_funds_add`(
`p_file_name` varchar(64),
`p_full_path` varchar(2000),
`p_status` VARCHAR(10),
`p_error` VARCHAR(2000)
)
RETURNS bigint(20)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
BEGIN
declare id bigint;
INSERT INTO import_funds(`file_name`, `full_path`, `status`, `error`, `creation_date`)
VALUES (p_file_name, p_full_path, p_status, p_error, now());
SELECT LAST_INSERT_ID() INTO id;
RETURN(id);
END;;
그리고 MQL에서는 쿼리를 위해 커서를 열어야 합니다:
qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id";
를 입력한 다음 일반 커서에서 값을 가져오고 커서를 닫아야 합니다.
따라서 MQL에서는 이러한 명령을 별도로 사용하는 대신 DB 쪽에서 함수로 결합하면 됩니다.
"'ReadIni'를 호출할 수 없습니다, '..\libraries\MQLMySQL.dll'이 로드되지 않았습니다."
"C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\" 폴더에 MQLMySQL.dll 및 MQLMySQL.def 파일이 있는지 확인합니다.
보시다시피, 테스터 모드에서 MQL 프로그램을 실행하는 경우 UAC로 인해 라이브러리 경로가 달라집니다.
여러 문에 오류가 발생했습니다: SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 가까운 곳에 사용할 올바른 구문을 확인하세요.
데이터베이스 연결 열기 시 다중 문 클라이언트 플래그를 설정했는지 확인하세요.
int ClientFlag = CLIENT_MULTI_STATEMENTS; // 다중 문 플래그 설정하기int DB;
DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // 데이터베이스에 연결
caching_sha2_password 지원은 어떻게 하나요? 이를 처리 할 수있는 방법이 있습니까 아니면 그냥 mysql_native_password를 설치합니까?
지금까지 네이티브 만 지원됩니다. 이 솔루션에서 sha2 지원이 정말 필요한 사람이 있습니까?
그래서 데이터베이스 서버가 로컬에 있지 않거나 심지어 VPN 아래에 있지 않습니까?
안녕하세요 @EugeniyLugovoy, 수고해주셔서감사합니다!
현재 구현 버전에서 INSERT 작업 후 (AUTO_INCREMENT 열이 있는 테이블에서) "LAST_INSERT_ID"를 검색할 수 있는 방법이 있나요?
미리 감사드리며 좋은 하루 되세요 :)안녕하세요 @EugeniyLugovoy, 수고해주셔서감사합니다!
현재 구현 버전에서 INSERT 작업 후 (AUTO_INCREMENT 열이 있는 테이블에서) "LAST_INSERT_ID"를 검색할 수 있는 방법이 있나요?
미리 감사 드리며 좋은 하루 되세요 :)안녕하세요 arsenico42 님, 한 쿼리에서 삽입을 한 다음 다른 쿼리에서 LAST_INSERT_ID를 선택하는 방법을 시도 할 수 있지만 LAST_INSERT_ID는 전역 데이터베이스 변수를 반환하는 함수이며 원래 삽입과 LAST_INSERT_ID 선택 사이에 다른 삽입 (다른 사용자로부터 동시에 실행되는)이 LAST_INSERT_ID 값에 영향을 줄 수 있으므로이 방법을 권장 할 수는 없습니다.
이것은 라이브러리에 의존하는 것이 아니라 mysql/mariadb의 작동 방식입니다.
하지만 데이터베이스 측에서 필요한 값을 삽입하는 함수를 생성하고 LAST_INSERT_ID를 선택한 후 이 ID를 함수 값으로 반환하는 것이 좋을 것 같습니다:
그리고 MQL에서는 쿼리를 위해 커서를 열어야 합니다:
qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id";를 입력한 다음 일반 커서에서 값을 가져오고 커서를 닫아야 합니다.
따라서 MQL에서는 이러한 명령을 별도로 사용하는 대신 DB 쪽에서 함수로 결합하면 됩니다.
라이브 시스템의 예시일 뿐입니다.
안녕하세요 엘루고보이
멋진 기사와 훌륭한 라이브러리입니다.
MT5에서 예제를 사용하려고 하는데 이 오류가 발생하고 있습니다:
2014.12.15 15:44:16.387 MySQL-001 'C:\사용자\....\앱데이터\로밍\MetaQuotes\터미널\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' 64비트 버전이 아닙니다.
32비트 환경에서 MT5를 실행하고 계신가요?
도와주실 수 있나요?
정말 감사합니다!
카민 마론.
안녕하세요 Carmine 님, github의 소스에서 x64 버전을 다운로드할 수 있습니다.
https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL/x64/Release
안녕하세요 , 먼저 커뮤니티에 기여해 주신@Eugeniy Lugovoy님께 감사드립니다.
문제가 생겼습니다:
"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]
안녕하세요 , 먼저 커뮤니티에 기여해주신 모든 분들께 감사드립니다.
문제가 생겼습니다:
"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]
"C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\" 폴더에 MQLMySQL.dll 및 MQLMySQL.def 파일이 있는지 확인합니다.
보시다시피, 테스터 모드에서 MQL 프로그램을 실행하는 경우 UAC로 인해 라이브러리 경로가 달라집니다.
다중 삽입 가져오기 오류.
여러 문에 오류가 발생했습니다: SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 가까운 곳에 사용할 올바른 구문을 확인하세요.
다중 삽입 가져오기 오류가 발생했습니다.
여러 문에 오류가 발생했습니다: SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 가까운 곳에 사용할 올바른 구문을 확인하세요.
데이터베이스 연결 열기 시 다중 문 클라이언트 플래그를 설정했는지 확인하세요.