我试图将表格中的数据“从QlineEdit表示为整数”
程序编译成功但是当我打开表格和转发数据时,程序设置
她是错误的
Object::connect: No such slot FenArticle::chercheParFamille() in ..\stockmanagement\fenarticle.cpp:113
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
她的代码 *
#include "fenajoutearticle.h"
#include <QIntValidator>
#include <QValidator>
FenAjouteArticle::FenAjouteArticle(QWidget *parent) :
QWidget(parent)
{
resize(500,450);
setWindowModality(Qt::ApplicationModal);
// init member widgets
//*****************************Signals SLots ******************************//
signalSlots();
//***********************************Base de donnée Traitement***********************************//
db = new QSqlDatabase;
*db = QSqlDatabase::addDatabase("QSQLITE") ;
db->setHostName("localhost");
db->setDatabaseName("gestionstockDB.db");
db->setPassword("");
db->setUserName("");
db->open();
if(!db->open())
QMessageBox::critical(this,"Erreur","Erreur connexion base de données") ;
else{
QSqlQuery *chercheParFamilleQuery = new QSqlQuery("select Famille from Produit");
SelectFamille->clear();
while(chercheParFamilleQuery->next())
SelectFamille->addItem(chercheParFamilleQuery->value(0).toString());
QSqlQuery *chercheParUniteQuery = new QSqlQuery("select Unite from Produit");
selectUnit->clear();
while(chercheParUniteQuery->next())
selectUnit->addItem(chercheParUniteQuery->value(0).toString());
}
// basic layouting
}
void FenAjouteArticle::signalSlots()
{
connect(buttonOkUtilisateur,SIGNAL(clicked()),this,SLOT(ajoutDonne())) ;
connect(buttonAnnulerUtilisateur,SIGNAL(clicked()),this,SLOT(close())) ;
}
//********************* Signal Slots coeurs ***********************************//
void FenAjouteArticle::ajoutDonne()
{
if(db->open())
{
QSqlQuery *ajouterDonneeQuery = new QSqlQuery;
ajouterDonneeQuery->prepare("insert into Produit (Reference,Designation,localisation,Famille,Qte_min,Qte_max,Qte_stock,Unite,Prix_achat,Prix_vente) VALUES(:ref,:design,:local,:fam,:qtmin,:qtmax,:qtstock ,:unite,:pachat,:pvente)");
//QString Stock = champStockInit->text();
ajouterDonneeQuery->bindValue(":ref",champRef->text()); // QlineEdit
ajouterDonneeQuery->bindValue(":design",champDesignation->text()); // QlineEdit
ajouterDonneeQuery->bindValue(":local",champLocalisation->text()); // QlineEdit
ajouterDonneeQuery->bindValue(":fam","fam"); // QcomboBox
ajouterDonneeQuery->bindValue(":qtmin",200); // QlineEdit
ajouterDonneeQuery->bindValue(":qtmax",20); // QlineEdit
ajouterDonneeQuery->bindValue(":qtstock",20); // QlineEdit
ajouterDonneeQuery->bindValue(":unite","unite"); // QlineEdit
ajouterDonneeQuery->bindValue(":pachat",20); // QlineEdit
ajouterDonneeQuery->bindValue(":pvente",champPrixVente->text()); // QlineEdit
ajouterDonneeQuery->exec();
}
}
答案 0 :(得分:0)
带有重复的DB消息是由(我猜)该类的多个实例引起的。
在“全局”位置设置数据库连接,例如main()
或主窗口类。 (除了你想要并需要多个连接,但我不认为这在使用sqlite时是好的)
当使用多个连接时,您需要将它们添加到QSqlQuery
构造函数中,否则它将使用默认连接,主要是第一个创建的连接。
现有名为FenArticle::chercheParFamille()
的插槽不应该是足够的消息。也许某些字符不正确或给出的参数与声明不同。
到值绑定,sqlite应该是一个字符串作为整数的值,并且将使用它是正确的,如果值是一个有效的整数。 你也可以使用:
QString intText = lineEdit->text();
bool test = false;
intText.toInt(&test);
if (test == true)
// it is a valid integer, use it
else
// message or whatever