source: admin/Sources/Includes/Database.cpp @ 22813ed

configure-oglivelgromero-new-oglivemainmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineoglive-ipv6test-python-scriptsticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion
Last change on this file since 22813ed was 21bfeb0, checked in by irina <irinagomez@…>, 8 years ago

#559 ogAdmServer: Se libera memoria de variables y de resultados de la base de datos. Database.cpp y Database.h: Se crea función liberaResult.

git-svn-id: https://opengnsys.es/svn/branches/version1.1@5132 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 5.6 KB
Line 
1// ********************************************************************************************************
2// Nombre del fichero: Database.cpp
3// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
4// Fecha Creación: Marzo-2010
5// Fecha Última modificación: Marzo-2010
6// Descripción:
7//              Fichero de implementación de la clase Database para funciones de manipulación
8//              de bases de datos sobre un Servidor Mysql
9// ********************************************************************************************************
10#include "Database.h"
11// __________________________________________________________________________
12void ErrorHandler(Herror hr, char* ErrStr)
13{
14        sprintf(ErrStr,"Error:\n");
15        sprintf(ErrStr,"%sCode = %d\n",ErrStr ,hr.nError);
16        sprintf(ErrStr,"%sDescription = %s",ErrStr, (char*) hr.dError);
17}
18// __________________________________________________________________________
19Database::Database()
20{
21        m_Cnn=NULL;
22        sprintf(m_ErrStr,"NULL POINTER");
23}
24// __________________________________________________________________________
25void Database::GetErrorErrStr(char* ErrStr)
26{
27        sprintf(ErrStr,"%s",m_ErrStr);
28}
29// __________________________________________________________________________
30void Table::GetErrorErrStr(char* ErrStr)
31{
32        sprintf(ErrStr,"%s",m_ErrStr);
33}
34// __________________________________________________________________________
35bool Database::Open(char* UserName, char* Pwd,char* server,char*Bd)
36{
37        Herror hr;
38        m_Cnn=mysql_init(NULL);
39        if(m_Cnn==NULL){
40                hr.nError=0;
41                strcpy(hr.dError,"Error en la Creación del objeto MYSQL");
42                ErrorHandler(hr,m_ErrStr);
43                return(false); // Fallo de inicializaci�
44        }
45       
46        if(!mysql_real_connect(m_Cnn, server,UserName,Pwd,Bd, MYSQL_PORT,NULL,0)){
47                mysql_error(m_Cnn);
48                hr.nError=mysql_errno(m_Cnn);
49                strcpy(hr.dError,mysql_error(m_Cnn));
50                ErrorHandler(hr,m_ErrStr);
51                return(false); // Fallo de conexi�
52        }
53        hr.nError=0;
54        strcpy(hr.dError,"Success");
55        ErrorHandler(hr,m_ErrStr);
56        return (true);
57}
58// __________________________________________________________________________
59bool Database::Close()
60{
61                mysql_close(m_Cnn);
62                return(true);
63}
64// __________________________________________________________________________
65bool Database::Execute(char* CmdStr)
66{
67        Herror hr;
68        if (mysql_query(m_Cnn,CmdStr)){ // Ejecuta la consulta
69                mysql_error(m_Cnn);
70                hr.nError=mysql_errno(m_Cnn);
71                strcpy(hr.dError,mysql_error(m_Cnn));
72                ErrorHandler(hr,m_ErrStr);
73                mysql_close(m_Cnn);
74                return(false); // Fallo de conexión
75        }
76        hr.nError=0;
77        strcpy(hr.dError,"Success");
78        ErrorHandler(hr,m_ErrStr);
79        return (true);
80}
81// __________________________________________________________________________
82bool Database::Execute(char* CmdStr, Table& Tbl)
83{
84        Herror hr;
85        if (mysql_query(m_Cnn,CmdStr)) { // Ejecuta la consulta
86                mysql_error(m_Cnn);
87                hr.nError=mysql_errno(m_Cnn);
88                strcpy(hr.dError,mysql_error(m_Cnn));
89                ErrorHandler(hr,m_ErrStr);
90                mysql_close(m_Cnn);
91                return(false); // Fallo de conexi�
92        }
93
94        hr.nError=0;
95        strcpy(hr.dError,"Success");
96        ErrorHandler(hr,m_ErrStr);
97
98        Tbl.m_Rec = mysql_store_result(m_Cnn) ; // Toma el recordset
99        if(Tbl.m_Rec){
100                Tbl.row=mysql_fetch_row(Tbl.m_Rec);
101                Tbl.fields = mysql_fetch_fields(Tbl.m_Rec);
102                Tbl.num_fields = mysql_num_fields(Tbl.m_Rec);
103                Tbl.numreg=mysql_num_rows(Tbl.m_Rec);
104                Tbl.eof=Tbl.numreg==0; // Consulta vacia
105        }
106        return (true);
107}
108// __________________________________________________________________________
109void Database::liberaResult (Table& Tbl) {
110        //Free resources after mysql_store_result
111        mysql_free_result(Tbl.m_Rec);
112}
113// __________________________________________________________________________
114Table::Table()
115{
116        m_Rec=NULL;
117}
118// __________________________________________________________________________
119bool Table::ISEOF()
120{
121        return(eof);
122}
123// __________________________________________________________________________
124bool Table::Get(const char* FieldName, char *FieldValue)
125{
126        char * aux;
127        aux=tomadato(FieldName);
128        if(aux)
129                strcpy(FieldValue,aux);
130        else
131                strcpy(FieldValue,"");
132        return(true);
133}
134// __________________________________________________________________________
135bool Table::Get(const char* FieldName,int &FieldValue)
136{
137        char *aux;
138        aux=tomadato(FieldName);
139        if(aux)
140                FieldValue=atoi(aux);
141        else
142                FieldValue=0;
143        return(true);
144}
145// __________________________________________________________________________
146bool Table::Get(const char* FieldName,char &FieldValue)
147{
148        char *aux;
149        aux=tomadato(FieldName);
150        FieldValue=aux[0];
151        return(true);
152}
153// __________________________________________________________________________
154char* Table::tomadato(const char* FieldName)
155{
156        Herror hr;
157        unsigned int i;
158
159        for(i = 0; i < num_fields; i++){
160                if(strcmp((char*)fields[i].name,FieldName)==0){
161                        sprintf(m_ErrStr,"Success");
162                        return((char*)row[i]);
163                }
164        }
165        hr.nError=-1;
166        strcpy(hr.dError,"El nombre del campo no existe");
167        ErrorHandler(hr,m_ErrStr);
168        return(NULL); // No existe el nombre del campo en la tabla
169}
170// __________________________________________________________________________
171
172bool Table::MoveNext()
173{
174        eof=false;
175        row=mysql_fetch_row(m_Rec);
176        if(row==NULL){
177                if(!mysql_eof(m_Rec))
178                        return(false); // Fallo de lectura
179                else
180                        eof=true; // Fin de fichero
181        }
182        return (true);
183}
184// __________________________________________________________________________
185bool Table::MoveFirst()
186{
187        my_ulonglong auxnumreg;
188       
189        auxnumreg=0;
190        mysql_data_seek(m_Rec,auxnumreg);
191        return (MoveNext());
192}
193// __________________________________________________________________________
194bool Table::MoveLast()
195{
196        my_ulonglong auxnumreg;
197        auxnumreg=numreg;
198        auxnumreg--;
199        if(auxnumreg<0) auxnumreg=0; // Principio de fichero
200        mysql_data_seek(m_Rec,auxnumreg);
201        return (MoveNext());
202        return (true);
203}
Note: See TracBrowser for help on using the repository browser.