dbrecord.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Tomeu Borras Riera                              *
00003  *   tborras@conetxia.com                                                  *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00019  ***************************************************************************/
00020 
00021 #include "dbrecord.h"
00022 #include "funcaux.h"
00023 
00024 #include <QFile>
00025 #include <QTextStream>
00026 #include <QLocale>
00027 
00028 
00030 
00032 bool DBCampo::cambiado() {
00033     _depura("DBCampo::cambiado", 0);
00034     _depura("END DBCampo::cambiado", 0);
00035     return m_valorcampo != m_valorcampoorig;
00036 }
00037 
00038 
00040 
00042 void DBCampo::resetCambio() {
00043     _depura("DBCampo::resetCambio", 0);
00044     m_valorcampoorig = m_valorcampo;
00045     _depura("END DBCampo::resetCambio", 0);
00046 }
00047 
00048 
00050 
00052 DBCampo::~DBCampo() {
00053     _depura("DBCampo::~DBCampo", 0);
00054     _depura("END DBCampo::~DBCampo", 0);
00055 }
00056 
00057 
00059 
00062 postgresiface2 *DBCampo::conexionbase() {
00063     _depura("DBCampo::conexionbase", 0);
00064     _depura("END DBCampo::conexionbase", 0);
00065     return m_conexionbase;
00066 }
00067 
00068 
00070 
00073 void DBCampo::setconexionbase(postgresiface2 *comp) {
00074     _depura("DBCampo::setconexionbase", 0);
00075     m_conexionbase = comp;
00076     _depura("END DBCampo::setconexionbase", 0);
00077 }
00078 
00079 
00081 
00084 DBCampo::dbtype DBCampo::tipo() {
00085     _depura("DBCampo::dbtype DBCampo::tipo", 0);
00086     _depura("END DBCampo::dbtype DBCampo::tipo", 0);
00087     return m_tipo;
00088 }
00089 
00090 
00092 
00096 int DBCampo::set(QString val) {
00097     _depura("DBCampo::set", 0);
00098     m_valorcampo = val;
00099     _depura("END DBCampo::set", 0);
00100     return 0;
00101 }
00102 
00103 
00105 
00108 int DBCampo::restrictcampo() {
00109     _depura("DBCampo::restrictcampo", 0);
00110     _depura("END DBCampo::restrictcampo", 0);
00111     return m_restrict;
00112 }
00113 
00114 
00116 
00119 QString DBCampo::nomcampo() {
00120     _depura("DBCampo::nomcampo", 0);
00121     _depura("END DBCampo::nomcampo", 0);
00122     return m_nomcampo;
00123 }
00124 
00125 
00127 
00130 QString DBCampo::nompresentacion() {
00131     _depura("DBCampo::nompresentacion", 0);
00132     _depura("END DBCampo::nompresentacion", 0);
00133     return m_nompresentacion;
00134 }
00135 
00136 
00138 
00141 QString DBCampo::valorcampo() {
00142     _depura("DBCampo::valorcampo", 0);
00143     _depura("END DBCampo::valorcampo", 0);
00144     return m_valorcampo;
00145 }
00146 
00147 
00149 
00156 DBCampo::DBCampo(postgresiface2 *com, QString nom, dbtype typ, int res, QString nomp) {
00157     _depura("DBCampo::DBCampo", 0);
00158     m_conexionbase = com;
00159     m_nomcampo = nom;
00160     m_tipo = typ;
00161     m_restrict = res;
00162     m_nompresentacion = nomp;
00163     m_valorcampo = "";
00164     m_valorcampoorig = "";
00165     _depura("END DBCampo::DBCampo", 0);
00166 }
00167 
00168 
00170 
00174 QString DBCampo::valorcampoprep(int &error) {
00175     _depura("DBCampo::valorcampoprep", 0);
00176     error = 0;
00177     if ((m_restrict & DBNotNull) && !(m_restrict & DBAuto)) {
00178         if (m_valorcampo == "") {
00179             mensajeAviso("El campo '" + m_nompresentacion + "' no puede estar vacio.");
00180             error = -1;
00181             return "";
00182         } // end if
00183     } // end if
00184     switch (m_tipo) {
00185     case DBint:
00186         if (m_valorcampo == "")
00187             return "NULL";
00188         m_valorcampo.replace(",", ".");
00189         return "'" + m_conexionbase->sanearCadena(m_valorcampo) + "'";
00190     case DBvarchar:
00191         if (m_valorcampo == "")
00192             return "NULL";
00193         return "'" + m_conexionbase->sanearCadena(m_valorcampo) + "'";
00194     case DBdate:
00195         if (m_valorcampo == "")
00196             return "NULL";
00197         return "'" + m_conexionbase->sanearCadena(m_valorcampo) + "'";
00198     case DBnumeric:
00199         if (m_valorcampo == "")
00200             return "NULL";
00201         m_valorcampo.replace(",", ".");
00202         return "'" + m_conexionbase->sanearCadena(m_valorcampo) + "'";
00203     case DBboolean:
00204         if (m_valorcampo == "")
00205             return "NULL";
00206         if (m_valorcampo == "f" || m_valorcampo == "t")
00207             return "'" + m_conexionbase->sanearCadena(m_valorcampo) + "'";
00208         return m_conexionbase->sanearCadena(m_valorcampo);
00209     } // end switch
00210     error = -1;
00211     _depura("Error en la conversion de tipos", 2);
00212     _depura("END DBCampo::valorcampoprep", 10);
00213     return "";
00214 }
00215 
00216 
00218 
00221 void DBRecord::setconexionbase(postgresiface2 *comp) {
00222     _depura("DBRecord::setconexionbase", 0);
00223     m_conexionbase = comp;
00224     _depura("END DBRecord::setconexionbase", 0);
00225 }
00226 
00227 
00229 
00232 postgresiface2 *DBRecord::conexionbase() {
00233     _depura("DBRecord::conexionbase", 0);
00234     _depura("END DBRecord::conexionbase", 0);
00235     return m_conexionbase;
00236 }
00237 
00238 
00240 
00243 void DBRecord::setDBTableName(QString nom) {
00244     _depura("DBRecord::setDBTableName", 0);
00245     m_tablename = nom;
00246     _depura("END DBRecord::setDBTableName", 0);
00247 }
00248 
00249 
00251 
00254 void DBRecord::setNuevo(bool n) {
00255     _depura("DBRecord::setNuevo", 0);
00256     m_nuevoCampo = n;
00257     _depura("END DBRecord::setNuevo", 0);
00258 }
00259 
00260 
00262 
00265 QString DBRecord::tableName() {
00266     _depura("DBRecord::tableName", 0);
00267     _depura("END DBRecord::tableName", 0);
00268     return m_tablename;
00269 }
00270 
00271 
00273 
00276 QString DBRecord::campoId() {
00277     _depura("DBRecord::campoId", 0);
00278     _depura("END DBRecord::campoId", 0);
00279     return m_campoid;
00280 }
00281 
00282 
00284 
00287 void DBRecord::setDBCampoId(QString nom) {
00288     _depura("DBRecord::setDBCampoId", 0);
00289     m_campoid = nom;
00290     _depura("END DBRecord::setDBCampoId", 0);
00291 }
00292 
00293 
00295 
00298 QList<DBCampo *> *DBRecord::lista() {
00299     _depura("DBRecord::lista", 0);
00300     _depura("END DBRecord::lista", 0);
00301     return &m_lista;
00302 }
00303 
00304 
00306 
00308 void DBRecord::vaciar() {
00309     _depura("DBRecord::vaciar", 0);
00310     DBclear();
00311     _depura("END DBRecord::vaciar", 0);
00312 }
00313 
00314 
00316 
00319 DBRecord::DBRecord(postgresiface2 *con) {
00320     _depura("DBRecord::DBRecord", 0);
00321     m_conexionbase = con;
00322     m_nuevoCampo = TRUE;
00323     _depura("END DBRecord::DBRecord", 0);
00324 }
00325 
00326 
00328 
00330 DBRecord::~DBRecord() {
00331     _depura("DBRecord::~DBRecord", 0);
00332     m_lista.clear();
00333     _depura("END DBRecord::~DBRecord", 0);
00334 }
00335 
00337 
00341 int DBRecord::DBload(cursor2 *cur) {
00342     _depura("DBRecord::DBload", 0);
00343     m_nuevoCampo = FALSE;
00344 
00345     DBCampo *campo;
00346     int error = 0;
00347     for (int i = 0; i < m_lista.size(); ++i) {
00348         campo = m_lista.at(i);
00349         if (! (campo->restrictcampo() & DBCampo::DBNoLoad)) {
00350             QString nom = campo->nomcampo();
00351             QString val = cur->valor(nom);
00352             if ((campo->restrictcampo() & DBCampo::DBPrimaryKey) && (val == ""))
00353                 m_nuevoCampo = TRUE;
00354             if ((campo->restrictcampo() & DBCampo::DBDupPrimaryKey) && (val == ""))
00355                 m_nuevoCampo = TRUE;
00356             error += campo->set(val);
00358             campo->resetCambio();
00359         } // end if
00360     } // end for
00361     _depura("END DBRecord::DBload", 0);
00362     return error;
00363 }
00364 
00365 
00367 
00369 void DBRecord::DBclear() {
00370     _depura("DBRecord::DBclear", 0);
00371     m_nuevoCampo = TRUE;
00372     DBCampo *campo;
00373     for(int i = 0; i < m_lista.size(); ++i) {
00374         campo = m_lista.at(i);
00375         campo->set
00376         ("");
00377     } // end for
00378     _depura("END DBRecord::DBclear", 0);
00379 }
00380 
00381 
00383 
00386 int DBRecord::DBsave(QString &id) {
00387     _depura("DBRecord::DBsave - " + id, 0);
00388     try {
00389         DBCampo *campo;
00390         QString listcampos = "";
00391         QString listvalores = "";
00392         QString queryupdate = "";
00393         QString separador = "";
00394         QString separador1 = "";
00395         QString separadorwhere = "";
00396         QString querywhere = "";
00397         int err = 0;
00398         for (int i = 0; i < m_lista.size(); ++i) {
00399             campo = m_lista.at(i);
00400 
00402             if (campo->restrictcampo() & DBCampo::DBDupPrimaryKey) {
00403                 QString lin = campo->valorcampoprep(err);
00404                 if (err)
00405                     throw (-1);
00406                 querywhere += separadorwhere + campo->nompresentacion() + " = " + lin;
00407                 separadorwhere = " AND ";
00408             } // end if
00409 
00412             if (!(campo->restrictcampo() & DBCampo::DBNoSave)) {
00413                 if (campo->restrictcampo() & DBCampo::DBRequired) {
00414                     if (campo->valorcampo() == "")
00415                         return 0;
00416                 } // end if
00417                 if (campo->restrictcampo() & DBCampo::DBPrimaryKey) {
00418                     QString lin = campo->valorcampoprep(err);
00419                     if (err)
00420                         throw -1;
00421                     querywhere += separadorwhere + campo->nomcampo() + " = " + lin;
00422                     separadorwhere = " AND ";
00423                 } // end if
00424                 if (campo->valorcampoprep(err) != "") {
00425                     queryupdate += separador1 + campo->nomcampo() + "=" + campo->valorcampoprep(err);
00426                     separador1 = ", ";
00427                 } // end if
00428                 if (err)
00429                     throw -1;
00430                 if ((campo->valorcampoprep(err) != "NULL") && (campo->valorcampoprep(err) != "")) {
00431                     listcampos += separador + campo->nomcampo();
00432                     listvalores += separador + campo->valorcampoprep(err);
00433                     if (err)
00434                         throw -1;
00435                     separador = ", ";
00436                 } // end if
00438                 if (m_campoid == campo->nomcampo()) {
00439                     id = campo->valorcampo();
00440                 } // end if
00441             } // end if
00442         } // end for
00443         if (m_nuevoCampo) {
00444             QString query = "INSERT INTO " + m_tablename + " (" + listcampos + ") VALUES (" + listvalores + ")";
00445             m_conexionbase->ejecuta(query);
00446             _depura(query, 0);
00447             cursor2 *cur = m_conexionbase->cargacursor("SELECT " + m_campoid + " FROM " + m_tablename + " ORDER BY " + m_campoid + " DESC LIMIT 1");
00448             id = cur->valor(m_campoid);
00449             delete cur;
00450         } else {
00451             QString query = "UPDATE " + m_tablename + " SET " + queryupdate + " WHERE " + querywhere;
00452             _depura(query, 0);
00453             m_conexionbase->ejecuta(query);
00454         } // end if
00455         m_nuevoCampo = FALSE;
00456         return 0;
00457     } catch (...) {
00458         _depura("EXCEPTION DBRecord::DBsave", 0);
00459         throw -1;
00460     } // end try
00461     _depura("END DBRecord::DBSave", 0);
00462 }
00463 
00464 
00466 
00471 int DBRecord::setDBvalue(QString nomb, QString valor) {
00472     _depura("DBRecord::setDBvalue", 0);
00473     DBCampo *campo;
00474     int error = 0;
00475     int i = 0;
00476     campo = m_lista.value(i);
00477     while (campo && campo->nomcampo() != nomb)
00478         campo = m_lista.value(++i) ;
00479     if (!campo) {
00480         _depura("Campo " + nomb + " no encontrado", 2);
00481         return -1;
00482     } // end if
00483     if (campo->nomcampo() == nomb)
00484         error = campo->set(valor);
00485     _depura("END DBRecord::setDBvalue", 0);
00486     return error;
00487 }
00488 
00489 
00491 
00495 QString DBRecord::DBvalue(QString nomb) {
00496     _depura("DBRecord::value", 0, nomb);
00497     DBCampo *campo;
00498     int i = 0;
00499     campo = m_lista.value(i);
00500     while (campo && campo->nomcampo() != nomb)
00501         campo = m_lista.value(++i);
00502     if (!campo) {
00503         _depura("Campo " + nomb + " no encontrado", 2);
00504         return "";
00505     } // end if
00506     if (campo->nomcampo() == nomb) {
00507         return campo->valorcampo();
00508     } // end if
00509     _depura("END DBRecord::value", 0, nomb);
00510     return "";
00511 }
00512 
00513 
00515 
00519 bool DBRecord::exists(QString nomb) {
00520     _depura("DBRecord::exists", 0, nomb);
00521     DBCampo *campo;
00522     int i = 0;
00523     campo = m_lista.value(i);
00524     while (campo && campo->nomcampo() != nomb)
00525         campo = m_lista.value(++i);
00526     if (!campo) {
00527         return FALSE;
00528     } // end if
00529     if (campo->nomcampo() == nomb) {
00530         return TRUE;
00531     } // end if
00532     _depura("END DBRecord::exists", 0, nomb);
00533     return FALSE;
00534 }
00535 
00536 
00538 
00542 QString DBRecord::DBvalueprep(QString nomb) {
00543     _depura("DBRecord::DBvalueprep", 0);
00544     DBCampo *campo;
00545     int i = 0;
00546     campo = m_lista.value(i);
00547     while (campo && campo->nomcampo() != nomb)
00548         campo = m_lista.value(++i);
00549     if (!campo) {
00550         mensajeAviso("No se ha encontrado el campo '" + nomb + "'.");
00551         return "";
00552     } // end if
00553     if (campo->nomcampo() == nomb) {
00554         int err;
00555         return campo->valorcampoprep(err);
00556     } // end if
00557     _depura("END DBRecord::DBvalueprep", 0);
00558     return "";
00559 }
00560 
00561 
00563 
00570 int DBRecord::addDBCampo(QString nom, DBCampo::dbtype typ, int res, QString nomp = "") {
00571     _depura("DBRecord::addDBCampo", 0);
00572     DBCampo *camp = new DBCampo(m_conexionbase, nom, typ, res, nomp);
00573     camp->set
00574     ("");
00575     m_lista.append(camp);
00576     _depura("END DBRecord::addDBCampo", 0);
00577     return 0;
00578 }
00579 
00580 
00582 
00585 int DBRecord::borrar() {
00586     _depura("DBRecord::borrar", 0);
00587     try {
00588         DBCampo *campo;
00589         QString separadorwhere = "";
00590         QString querywhere = "";
00591 
00592         for (int i = 0; i < m_lista.size(); ++i) {
00593             campo = m_lista.at(i);
00594             if (campo->restrictcampo() & DBCampo::DBDupPrimaryKey) {
00595                 int err;
00596                 QString lin = campo->valorcampoprep(err);
00597                 if (err)
00598                     throw -1;
00599                 querywhere += separadorwhere + campo->nompresentacion() + " = " + lin;
00600                 separadorwhere = " AND ";
00601             } // end if
00602 
00603             if (!(campo->restrictcampo() & DBCampo::DBNoSave)) {
00604                 if (campo->restrictcampo() & DBCampo::DBPrimaryKey) {
00605                     int err;
00606                     QString lin = campo->valorcampoprep(err);
00607                     if (err)
00608                         throw -1;
00609                     querywhere += separadorwhere + campo->nomcampo() + " = " + lin;
00610                     separadorwhere = " AND ";
00611                 } // end if
00612             } // end if
00613         } // end for
00614 
00615         if (m_nuevoCampo == FALSE) {
00616             m_conexionbase->ejecuta("DELETE FROM " + m_tablename + " WHERE " + querywhere);
00617         } // end if
00618 
00619         _depura("END DBRecord::borrar", 0);
00620         return 0;
00621     } catch (...) {
00622         mensajeInfo("se produjo un error al borrar el elemento");
00623         _depura("DBRecord::borrar() Error al borrar elemento", 3);
00624         throw -1;
00625     }
00626 }
00627 
00628 
00630 
00633 int DBRecord::guardar() {
00634     _depura("DBRecord::guardar", 0);
00635     QString id;
00636     try {
00637         DBsave(id);
00638         setDBvalue(m_campoid, id);
00639         _depura("END DBRecord::guardar", 0);
00640         return 0;
00641     } catch (...) {
00642         mensajeError("DBRecord:: Se ha producido un error al guardar los datos.");
00643         throw -100;
00644     } // end try
00645 }
00646 
00647 
00648 
00650 
00654 int DBRecord::cargar(QString id) {
00655     _depura("DBRecord::cargar", 0);
00656     QString query = "SELECT * FROM " + m_tablename + " WHERE " + m_campoid + " = " + id;
00657     cursor2 *cur = m_conexionbase->cargacursor(query);
00658     if (!cur->eof()) {
00659         DBload(cur);
00660     } // end if
00661     delete cur;
00662     _depura("END DBRecord::cargar", 0);
00663     return 0;
00664 }
00665 
00666 
00668 
00670 void DBRecord::imprimir() {
00672 
00673     _depura("DBRecord::imprimir", 0);
00674     DBCampo *campo;
00675     QString archivo = confpr->valor(CONF_DIR_OPENREPORTS) + "ficha.rml";
00676     QString archivod = confpr->valor(CONF_DIR_USER) + "ficha.rml";
00677     QString archivologo = confpr->valor(CONF_DIR_OPENREPORTS) + "logo.jpg";
00678 
00680 #ifdef WINDOWS
00681 
00682     archivo = "copy " + archivo + " " + archivod;
00683 #else
00684 
00685     archivo = "cp " + archivo + " " + archivod;
00686 #endif
00687 
00688     system (archivo.toAscii().constData());
00689 
00691 #ifdef WINDOWS
00692 
00693     archivologo = "copy " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00694 #else
00695 
00696     archivologo = "cp " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00697 #endif
00698 
00699     system(archivologo.toAscii().constData());
00700 
00701     QFile file;
00702     file.setFileName(archivod);
00703     file.open(QIODevice::ReadOnly);
00704     QTextStream stream(&file);
00705     QString buff = stream.readAll();
00706     file.close();
00707     QString fitxersortidatxt = "";
00708 
00710     for (int i = 0; i < m_lista.size(); ++i) {
00711         campo = m_lista.at(i);
00712         fitxersortidatxt += "<tr>\n";
00713         fitxersortidatxt += "   <td>" + campo->nomcampo() + "</td>\n";
00714         fitxersortidatxt += "   <td>" + campo->nompresentacion() + "</td>\n";
00715         fitxersortidatxt += "   <td>" + campo->valorcampo() + "</td>\n";
00716         fitxersortidatxt += "</tr>";
00717     } // end for
00718 
00719     buff.replace("[ficha]", m_tablename);
00720     buff.replace("[story]", fitxersortidatxt);
00721 
00722     if (file.open(QIODevice::WriteOnly)) {
00723         QTextStream stream(&file);
00724         stream << buff;
00725         file.close();
00726     } // end if
00727 
00728     invocaPDF("ficha");
00729     _depura("END DBRecord::imprimir", 0);
00730 }
00731 

Generated on Sat Dec 15 00:01:21 2007 for BulmaGes by  doxygen 1.5.1