2013-03-22 1 views
0

내가 PostgreSQL을 9.1, Qt는 4.8.4을 사용하고 제대로 QT에 대한 PostgreSQL의 드라이버를 구성한 아무것도하지 않고 내 문제는 옆에 PostgreSQL을합니다 작은 프로그램을 사용하여 데이터베이스를 테스트해야하며, 프로그램과 데이터베이스 간의 연결이 정상적으로 작동하는 한 .open() 메서드는 오류를 반환하지 않지만 테이블에 무언가를 삽입하려고하면 오류가 발생합니다. 그것은 단지 그것을하지 않습니다. 아무런 경고도 표시되지 않고 오류도 표시되지 않습니다. 터미널에서 DB를 볼 때 이전과 같아서 아무 일도 일어나지 않습니다 ...삽입 9.1이 작동하는 것 같다하지만 (QT 포스트 그레스 드라이버)

무슨 일입니까? 그건 그렇고 내가 우분투 12.06 64 비트를 사용하여 내 코드는 다음과 같습니다 (방금 QT 위젯 코드 생략), 고마워! :

//Respective headers 

int main(int argc, char *argv[]) 
{ 

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); 

    db.setHostName("localhost"); 
    db.setDatabaseName("database"); 
    db.setUserName("user"); 
    db.setPassword("somepass"); 

    if(!db.open()) 
    { 
     cout << "Database cannot be opened"; 
    } 

        //Unitl here no errors 

QString consulta = "Insert into productos values ('25','25','25)"; 


    //db.transaction(); 

    QSqlQuery query(db); 
    query.prepare(consulta);  //Here tried to pass directly the string with same results 
    query.exec();    //Even omitted .prepare but nothing 
    query.finish(); 


    cout << "Rows affected: " << query.numRowsAffected(); 
    // db.commit(); 

//Finishes ok but no errors 

} 

어느 것이 올바른 방법입니까? 덕분에

시죠 경찰서 데이터베이스 문제가 직접 psql의 쿼리가

+0

왜'db.commit이다() 이라고 코멘트했다. 주석 처리하지 않으면 어떻게됩니까? – kgrittn

+1

'query.exec()'성공한 경우'true'를 리턴하고 그렇지 않으면'false' 인 경우 query.lastError()를 보시오. – SpongeBobFan

+0

또 다른 디버그 아이디어 (미래의 목적을 위해 이제 오류가 발생 함) 분명히) pgadmin 또는 일부 oter 도구에 쿼리 문자열을 복사하여 거기서 실행하려고하면 쿼리의 오류를 쉽게 찾을 수 있습니다. – SpongeBobFan

답변

0

QString consulta = "Insert into productos values ('25','25','25)";
잘 실행 아니에요 당신은
마지막 값에 '를 잊어 (수 있어야 QString consulta = "Insert into productos values ('25','25','25')";)

+0

입니다. 감사합니다. 그냥 ' –