Tässä esimerkki kuvaa tiedon hakua olemassa olevasta tietokannasta. Esimerkissä tietokanta on Sqlite tyyppinen ja sen nimi on db. Ensimmäinen koodin osa kannattaa tehdä pääohjelmaan.
QFileInfo dbfile("db"); if(dbfile.exists()){ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("db"); if (!db.open()) { QMessageBox::critical(0, qApp->trUtf8("Projektia ei voitu avata"), qApp->trUtf8("Projektia ei voitu avata (ei tietokantayhteyttä)." ), QMessageBox::Close); return false; }
Esimerkki funktiosta, joka hakee machine taulusta rivin, jossa ActiveMachine kentän arvo on yksi
int MachineData::GetActiveMachinenID() { int rows,machineid; QSqlQueryModel model; model.setQuery("SELECT machine_id, ActiveMachine, NoCylinders, NoSensors FROM machine WHERE ActiveMachine = 1"); rows= model.rowCount(); if(rows<1) { QMessageBox::critical(0, trUtf8("Koneasetuksissa virhe,MachineData::GetActiveMachinenID"), tr("Asetustietokannassa ei ole koneen asetuksia.\n Kone ei toimi!"), QMessageBox::Close); } if(rows>1) { QMessageBox::critical(0, trUtf8("Koneasetuksissa virhe,MachineData::GetActiveMachinenID"), tr("Asetustietokannassa on useita aktiivisia koneen asetuksia.\n Kone ei toimi!"), QMessageBox::Close); } NumberOfSensors= model.record(0).value("NoSensors").toInt();//sijoitetaan kenttien arvot jäsenmuuttujiin NumberOfCylinders= model.record(0).value("NoCylinders").toInt(); machineid=model.record(0).value("machine_id").toInt(); return machineid; }
Sql esitys tietokannasta
CREATE TABLE machine ( machine_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, customerName Text, customerTel Text, customerContact Text, machineName Text, NoCylinders Integer, NoSensors Integer, EstablishmentTime DATETIME, ProjectNumber integer, --tämä on testauskoneen projektin numero siis EI testausprojektin ActiveMachine Boolean, --1=konekonfiguraatio on käytössä, muilla ehdottomasti 0 muuten kone sekoaa simulated BOOLEAN NOT NULL );