我正在编写一个基于sqlite数据库的中等大小的存储数据应用程序。我创建了一个对话框来添加数据到数据库中。在保存数据之前,它将检查一些条件,以确保输入的数据是有效的。这是一个简单的过程,并且很容易发现错误。我确定没有任何错误会在任何时候导致应用程序崩溃。此外,应用程序编译没有错误。有时它可以正常工作,但大多数情况下会崩溃并关闭。
my first question is why does this kind of things happen. (sometimes it works well, sometimes it crashes in the same condition).
how to find faults in this kind of situation. simply what I do is, I use to change the logic and change the code, thinking that it will change the binary and correct the errors.
ex:-
if(query.exec()){ //codes here. }
I will replace this code with
bool ok=query.exec(); if(ok){ //code here.... }
请在这种情况下帮助我,任何建议都将非常感激。我将添加导致应用程序崩溃的newMember.h
和newMember.cpp
文件(这是我的新成员
对话框类)。如果需要更多数据,请告诉我,我会添加它们。
错误报告中,在错误签名中提到了ModName:qtgui4.dll,Offset:000c14e6
newMember.h
#ifndef NEWMEMBER_H
#define NEWMEMBER_H
#include "ui_newmember.h"
class newMember : public QDialog, private Ui::newMember
{
Q_OBJECT
private:
QString path_1;
QPixmap pic;
public:
newMember(QString str, QWidget *parent );
public slots:
void browse();
void save_2();
};
#endif // NEWMEMBER_H
newMember.cpp
#include "newmember.h"
#include<QtGui>
#include<QtSql/QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
newMember::newMember(QString str, QWidget *parent)
{
setupUi(this);
lineEdit_7->setText(str);
radioButton->setChecked(true); ;
connect(pushButton,SIGNAL(clicked()),this,SLOT(browse()));
connect(pushButton_2,SIGNAL(clicked()),this,SLOT(save_2()));
}
void newMember::browse(){
path_1=QFileDialog::getOpenFileName(this,"choose an image for the new house", QString::null,"Image Files (*.jpg *.bmp)");
pic.load(path_1);
pic=pic.scaled(284,213,Qt::KeepAspectRatio, Qt::SmoothTransformation);
label_14->setPixmap(pic);
}
QString input1(QString str){
if(str=="")
return "-NA-";
else
return str;
}
void newMember::save_2(){
QByteArray array;
QBuffer buf(&array);
buf.open( QIODevice::WriteOnly);
pic.save(&buf,"jpg");
QString mof;
if(radioButton->isChecked())mof="male";
if(radioButton_2->isChecked())mof="female";
QString isgm="false";
if(checkBox->isChecked())isgm="true";
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("data");
db.open();
QSqlQuery query;
query.exec("create table members(aname text, homeno text, namein text, fname text, onames text, nic text, sex text, bday text,gm text,occupation text,contactno text,qulification text,note text, img BLOB) ");
if(lineEdit_8->text()==""){
QMessageBox::about(this,"error","you should enter a name to identify this member \n within the specific house");
return;
}
query.prepare("select aname from members where homeno=? and aname=? ");
query.bindValue(0,lineEdit_7->text());
query.bindValue(1,lineEdit_8->text());
query.exec();
if(query.next()){
QMessageBox::about(this, "error", "the name you entered to identify this member \n is already available, please enter another one") ;
return;
}
if(isgm=="true"){
query.prepare("select aname from members where homeno=? and gm=?");
query.bindValue(0,lineEdit_7->text());
query.bindValue(1,"true");
query.exec();
if(query.next()){
QMessageBox::about(this, "error", "there is a gruha mulikaya set already");
return;
}
}
query.prepare("insert into members(aname, homeno , namein , fname , onames , nic , sex , bday ,gm ,occupation ,contactno ,qulification ,note ,img) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ");
query.bindValue(0,lineEdit_8->text());
query.bindValue(1,input1(lineEdit_7->text()));
query.bindValue(2,input1(lineEdit->text()));
query.bindValue(3,input1(lineEdit_2->text()));
query.bindValue(4,input1(lineEdit_3->text()));
query.bindValue(5,input1(lineEdit_4->text()));
query.bindValue(6,mof);
query.bindValue(7,dateEdit->date().toString("yyyy-MM-dd") );
query.bindValue(8,isgm);
query.bindValue(9,input1(lineEdit_5->text()));
query.bindValue(10,input1(lineEdit_6->text()));
query.bindValue(11,input1(textEdit->toPlainText()));
query.bindValue(12,input1(textEdit_2->toPlainText()));
query.bindValue(13,array);
bool ok=query.exec();
if(!ok){
QSqlError error;
error=query.lastError();
QMessageBox::about(this,"error",error.text() );
}
else{
QMessageBox::about(this,"message","data added successfully");
newMember::close();
}
}
程序意外终止.
在此之前有4行如下:QSqlDatabasePrivate::addDatabase: 重复的连接名 'qt_sql_default_connection',旧连接已被删除。
- danial weaber