[英]QT - empty QLineEdits not being passed as NULL when writing to SQL database
我是QT和C ++的新手,正在嘗試為數據庫做一個基本的前端。
我遇到了一個障礙,其中QlineEdits
保留為空或空白,將空數據寫入數據庫。 我的意思是,如果我select * where 'column'is NULL
,則不會得到任何結果。 但是,如果我select * where 'column' = ''
那么我將得到所有empty
行。
有什么辦法可以改變這種行為? 還是將它們寫為NULL? 我擔心這也會對我希望數據庫將QlineEdit
數據存儲為整數的字段造成嚴重破壞,但它會嘗試在空白區域寫入。
我可以將QlineEdits
為0
即
ui->txt_NAF->setText();
但這不會消除人為錯誤。
有人對此問題有解決方案嗎?
下面的用於插入數據庫(SQL Server)的QT代碼片段;
void log::on_pushButton_clicked() /* this is my save button */
{
MainWindow conn;
QString BANK_MNTH, BUSN_MNGR, CUST_FRST_NAME, CUST_LAST_NAME, DEAL_NUMB ,COST;
BANK_MNTH=ui->txt_BANK_MNTH->text();
BUSN_MNGR=ui->txt_BUSN_MNGR->text();
CUST_FRST_NAME=ui->txt_CUST_FRST_NAME->text();
CUST_LAST_NAME=ui->txt_CUST_LAST_NAME->text();
DEAL_NUMB=ui->txt_DEAL_NUMB->text();
COST=ui->txt_NAF->text();
if(!conn.connOpen()){
qDebug()<<"Failed to open database";
return;
}
conn.connOpen();
QSqlQuery qry;
qry.prepare("insert into LOG (BANK_MNTH, BUSN_MNGR, CUST_FRST_NAME, CUST_LAST_NAME, DEAL_NUMB ,COST) values ('"+BANK_MNTH +"','"+BUSN_MNGR+"','"+CUST_FRST_NAME+"','"+CUST_LAST_NAME+"','"+DEAL_NUMB+"','"+COST+"')");
if(qry.exec( ))
{
QMessageBox::critical(this,tr("Save"),tr("Record Saved"));
QSqlQueryModel * modal=new QSqlQueryModel();
QSqlQuery* qry2=new QSqlQuery(conn.mydb);
qry2->prepare("select DEAL_NUMB, BUSN_MNGR, CUST_FRST_NAME, CUST_LAST_NAME, COST from LOG order by DEAL_NUMB DESC");
qry2->exec();
modal->setQuery(*qry2);
ui->tableView->setModel(modal);
ui->tableView->resizeColumnsToContents();
ui->tableView->setAlternatingRowColors(true);
conn.connClose();
foreach(QLineEdit *log, this->findChildren<QLineEdit*>()) {
log->clear();
}
}
else
{
QMessageBox::critical(this,tr("Error"),qry.lastError().text());
}
}
是的,您可以將它們寫為NULL。
使用占位符插入值,並使用以下函數傳遞空QVariant
以添加NULL。
void QSqlQuery::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType = QSql::In)
您的代碼可能看起來像這樣...(為您的想法添加了一些變量...)
編寫一個准備聲明以使用占位符insert
。
query.prepare("INSERT INTO LOG (BANK_MNTH, BUSN_MNGR, CUST_FRST_NAME) "
"VALUES (:BankMonth, :BusManager, :CustFirstName)");
現在,您將BankMonth,BusManager和CustFirstName作為insert
語句的占位符。
現在,將值綁定到占位符,如下所示。
使用三元運算符或任何方便的方法。 檢查文本是否為空,如果是,則將QVariant(QVariant::String)
傳遞為NULL,否則傳遞文本。
//Some rough code (Not compiled and tested)
BANK_MNTH=ui->txt_BANK_MNTH->text();
BUSN_MNGR=ui->txt_BUSN_MNGR->text();
CUST_FRST_NAME=ui->txt_CUST_FRST_NAME->text();
query.bindValue(":BankMonth", BANK_MNTH.trimmed().isEmpty() ? QVariant(QVariant::String): BANK_MNTH);
query.bindValue(":BusManager", BUSN_MNGR.trimmed().isEmpty() ? QVariant(QVariant::String): BUSN_MNGR);
query.bindValue(":CustFirstName", CUST_FRST_NAME.trimmed().isEmpty() ? QVariant(QVariant::String): CUST_FRST_NAME);
請參閱bindValue
文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.