20 |
20 |
21 |
21 |
22 bool DB_product::load(Product *prod, QDialog *dialog, int recno) |
22 bool DB_product::load(Product *prod, QDialog *dialog, int recno) |
23 { |
23 { |
24 QSqlQuery query, yquery; |
24 QSqlQuery query, yquery; |
|
25 |
|
26 /* |
|
27 * Upgrade database extra columns for target water. |
|
28 */ |
|
29 query.exec("SHOW COLUMNS FROM `products` LIKE 'tw_name'"); |
|
30 if (! query.first()) { |
|
31 qWarning() << "loadProduct upgrade for target water"; |
|
32 QString sql = "ALTER TABLE `products` ADD `tw_name` VARCHAR(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL AFTER `calc_acid`, "; |
|
33 sql.append("ADD `tw_calcium` FLOAT NOT NULL DEFAULT '0' AFTER `tw_name`, "); |
|
34 sql.append("ADD `tw_sulfate` FLOAT NOT NULL DEFAULT '0' AFTER `tw_calcium`, "); |
|
35 sql.append("ADD `tw_chloride` FLOAT NOT NULL DEFAULT '0' AFTER `tw_sulfate`, "); |
|
36 sql.append("ADD `tw_sodium` FLOAT NOT NULL DEFAULT '0' AFTER `tw_chloride`, "); |
|
37 sql.append("ADD `tw_magnesium` FLOAT NOT NULL DEFAULT '0' AFTER `tw_sodium`, "); |
|
38 sql.append("ADD `tw_total_alkalinity` FLOAT NOT NULL DEFAULT '0' AFTER `tw_magnesium`;"); |
|
39 // qDebug() << sql; |
|
40 query.exec(sql); |
|
41 if (query.lastError().isValid()) { |
|
42 qWarning() << "loadProduct upgrade" << query.lastError(); |
|
43 QMessageBox::warning(dialog, QObject::tr("Database error"), |
|
44 QObject::tr("MySQL error: %1\n%2\n%3") |
|
45 .arg(query.lastError().nativeErrorCode()) |
|
46 .arg(query.lastError().driverText()) |
|
47 .arg(query.lastError().databaseText())); |
|
48 } |
|
49 } |
25 |
50 |
26 query.prepare("SELECT * FROM products WHERE record = :recno"); |
51 query.prepare("SELECT * FROM products WHERE record = :recno"); |
27 query.bindValue(":recno", recno); |
52 query.bindValue(":recno", recno); |
28 query.exec(); |
53 query.exec(); |
29 if (! query.first()) { |
54 if (! query.first()) { |