(c) 2004 Pavel Pindora
Protože jsem potřeboval rychle spíchnout aplikaci pro správu databáze , volil jsem co nejrychlejší cestu a to pomocí Qt Designer . V aplikaci jsem potřeboval nějaký logovací prohlížeč (ListView ) , jedno ok tlačítko,LineEdit a timer, který v daných časových intervalech bude procházet tabulku a hledat záznamy pomocí SQL, dle kriterii.
Klíčová slova použitá v aplikaci :
QTime::currentTime() |
Zjištění aktuálního času , get current time |
QDate::currentDate() |
Zjištění aktuálního datumu , get current date |
setText("...") |
Nastavení textu do LineEdit, set text in
LineEdit. lineEditFrom->setText("..."); |
text(); |
Sejmutí textu z LineEdit , LineEdit get text. QString
neco = lineEditFrom->text(); |
addColumn |
Vložení sloupce v ListView , add column to ListView |
removeColumn |
Smazání sloupce v List View , delete column in ListView |
| QSqlDatabase::drivers() | Pro výpis dostupných SQL pluginů |
| drivers.grep(DB_ADRESS_DRIVER).empty() | Vyhledání zda je požadovaný ovládač k dispozici |
QSqlDatabase::addDatabase |
Napojení na databázi, connect to database |
Database->open() |
Otevření databáze, open database |
Database->exec("SQL") |
Provedení SQL QSqlQuery
query = defaultDB->exec("SQL"); |
QSqlQuery |
Výsledek provedení Database->exec |
| query.isActive() | true or false QSqlQuery
query Database->exec |
| query.next() | Nastaví další řádek (i první) ve výsledku
Database->exec, Set first row
in result of Db->exec |
| query.value(column) | get value from column |
| QTimer | Timer a jeho rutina timerProc |
QFile open(IO_WriteOnly
| IO_Append)), |
Write to file |
QTextStream stream |
Write Stream to file |
| progressBar | Progress Bar |
Potřebné headr file.
#include <qfile.h>
#include <qtimer.h>
#include <qsqldatabase.h>
#include <qlistview.h>
#include <qprogressbar.h>
Nejdříve jsem tedy potřeboval vložit prvek ListView do dialogové aplikace , nato LineEdit, progressBar,...

Timer vyvolává rutinu BaseFromTimerSystem
, kde se dle proměnné startSystem vykonávají části programu,
nejdříve se získá aktuální čas (Time::currentTime())
a ten se nastaví do vloženého prvku lineEdit (lineEditTime)
. Pokud je startSystem==1, sejme se aktuální datum (QDate
dateC = QDate::currentDate();) a uloží do SQLparam2. Smažou se
sloupce v ListView (listView1->removeColumn(0))
a přidají nové (listView1->addColumn("Index");...).
Poté se vyvolá LOG rutina Myservis->WriteLog
, která do ListView vepíše informační řádek, insert info row to ListView.
Zvýší se přepínač (startSystem=1)
, kde se volá obsluha databáze (Myservis->ConnectDB();)
. Dále se vyčkává na uplynutí časového intervalu aby se vše opakovalo
znovu , doba kdy se to vykoná je indikována v progress baru (progBar->setTotalSteps(180);progBar->setProgress(startSystem);)
|
Následuje listing Myservis->ConnectDB(),
který se napojí na databázi (connect to MySQL database) . Nejdříve se vypíšou
(listing all db drivers) všechny dostupné databázové ovládače , které
jsou umístěny v /usr/lib/qt3../plugins/ . Potom se testuje zda je k dispozici
QMYSQL3 ovládač , pomocí drivers.grep,
pokud ano, proběhne napojení na databázi (addDatabase),
nastavíme (set) parameters a otevřeme ji (database open). Zavoláme
rutinu obsluhující SQL a databázi uzavřeme (close database) .
|
Obsluha SQL je zhruba popsána v následujícím listingu.
|
Pokud potřebujeme získat hodnoty z QSqlQuery
query použijeme k tomu query.value(číslo sloupce).
| while( query.next() ) { strKom = query.value(3).toInt(); strDat = query.value(1).toString(); strDbf = query.value(4).toString(); } |
Nakonec si ukážeme aktivaci timeru , obsluhující rutinu timerProc
musíme vložit jako slot
|
|
a zbývá listing logovací funkce WriteLog, ta
nejenže zapisuje do ListView ale i ukládá na disk dle
QFile logfile("/home/host/Log/MySQLSrv.log");
|