Редакция 56 | Редакция 62 | К новейшей редакции | Авторство | Сравнить с предыдущей | Последнее изменение | Открыть журнал | Скачать | RSS
#include "mysql.h"
MySql::MySql(QObject *parent) :
QObject(parent)
{
}
/************************************************
** Ôóíêöèÿ ïðèñâîåíèÿ çíà÷åíèÿ èìåíè áàçû äàííûõ
**
************************************************/
void MySql::setDatabaseName(QString name){
MySql::sqlDatabaseName = name;
}
bool MySql::connect(){
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(MySql::sqlHostName);
db.setDatabaseName(MySql::sqlDatabaseName);
db.setUserName(MySql::sqlUserName);
db.setPassword(MySql::sqlPassword);
bool ok = db.open();
if (ok) return true;
else {
MySql::mysqlLastError = db.lastError().text();
return false; }
/*
pdb->setHostName(hostName);
pdb->setDatabaseName(baseName);
pdb->setUserName(userName);
pdb->setPassword(password);
bool ok = pdb->open();
if (!ok) {
QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
QWidget(this->parent()), // Ðîäèòåëüñêèé âèäæåò.
QObject::tr("Database Error"), // Çàãîëîâîê.
db.lastError().text()); // Òåêñò ñîîáùåíèÿ.
}
*/
return true;
}
void MySql::setUserName(QString uname){
MySql::sqlUserName = uname;
}
void MySql::setPassword(QString passwrd){
MySql::sqlPassword = passwrd;
}
void MySql::setHostName(QString hname){
MySql::sqlHostName = hname;
}
bool MySql::createTable(SqlTable* table){ // ñîçäàåò â áàçå äàííûõ òàáëèöó
QSqlQuery q;
bool ok;
ok = q.prepare(table->sqlString());
if(!ok) {
MySql::mysqlLastError = q.lastError().text();
return false;}
ok = q.exec();
if(!ok) {
MySql::mysqlLastError = q.lastError().text();
return false;}
else return true;
}
QString MySql::lasError(){
return MySql::mysqlLastError;
}
/************************************************
** Ôóíêöèÿ ñîçäàåò íåîáõîäèìûå òàáëèöû â áàçå äàííûõ
** äëÿ õðàíåíèÿ íàçâàíèÿ è îïèñàíèÿ êëàññîâ
** (Òàáëèöà ListOfClasses è Òàáëèöà DescriptionOfClasses)
************************************************/
bool MySql::createDataBase(){
SqlTable* tbl;
TableField* fld;
if (!db.isOpen()){
MySql::mysqlLastError = tr("Database is not open!");
return false;
}
tbl = new SqlTable(tr("ListOfClasses")); // ñîçäàäèì òàáëèöó ñ èìåíåì ListOfClasses äëÿ õðàíåíèÿ ñïèñêà êëàññîâ
fld = new TableField(tr("ClassName"), tbl); // ýòî âòîðîå ïîëå òàáëèöû áóäåò õðàíèòü èìåíà êëàññîâ, ïåðâîå ïîëå ID óæå èìååòñÿ â íîâîé òàáëèöå (îíî ñîçäàåòñÿ ïî óìîë÷àíèþ)
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("ClassAlias"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class alias")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("TableWhithInstance"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class instance")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("Comment"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("without comments")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
if(!MySql::createTable(tbl)){ // åñëè íå óäàåòñÿ ñîçäàòü òàáëèöó
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return false; // âûâîäèì îøèáêó
}
else { // òàáëèöó óñïåøíî ñîçäàíà
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return true; // ñîîáùàåì îá óñïåõå
}
tbl = new SqlTable(tr("DescriptionOfClasses")); // ñîçäàäèì òàáëèöó ñ èìåíåì DescriptionOfClassess äëÿ õðàíåíèÿ îïèñàíèÿ ïîëåé êëàññîâ
fld = new TableField(tr("FieldName"), tbl); // ýòî âòîðîå ïîëå òàáëèöû áóäåò õðàíèòü èìåíà ïîëåé, ïåðâîå ïîëå ID óæå èìååòñÿ â íîâîé òàáëèöå (îíî ñîçäàåòñÿ ïî óìîë÷àíèþ)
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New field")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("FieldAlias"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû ïîëåé êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class alias")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("FieldType"), tbl); // ýòî ÷åòâåðòîå ïîëå òàáëèöû áóäåò òèï ïîëÿ êëàññà
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("CHAR(30)")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("ClassIdentifer"), tbl); // ýòî ïÿòîå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(false); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("INT(10)")); // òèï ïîëÿ - öåëîå ÷èñëî
fld->setDefaultValue(tr("NULL")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("Comment"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("without comments")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
if(!MySql::createTable(tbl)){ // åñëè íå óäàåòñÿ ñîçäàòü òàáëèöó
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return false; // âûâîäèì îøèáêó
}
else { // òàáëèöó óñïåøíî ñîçäàíà
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return true; // ñîîáùàåì îá óñïåõå
}
}
bool MySql::createListOfClassesTable(){
SqlTable* tbl;
TableField* fld;
if (!db.isOpen()){
MySql::mysqlLastError = tr("Database is not open!");
return false;
}
tbl = new SqlTable(tr("ListOfClasses")); // ñîçäàäèì òàáëèöó ñ èìåíåì ListOfClasses äëÿ õðàíåíèÿ ñïèñêà êëàññîâ
fld = new TableField(tr("ClassName"), tbl); // ýòî âòîðîå ïîëå òàáëèöû áóäåò õðàíèòü èìåíà êëàññîâ, ïåðâîå ïîëå ID óæå èìååòñÿ â íîâîé òàáëèöå (îíî ñîçäàåòñÿ ïî óìîë÷àíèþ)
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("ClassAlias"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class alias")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("TableWhithInstance"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class instance")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("Comment"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("without comments")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
if(!MySql::createTable(tbl)){ // åñëè íå óäàåòñÿ ñîçäàòü òàáëèöó
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return false; // âûâîäèì îøèáêó
}
else { // òàáëèöó óñïåøíî ñîçäàíà
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return true; // ñîîáùàåì îá óñïåõå
}
}
bool MySql::createDescriptionOfClassesTable(){ // ñîçäàåò íåîáõîäèìóþ òàáëèöó â áàçå äàííûõ äëÿ õðàíåíèÿ îïèñàíèÿ êëàññîâ (Òàáëèöà DescriptionOfClasses)
SqlTable* tbl;
TableField* fld;
if (!db.isOpen()){
MySql::mysqlLastError = tr("Database is not open!");
return false;
}
tbl = new SqlTable(tr("DescriptionOfClasses")); // ñîçäàäèì òàáëèöó ñ èìåíåì DescriptionOfClassess äëÿ õðàíåíèÿ îïèñàíèÿ ïîëåé êëàññîâ
fld = new TableField(tr("FieldName"), tbl); // ýòî âòîðîå ïîëå òàáëèöû áóäåò õðàíèòü èìåíà ïîëåé, ïåðâîå ïîëå ID óæå èìååòñÿ â íîâîé òàáëèöå (îíî ñîçäàåòñÿ ïî óìîë÷àíèþ)
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New field")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("FieldAlias"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû ïîëåé êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("New class alias")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("FieldType"), tbl); // ýòî ÷åòâåðòîå ïîëå òàáëèöû áóäåò òèï ïîëÿ êëàññà
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("CHAR(30)")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("DefaultValue"), tbl); // ýòî ÷åòâåðòîå ïîëå òàáëèöû áóäåò òèï ïîëÿ êëàññà
fld->setNotNull(false); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("NULL")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("ClassIdentifer"), tbl); // ýòî ïÿòîå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(false); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("INT(10)")); // òèï ïîëÿ - öåëîå ÷èñëî
fld->setDefaultValue(tr("NULL")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
fld = new TableField(tr("Comment"), tbl); // ýòî òðåòüå ïîëå òàáëèöû áóäåò õðàíèòü ïñåâäîíèìû êëàññîâ
fld->setNotNull(true); // ïîëå íå ìîæåò áûòü ïóñòûì
fld->setType(tr("CHAR(30)")); // òèï ïîëÿ - ñòðîêà èç 30 ñèìâîëîâ
fld->setDefaultValue(tr("without comments")); // çíà÷åíèå ïîëÿ ïî óìîë÷àíèþ
tbl->append(fld); // äîáàâëÿåì ïîëå â òàáëèöó
if(!MySql::createTable(tbl)){ // åñëè íå óäàåòñÿ ñîçäàòü òàáëèöó
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return false; // âûâîäèì îøèáêó
}
else { // òàáëèöó óñïåøíî ñîçäàíà
// delete fld;
delete tbl; // ÷èñòèì çà ñîáîé
return true; // ñîîáùàåì îá óñïåõå
}
}