ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ QSqlTableModel Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SELECT:
QSqlTableModel model;
model.setTable("cd");
model.setFilter("year >= 1998");
model.select();
ΠΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π·Π°ΠΏΡΠΎΡΡ
SELECT * FROM cd WHERE year >= 1998
ΠΡΠΎΡΠΌΠΎΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ QSqlTableModel::record() ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΠ»ΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ value():
for (int i = 0; i < model.rowCount(); ++i) {
QSqlRecord record = model.record(i);
QString title = record.value("title").toString();
int year = record.value("year").toInt();
cerr << qPrintable(title) << ": " << year << endl;
}
Π€ΡΠ½ΠΊΡΠΈΡ QSqlRecord::value() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ, Π»ΠΈΠ±ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ»Ρ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
int titleIndex = model.record().indexOf("title");
int yearIndex = model.record().indexOf("year");
for (int i = 0; i < model.rowCount(); ++i) {
QSqlRecord record = model.record(i);
QString title = record.value(titleIndex).toString();
int year = record.value(yearIndex).toInt();
cerr << qPrintable(title) << ": " << year << endl;
}
ΠΠ»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΠΌ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ Π΄Π΅Π»Π°Π»ΠΈ Π²ΡΡΠ°Π²ΠΊΡ Π² Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ: ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ insertRow() Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Π·Π°ΠΏΠΈΡΠΈ) ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ setData() Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° (ΠΏΠΎΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ).
QSqlTableModel model;
model.setTable("cd");
int row = 0;
model.insertRows(row, 1);
model.setData(model.index(row, 0), 113);
model.setData(model.index(row, 1), "Shanghai My Heart");
model.setData(model.index(row, 2), 224);
model.setData(model.index(row, 3), 2003);
model.submitAll();
ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° submitAll() Π·Π°ΠΏΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Π° Π² Π΄ΡΡΠ³ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π·Π°Π²ΠΈΡΡΡΡΡ ΠΎΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠ·ΠΎΠ² submitAll() Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ false, Π΅ΡΠ»ΠΈ Π²ΡΡΠ°Π²ΠΊΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ.
ΠΠ°ΠΆΠ½ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ SQL ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ SQL ΡΡΠ½ΠΊΡΠΈΠΈ submitAll() Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π²ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠΈ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ QSqlTableModel Π½Π° Π·Π°ΠΏΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ select()). ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»Ρ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ :
QSqlTableModel model;
model.setTable("cd");
model.setFilter("id = 125");
model.select();
if (model.rowCount() == 1) {
QSqlRecord record = model.record(0);
record.setValue("title", "Melody A.M.");
record.setValue("year", record.value("year").toInt() + 1);
model.setRecord(0, record);
model.submitAll();
}
ΠΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠ°Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠΈΠ»ΡΡΡΡ, Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ QSqlTableModel::record(). ΠΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΠΌ Π½Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Π²Π½ΠΎΠ²Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Ρ Π½ΠΎΠ²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ setData(), ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΉ ΠΎΡ SQLβΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠΎΠ»ΡΠΌ Π·Π°ΠΏΠΈΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊΠΈ (Π·Π°ΠΏΠΈΡΠΈ) ΠΈ ΡΡΠΎΠ»Π±ΡΠ° (ΠΏΠΎΠ»Ρ):
model.select();
if (model.rowCount() == 1) {
model.setData(model.index(0, 1), "Melody A.M.");
model.setData(model.index(0, 3),
model.data(model.index(0, 3)).toInt() + 1);
model.submitAll();
}
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅:
model.setTable("cd");
model.setFilter("id = 125");
model.select();
if (model.rowCount() == 1) {
model.removeRows(0, 1);
model.submitAll();
}
Π Π²ΡΠ·ΠΎΠ²Π΅ removeRows() ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΡΡΡΡΡ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ ΡΠΈΠ»ΡΡΡΡ:
model.setTable("cd");
model.setFilter("year < 1990");
model.select();
if (model.rowCount() > 0) {
model.removeRows(0, model.rowCount());
model.submitAll();
}
ΠΠ»Π°ΡΡΡ QSqlQuery ΠΈ QSqlTableModel ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ Qt ΠΈ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ SQL. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΌΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΈΠΌ Π²ΡΡΠ°Π²Π»ΡΡΡ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ Π·Π°ΠΏΠΈΡΠΈ.
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅
ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π ΡΡΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ CD Collection (ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠΎΠ²), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ QSqlTableModel ΠΈ Π΅Π΅ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ QSqlRelationalTableModel ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, Ρ ΡΠ°Π½ΠΈΠΌΡΠΌΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Π°Π²Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Β«masterβdetailΒ» Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠΎΠ² ΠΈ Π΄ΠΎΡΠΎΠΆΠ΅ΠΊ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ° (ΡΠΈΡ. 13.1).
Π ΠΈΡ. 13.1. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ CD Collection.
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
CREATE TABLE artist (
id INTEGER PRIMARY KEY,
name VARCHAR(40) NOT NULL,
country VARCHAR(40));
CREATE TABLE cd (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
artistid INTEGER NOT NULL,
year INTEGER N0T NULL,
FOREIGN KEY (artistid) REFERENCES artist);
CREATE TABLE track (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
duration INTEGER NOT NULL,
cdid INTEGER NOT NULL,
FOREIGN KEY (cdid) REFERENCES cd);
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΊΠ»ΡΡΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ±ΡΠ°ΡΡ ΡΡΠ°Π·Ρ FOREIGN KEY. ΠΡΠΈΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΡΠ»ΠΎΠΊ.
Π ΠΈΡ. 13.2. Π’Π°Π±Π»ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CD Collection.
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΡΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΎΡΠΌΡ Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ°Π²Π»ΡΡΡ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΡΠΈΡΡΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎΡΠΌΡ. ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ, ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΡ ΡΠ΅ΠΊΡΡ ΡΡΠ΅Π΅ΠΊ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π½ΠΎΡΡΡΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Enter ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ Π½Π° Π΄ΡΡΠ³ΡΡ Π·Π°ΠΏΠΈΡΡ.
Π ΠΈΡ. 13.3. ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ArtistForm.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ArtistForm:
01 class ArtistForm : public QDialog
02 {
03 Q_OBJECT
04 public:
05 ArtistForm(const QString &name, QWidget *parent = 0);
06 private slots:
07 void addArtist();
08 void deleteArtist();
09 void beforeInsertArtist(QSqlRecord &record);
10 private:
11 enum {
12 Artist_Id = 0,
13 Artist_Name = 1,
14 Artist_Country = 2
15 };
16 QSqlTableModel *model;
17 QTableView *tableView;
18 QPushButton *addButton;
19 QPushButton *deleteButton;
20 QPushButton *closeButton;
21 };
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π±Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΉ ΠΎΡ SQLβΠΌΠΎΠ΄Π΅Π»ΠΈ:
01 ArtistForm::ArtistForm(const QString &name, QWidget *parent)
02 : QDialog(parent)
03 {
04 model = new QSqlTableModel(this);
05 model->setTable("artist");
06 model->setSort(Artist_Name, Qt::AscendingOrder);
07 model->setHeaderData(Artist_Name, Qt::Horizontal, tr("Name"));
08 model->setHeaderData(Artist_Country, Qt::Horizontal, tr("Country"));
09 model->select();
10 connect(model, SIGNAL(beforeInsert(QSqlRecord &)),
11 this, SLOT(beforeInsertArtist(QSqlRecord &)));
12 tableView = new QTableView;
13 tableView->setModel(model);
14 tableView->setColumnHidden(Artist_Id, true);
15 tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
16 tableView->resizeColumnsToContents();
17 for (int row = 0; row < model->rowCount(); ++row) {
18 QSqlRecord record = model->record(row);
19 if (record.value(Artist_Name).toString() == name) {
20 tableView->selectRow(row);
21 break;
22 }
23 }
24 β¦
25 }
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° QSqlTableModel. ΠΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ this Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΡΡΠΎΠ±Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡΠ°Π»Π° ΡΠΎΡΠΌΠ°. ΠΠ°ΠΌΠΈ Π²ΡΠ±ΡΠ°Π½Π° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΡΡΠΎΠ»Π±ΡΡ 1 (Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ Artist_Name), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ»Ρ ΠΈΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π΅ Π·Π°Π΄Π°Π»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π±Ρ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ. ΠΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΠΌ ΠΈΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ QTableView Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ»Π΅ id ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΠΊΡΡ ΡΠΈΡΠΈΠ½Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π° Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ArtistForm ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΠΌΡ Π°ΡΡΠΈΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π½Π° ΡΠΊΡΠ°Π½ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π·Π°ΠΏΠΈΡΡΠΌ ΡΠ°Π±Π»ΠΈΡΡ artist ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π°ΡΡΠΈΡΡΠ°. ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π½ΠΈΠΌ ΡΠ»ΠΎΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅.