2011-07-31 6 views
4

테이블에 데이터를 삽입하려고합니다.Qt - QSql 삽입을 시도 할 때 행을 가져올 수 없습니다.

CREATE TABLE contacts (
id int primary key, 
first_name varchar(20), 
last_name varchar(20), 
street_address text, 
city varchar(30), 
state varchar(20), 
zip_code varchar(10), 
personal_email varchar(40), 
work_email varchar(40), 
home_phone varchar(12), 
cellular_phone varchar(12), 
work_phone varchar(12), 
pager varchar(12), 
facebook text, 
twitter varchar(20), 
notes text); 

나는이 오류 받고 있어요 : 내가 무엇을 내가 할 수있는 확실하지 않다

QSqlError(-1, "Unable to fetch row", "No query")

을 여기

void AddContacts::saveContact() { 

    QString first_name = ui->lineFirstName->text(); 
    QString last_name = ui->lineLastName->text(); 
    QString street_address = ui->lineStreetAddress->text(); 
    QString city = ui->lineCity->text(); 
    QString state = ui->comboBoxState->currentText(); 
    QString zip_code = ui->lineZip->text(); 
    QString personal_email = ui->linePersonalEmail->text(); 
    QString work_email = ui->lineWorkEmail->text(); 
    QString home_phone = ui->lineHomePhone->text(); 
    QString cellular_phone = ui->lineCellularPhone->text(); 
    QString work_phone = ui->lineWorkPhone->text(); 
    QString pager = ui->linePager->text(); 
    QString facebook = ui->lineFacebook->text(); 
    QString twitter = ui->lineTwitter->text(); 
    QString notes = ui->textEditNotes->toPlainText(); 

    // Insert into the database 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("db.db3"); 
    db.open(); 

    QSqlQuery qry; 
    QString query = "INSERT INTO (id, first_name, last_name, street_address, city, state, zip_code, personal_email, work_email, home_phone, cellular_phone, work_phone, pager, facebook, twitter, notes) VALUES('null','" + first_name + "','" + last_name +"','" + street_address + "','" + city + "','" + state + "','" + zip_code + "','" + personal_email + "','" + work_email + "','" + home_phone + "','" + cellular_phone + "','" + work_phone + "','" + pager + "','" + facebook + "','" + twitter + "', '" + notes + "')"; 
    qry.prepare(query); 

    if(!qry.exec()) { 
     qDebug() << qry.lastError(); 
    } 
    else { 
     qDebug() << "Success!"; 
    } 

나는 테이블을 만드는 데 사용 무엇인가 : 여기 코드는 잘못하고있다. 뭐 찾을 수 있니?

답변

4

id의 값으로 'null' 문자열을 삽입하지 마십시오. 대신에 유효한 정수를 사용하십시오. 첫 번째 행의 ID가 NULL 인 경우 SQL 문은 ... VALUES (NULL, ...처럼 보입니다.

입력 사항에서 아포스트로피를 이스케이프 처리하지 않으므로 코드에 오류가 발생하기 쉽습니다. 일부 텍스트 필드에 '이 있으면 SQL 문이 실패합니다. 열을 변수에 바인딩해야합니다. 이것은 Qt 참조에서 왔으며이 접근법을 사용해야합니다.

QSqlQuery query; 
query.prepare("INSERT INTO contacts (id, first_name, last_name) " 
       "VALUES (:id, :first_name, :last_name)"); 
query.bindValue(":id", 1001); 
query.bindValue(":first_name", first_name); 
query.bindValue(":last_name", last_name); 
query.exec(); 
3

안녕하세요, 저는 쿼리에서 테이블 이름을 놓친 것 같아요.

QString query = "INSERT INTO ??? (id, first_name, last_name, street_address, city, state, zip_code, personal_email, work_email, home_phone, cellular_phone, work_phone, pager, facebook, twitter, notes) VALUES('null','" + first_name + "','" + last_name +"','" + street_address + "','" + city + "','" + state + "','" + zip_code + "','" + personal_email + "','" + work_email + "','" + home_phone + "','" + cellular_phone + "','" + work_phone + "','" + pager + "','" + facebook + "','" + twitter + "', '" + notes + "')"; 
qry.prepare(query); 

내가 그 자리에 물음표를 넣어

관련 문제