2016-07-14 4 views
1

Windows의 C++ 응용 프로그램에서 libmysqld C 라이브러리를 사용하여 임베디드 mysql 서버, 즉 임베디드 프로세스 수명 동안 온라인 상태 인 mysql 서버와 인터페이스합니다. 데이터베이스를 생성하는 응용 프로그램은 mysql .ini 파일을 사용하여 전역 mysql 설치 폴더 대신 응용 프로그램 디렉토리에 상대적인 datadir을 생성합니다.내장 된 mysql을 사용하여 트리거 만들기 C++

트리거를 프로그래밍 방식으로 만들 수 있습니다.

status = mysql_query(mysql, 
     "CREATE TRIGGER del_trigger AFTER DELETE ON table FOR EACH ROW\ 
     INSERT INTO otherTable (col1, col2) VALUES (OLD.col1, OLD.col2)\ 
     "); 

    if (status == 0) { 
     Log(DEBUG, "Initialize(): <%p> Delete Trigger creation passed ...", this); 
    } 
    else { 
     Log(DEBUG, "Initialize(): <%p> Delete Trigger creation failed with error %s...", this, mysql_error(mysql)); 
    } 

내가 그러나으로 실행하는 문제는 트리거가 호출 될 때, MySQL은 내가 내 응용 프로그램 특정 DATADIR 내부 MySQL 데이터베이스가 없기 때문에 점도 역시 알아두기 바란다 테이블이 존재하지 않는다고 불평 것입니다. 나는 C에 설치 디렉토리에서 MySQL의 폴더를 복사 시도 : \ 프로그램 파일 \ MySQL을 ...하지만 그때 MySQL은

Error:Cannot load from mysql.proc. The table is probably corrupted 

내가 위의 오류에 관한 본 유일한 조언을보고 문제로 실행이다 자신의 datadir을 사용하는 내장 데이터베이스의 경우에는 작동하지 않는 'mysql_upgrade'명령을 실행하십시오. 나는 모든 테이블이 생성되고 각각의 트리거가 설정되지만이 mysql.proc 오류를 해결할 수는 없다.

업데이트 : 나는 또한 여기에 몇 가지 일치하지 않는 행동을보고하고

. 내 MySQL 버전은 "mysql-5.5.16-win32"이고 mysql_embedded.exe 바이너리가있어서 콘솔을 열고 실행되지 않을 때 내 응용 프로그램에서 생성 된 데이터베이스 파일을 가리킬 수있다. mysql_embedded.exe에서 작업을 수행 할 때 트리거는 문제없이 작동합니다 ('mysql.proc은 손상되었을 가능성이 없습니다'오류). 그래서 libmysqld c api가 mysql 시스템 테이블에 문제가있는 것처럼 보입니다.

답변

0

"mysql"데이터베이스가 libmysqld에 포함 된 mysql 버전과 동일한 버전인지 확인하는 것처럼 간단합니다.

const char * version = mysql_get_client_info(); 

이것은 내가 기대했던 "5.5.16"대신 "5.1.44"반환 : 나는 다음을 통해 내 클라이언트 버전 정보를 확인했습니다. 5.1.44 용 mysql ZIP 아카이브를 다운로드하고 datadir에 mysql 데이터베이스를 사용하여 내가 겪고 있던 문제를 해결했다.