如何使用SQlite在QTableView上声明负数



我正在设计一个包含多个字段的主要用户界面。为了缩小这个问题,我创建了一个小型的最小应用程序,它有5列:name、image、dataDatabase、dateTime和coordNumber。

我有一个带有QTableView的主窗口,只要我在QTableView内右键单击,就会打开AddItemDialog,其中包含:

1) nameLineEdit
2) ImLineEdit
3) imageLineEdit
4) dateTimeEdit
5) numLineEdit 

我遇到的问题是,当数字为负数时,我找不到通过AddItemDialog接受numLineEdit的方法目前只保存正数。如何处理此异常?

我读了官方文件,但我不明白。然而,从这个官方来源来看,负数似乎必须被解释为"无限制"值。解释很简短,没有提供任何有用的小例子,所以我仍然不确定如何继续。

我将包括以下申请中最重要的部分,以及我所遵循的程序的相关描述:

我用字段Item.h:创建了一个Item

class Item
{
public:
Item(const double dateTime,
const QString &name = "", const QString &image = "",
int num, const QByteArray &imagesData = QByteArray());
QString name() const { return mName; }
QString image() const { return mImage; }
QByteArray imagesData() const { return mImagesData; }
double dateTime() const { return mDateTime; }
int num() const { return mNumberCoord; } 
private:
QString mName;
QString mImage;
QByteArray mImagesData;
double mDateTime;
int mNumberCoord
};

及其相关项目.cpp

Item::Item(const double dateTime, int num,
const QString &name, const QString &image, int num,
const QByteArray &imagesData) : 
mName(name),
mImage(image),
mImagesData(imagesData),
mDateTime(dateTime),
mNumberCoord(num)
{
}

我创建了一个数据库.h表,其中包含以下参数:

class dataBase : public QObject
{
Q_OBJECT
public:
explicit dataBase(QObject *parent = nullptr);
bool inizializationDataBase(const QString &nameDataBase);
bool configureDataBase();
QString getError() const { return mError; }
bool addItem(const Item &item);
private:
QSqlDatabase mDatabase;
QString mError;
};

及其相关的数据库.cpp文件-我只包括该文件中最重要的一段代码:

#define CREATE_TABLE 
" CREATE TABLE IF NOT EXISTS Fish_Table" 
" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" 
", name TEXT NOT NULL" 
", image TEXT NOT NULL" 
", dataDataBase BLOB NOT NULL" 
", dateTime DOUBLE NOT NULL" 
", num INTEGER NOT NULL)"  
dataBase::dataBase(QObject *parent) : QObject(parent)
{
}
bool dataBase::addItem(const Item &item) {
QSqlQuery q;
q.prepare("INSERT INTO Fish_Table (name, image, dataDatabase, dateTime, num) VALUES (?,?,?,?,?)");
q.addBindValue(item.name());
q.addBindValue(item.image());
q.addBindValue(item.imagesData());
q.addBindValue(item.dateTime());
q.addBindValue(item.num());
bool ok = q.exec();
if (!ok) {
mError = q.lastError().text();
}
return ok;
}

最后是AddItemDialog.cpp,它包含我试图传递给主窗口的QTableView的字段。

AddItemDialog.cpp

void AddItemDialog::on_buttonBox_accepted()
{
QFile dataBase(ui->imageLineEdit->text());
if (!dataBase.open(QIODevice::ReadOnly)) {
QMessageBox::critical(this, "Error", dataBase.errorString());
return;
}
mItem = Item(ui->dateTimeEdit->dateTime(),
ui->nameLineEdit->text(),
ui->ImLineEdit->text(),
ui->numLineEdit->text(),
dataBase.readAll());
dataBase.close();
accept();
}

我希望在QTableView上保存正数或负数,但到目前为止,我只能保存正数。如何处理此异常?

所以答案是肯定的,可以处理负数。出于某些原因,我认为SQL无法做到这一点,但下面是如何处理该异常的一个小例子:

#define CREATE_TABLE 
" CREATE TABLE IF NOT EXISTS Fish_Table" 
" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" 
", name TEXT NOT NULL" 
", image TEXT NOT NULL" 
", dataDataBase BLOB NOT NULL" 
", dateTime DOUBLE NOT NULL" 
", num INTEGER NOT NULL)"  
dataBase::dataBase(QObject *parent) : QObject(parent)
{
}
bool dataBase::addItem(const Item &item) {
QSqlQuery q;
q.prepare("INSERT INTO Fish_Table (name, image, dataDatabase, dateTime, num) VALUES (name,descriptionOfImage,BLOB(actual image), put date&time,-200)");
q.addBindValue(item.name());
q.addBindValue(item.image());
q.addBindValue(item.imagesData());
q.addBindValue(item.dateTime());
q.addBindValue(item.num());
bool ok = q.exec();
if (!ok) {
mError = q.lastError().text();
}
return ok;
}

这也是一个非常有价值的来源。

如果还需要将正数转换为负数,那么这是一个可能的解决方案:

UPDATE Table
SET field= (field * -1)
Where SIGN(field) = -1 

此外,如果有人需要SQL代码作为附加源,这也非常有用。

相关内容

  • 没有找到相关文章

最新更新