Subversion Repositories OpenInventory

Rev

Rev 39 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#include "sqltable.h"

SqlTable::SqlTable(QString tname, QObject *parent) :
   QObject(parent)
{

    tableName = tname;
    field_tmp = new TableField("ID", this); // ïðè ñîçäàíèè òàáëèöû äîáàâèì ïîëå "ID" (ñ÷åò÷èê)
    field_tmp->setType(tr("INT(10)"));
    field_tmp->setAutoIncrement(true);
    tableFields.append(field_tmp); // äîáàâëÿåì íîâîå ïîëå (óêàçàòåëü) â ñïèñîê (óêàçàòåëåé) ïîëåé
    tablePrimaryKey = field_tmp->name(); // äåëàåì íàøå åäèíñòâåííîå ïîëå ïåðâè÷íûì êëþ÷îì
    tablePrimaryKeyIndex = 0;
    tableEngine = tr("MyISAM");
    tableCharacterSet = tr("cp1251");
    SqlTable::createSqlString();
    //delete field_tmp;
}

/***************************************************************************************
** ôóíêöèÿ ïðèñâàèâàåò èìÿ òàáëèöå, íîâîå èìÿ ïåðåäàåòñÿ â ïàðàìåòðå ôóíêöèè tname
**
**
***************************************************************************************/



void SqlTable::setName(QString tname){
    SqlTable::tableName = tname;
    SqlTable::createSqlString();
}

/***************************************************************************************
** ôóíêöèÿ âîçâðàùàåò èìÿ òàáëèöû
**
**
***************************************************************************************/



QString SqlTable::name(){

    return SqlTable::tableName;
}


/***************************************************************************************
** ôóíêöèÿ âîçâðàùàåò ñïèñîê óêàçàòåëåé íà ïîëÿ òàáëèöû
**
**
***************************************************************************************/


QList<TableField*> SqlTable::fields(){

    return SqlTable::tableFields;
}


/***************************************************************************************
** ôóíêöèÿ óñòàíàâëèâàåò ïåðâè÷íûì êëþ÷îì ïîëå,
** èìåíÿ êîòîðîãî ñîâïàäàåò ñ ïåðåäàâàåìûì ïàðàìåòðîì fieldName
** Âîçâðàùàåò true, åñëè îïðåðàöèÿ ïðîøëà óñïåøíî
** Èíà÷å - âîçâðàùàåò false è ïîìåùàåò ïîÿñíåíèå ê ñëó÷èâøåéñÿ îøèáêå â ïåðåìåííóþ lastError
**
**
***************************************************************************************/




bool SqlTable::setPrimaryKey(QString fieldName){

    if (tableFields.isEmpty()) {                                            // åñëè ñïèñîê ïîëåé ïóñò
        SqlTable::tableLastError = tr("Table does not contain fields!");    // âûäàåì îøèáêó
        return false;
    }
    for (int i = 0; i < tableFields.size(); ++i){
        if (tableFields.at(i)->name() == fieldName){                        // íàøëè ïîëå ñ íóæíûì èìåíåì
            SqlTable::tablePrimaryKeyIndex = i;                                  // ïðèñâàèâàåì èäåêñó êëþ÷åâîãî ïîëÿ íîâîå çíà÷åíèå
            SqlTable::tablePrimaryKey = tableFields.at(i)->name();          // òàêæå ïðèñâàèâàåì íîâîå çíà÷åíèå ïåðåìåííîé, ñîäåðæàùåé èìÿ êëþ÷åâîãî ïîëÿ
            SqlTable::createSqlString();                                    // îáíîâëÿåì sql-ñòðîêó çàïðîñà
            return true;
        }
    }
    SqlTable::tableLastError = tr("In the table there is no field with that name!");  // íå íàøëè ïîëÿ ñ òàêèì èìåíåì,
    return false;                                                                     // âûäàåì îøèáêó
}


/***************************************************************************************
** ôóíêöèÿ âîçâðàùàåèò ïîÿñíèòåëüíûé òåêñò ïîñëåäíåé îøèáêè,
** êîòîðàÿ âîçíèêëà ïðè âûçîâå ìåòîäîâ êëàññà
**
***************************************************************************************/


QString SqlTable::lastError(){
return SqlTable::tableLastError;
}



/***************************************************************************************
** ôóíêöèÿ âîçâðàùàåò èìÿ ïîëÿ,
** êîòîðîå ÿâëÿåòñÿ ïåðâè÷íûì êëþ÷îì
**
***************************************************************************************/


QString SqlTable::primaryKey(){
    return SqlTable::tablePrimaryKey;
}

/***************************************************************************************
** ôóíêöèÿ ãåíåðèðóåò ñòðîêó Sql-çàïðîñà,
** êîòîðàÿ ñîçäàåò â áàçå äàííûõ ñîîòâåòñòâóþùe òàáëèöó
**
***************************************************************************************/


bool SqlTable::createSqlString(){
    QString sql_str;
    int i = 0;
    if (tableFields.isEmpty()) {                                            // åñëè ñïèñîê ïîëåé ïóñò
        SqlTable::tableLastError = tr("Table does not contain fields!");    // âûäàåì îøèáêó
        return false;
    }
    sql_str = tr("CREATE TABLE `");
    sql_str.append( SqlTable::tableName);
    sql_str.append(tr("` ( "));

    for (i; i < (tableFields.size()-1); ++i){  // îáðàáîòàåì âñå ïîëÿ, êðîìå ïîñëåäíåãî
    sql_str.append(tableFields.at(i)->sqlString());
    sql_str.append(tr(", "));
    }
    sql_str.append(tableFields.at(i)->sqlString()); // ïîñëåäíåå ïîëå
    sql_str.append(tr(" "));                        // ïîñëå ïîñëåäíåãî ïîëÿ çàïÿòóþ ïîêà íå ñòàâèì

    if (SqlTable::tablePrimaryKey != tr("")) {      // åñëè åñòü ïåðâè÷íûé êëþ÷,
        sql_str.append(tr(", "));                   // òî ñòàâèì çàïÿòóþ
        sql_str.append(tr("PRIMARY KEY  (`"));
        sql_str.append(SqlTable::tablePrimaryKey);
        sql_str.append(tr("`) ) "));
    }
    else  sql_str.append(tr(" ) "));
    if (SqlTable::tableEngine != tr("")) {
        sql_str.append(tr("ENGINE="));
        sql_str.append(SqlTable::tableEngine);
        sql_str.append(tr(" "));
    }
    if (SqlTable::tableCharacterSet != tr("")){
        sql_str.append(tr("DEFAULT CHARSET="));
        sql_str.append(SqlTable::tableCharacterSet);

    }
     SqlTable::SqlString = sql_str;
    return true;

}

/***************************************************************************************
** ôóíêöèÿ âîçâðàùàåò ñòðîêó Sql-çàïðîñà, êîòîðàÿ ñîçäàåò â áàçå äàííûõ ñîîòâåòñòâóþùóþ òàáëèöó
**
**
***************************************************************************************/



QString  SqlTable::sqlString(){
    return  SqlTable::SqlString;

}


void SqlTable::append(TableField* newfield){ // äîáàâëÿåò â êîíåö ñïèñêà (óêàçàòåëåé) ïîëåé òàáëèöû íîàîå ïîëå, ïåðåäàâàåìîå ÷åðåç ïàðàìåòð  newfield (óêàçàòåëü)
      SqlTable::tableFields.append(newfield);
      SqlTable::createSqlString();
}