从QlineEdit获取整数值,在sqlite中获取bindit

时间:2013-07-14 08:23:36

标签: sqlite qt4 qlineedit bind-variables

我试图将表格中的数据“从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();

}

}

1 个答案:

答案 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