2011-07-31 7 views
4

テーブルにデータを挿入しようとしています。ここで、コードは次のとおりです。ここでQt - QSql行をフェッチできません。挿入しようとするとクエリがありません。

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!"; 
    } 

は、私は、テーブルを作成するために使用されるものです:

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")

私は何を私ができるかわかりません間違っている。何かを見つけることができますか?

答えて

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); 

は、私はその代わりに疑問符をつけ

関連する問題