2014-12-08 5 views
2

qt 생성자를 사용하여 GUI 응용 프로그램을 설계하고 있습니다. 거기에 버튼을 누르면 .csv 파일의 값이 sqlite3 데이터베이스 테이블로 가져옵니다.쉘 스크립트 실행 - 오류 처리

QProcess를 사용하여 데이터 가져 오기 명령이 포함 된 셸 스크립트를 시작했습니다.

echo -e '.separator ","\n.import import_table.csv test_table' | sqlite3 testdatabase.db 

이 방법 뒤에 이유 데로 가져 오기위한

void MainWindow::on_pushButton_clicked() 
{ 
    QProcess process; 
    process.startDetached("/bin/sh", QStringList()<< "/home/aj/myscript.sh"); 
} 

및 myscript.sh는 점 명령이 사용자 정의 구문 분석 솔루션을 만들지 않고 C++ GUI 프로그램에 직접 통합 할 수 없다.

이제이 접근법 (QProcess 및 쉘 스크립트)은 저에게 적합합니다. 그러나 한 병 목은 오류 처리/식별을 제공하지 않습니다.

예를 들어 가져 오기 명령이 데이터 검색 중에 중간에 중지되거나 .csv의 모든 값을 가져 오지 않으면 문제를 알 수 없습니다. 가져 오는 동안 문제가 발생했는지 알 수있는 방법이 있습니까 ??? (QDebug를 통해 메시지를 리디렉션하는 경우)

+1

보다는 별도의 프로세스에서 실행하는 스크립트를 사용하여 필요 QSqlDatabase 및 QSqlQuery? http://qt-project.org/doc/qt-4.8/qsqlquery.html – TheDarkKnight

+1

QSqlDatabase를 사용해 보았습니다. 문제는 .import 및 .separator와 같은 명령이 쿼리를 통과하지 못했기 때문입니다. – RicoRicochet

+1

이 작업이 도움이됩니까? http://qt-project.org/forums/viewthread/37026 – TheDarkKnight

답변

4

QProcess에는 exitCode()이라는 멤버 함수가 있는데, 이상하게도 프로세스의 종료 코드가 반환됩니다. 그 답을 찾기

http://qt-project.org/doc/qt-5/qprocess.html

같은, 당신은 Qt의 자신의 클래스를 사용할 수 없습니다, 10 초 문서에 대한 구글에서 검색 ...

+1

exitcode()는 의심의 여지없이 도움이되지만 직접 데이터베이스 관련 오류를 검색합니까 ??? qDebug와 같이 db.lastError()를 볼 수 있습니다. exitcode()와 비슷한 작업을 할 수 있습니까 ??? 그것은 단지 int int를 제공합니까 ??? – RicoRicochet

+2

생성 된 프로세스의 stderr 출력을 분석하고 싶다면'QProcess'에도이 메소드가 있습니다. 그러나 오류 출력을 분석하기 시작한다면 인 - 프로세스 라이브러리를 사용하여 외부 스크립트가 아닌 데이터베이스와 통신해야합니다. –