204 lines
5.6 KiB
C++
204 lines
5.6 KiB
C++
// ********************************************************************************************************
|
||
// Nombre del fichero: Database.cpp
|
||
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
|
||
// Fecha Creación: Marzo-2010
|
||
// Fecha Última modificación: Marzo-2010
|
||
// Descripción:
|
||
// Fichero de implementación de la clase Database para funciones de manipulación
|
||
// de bases de datos sobre un Servidor Mysql
|
||
// ********************************************************************************************************
|
||
#include "Database.h"
|
||
// __________________________________________________________________________
|
||
void ErrorHandler(Herror hr, char* ErrStr)
|
||
{
|
||
sprintf(ErrStr,"Error:\n");
|
||
sprintf(ErrStr,"%sCode = %d\n",ErrStr ,hr.nError);
|
||
sprintf(ErrStr,"%sDescription = %s",ErrStr, (char*) hr.dError);
|
||
}
|
||
// __________________________________________________________________________
|
||
Database::Database()
|
||
{
|
||
m_Cnn=NULL;
|
||
sprintf(m_ErrStr,"NULL POINTER");
|
||
}
|
||
// __________________________________________________________________________
|
||
void Database::GetErrorErrStr(char* ErrStr)
|
||
{
|
||
sprintf(ErrStr,"%s",m_ErrStr);
|
||
}
|
||
// __________________________________________________________________________
|
||
void Table::GetErrorErrStr(char* ErrStr)
|
||
{
|
||
sprintf(ErrStr,"%s",m_ErrStr);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Database::Open(char* UserName, char* Pwd,char* server,char*Bd)
|
||
{
|
||
Herror hr;
|
||
m_Cnn=mysql_init(NULL);
|
||
if(m_Cnn==NULL){
|
||
hr.nError=0;
|
||
strcpy(hr.dError,"Error en la Creación del objeto MYSQL");
|
||
ErrorHandler(hr,m_ErrStr);
|
||
return(false); // Fallo de inicializaci<63>
|
||
}
|
||
|
||
if(!mysql_real_connect(m_Cnn, server,UserName,Pwd,Bd, MYSQL_PORT,NULL,0)){
|
||
mysql_error(m_Cnn);
|
||
hr.nError=mysql_errno(m_Cnn);
|
||
strcpy(hr.dError,mysql_error(m_Cnn));
|
||
ErrorHandler(hr,m_ErrStr);
|
||
return(false); // Fallo de conexi<78>
|
||
}
|
||
hr.nError=0;
|
||
strcpy(hr.dError,"Success");
|
||
ErrorHandler(hr,m_ErrStr);
|
||
return (true);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Database::Close()
|
||
{
|
||
mysql_close(m_Cnn);
|
||
return(true);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Database::Execute(char* CmdStr)
|
||
{
|
||
Herror hr;
|
||
if (mysql_query(m_Cnn,CmdStr)){ // Ejecuta la consulta
|
||
mysql_error(m_Cnn);
|
||
hr.nError=mysql_errno(m_Cnn);
|
||
strcpy(hr.dError,mysql_error(m_Cnn));
|
||
ErrorHandler(hr,m_ErrStr);
|
||
mysql_close(m_Cnn);
|
||
return(false); // Fallo de conexión
|
||
}
|
||
hr.nError=0;
|
||
strcpy(hr.dError,"Success");
|
||
ErrorHandler(hr,m_ErrStr);
|
||
return (true);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Database::Execute(char* CmdStr, Table& Tbl)
|
||
{
|
||
Herror hr;
|
||
if (mysql_query(m_Cnn,CmdStr)) { // Ejecuta la consulta
|
||
mysql_error(m_Cnn);
|
||
hr.nError=mysql_errno(m_Cnn);
|
||
strcpy(hr.dError,mysql_error(m_Cnn));
|
||
ErrorHandler(hr,m_ErrStr);
|
||
mysql_close(m_Cnn);
|
||
return(false); // Fallo de conexi<78>
|
||
}
|
||
|
||
hr.nError=0;
|
||
strcpy(hr.dError,"Success");
|
||
ErrorHandler(hr,m_ErrStr);
|
||
|
||
Tbl.m_Rec = mysql_store_result(m_Cnn) ; // Toma el recordset
|
||
if(Tbl.m_Rec){
|
||
Tbl.row=mysql_fetch_row(Tbl.m_Rec);
|
||
Tbl.fields = mysql_fetch_fields(Tbl.m_Rec);
|
||
Tbl.num_fields = mysql_num_fields(Tbl.m_Rec);
|
||
Tbl.numreg=mysql_num_rows(Tbl.m_Rec);
|
||
Tbl.eof=Tbl.numreg==0; // Consulta vacia
|
||
}
|
||
return (true);
|
||
}
|
||
// __________________________________________________________________________
|
||
void Database::liberaResult (Table& Tbl) {
|
||
//Free resources after mysql_store_result
|
||
mysql_free_result(Tbl.m_Rec);
|
||
}
|
||
// __________________________________________________________________________
|
||
Table::Table()
|
||
{
|
||
m_Rec=NULL;
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Table::ISEOF()
|
||
{
|
||
return(eof);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Table::Get(const char* FieldName, char *FieldValue)
|
||
{
|
||
char * aux;
|
||
aux=tomadato(FieldName);
|
||
if(aux)
|
||
strcpy(FieldValue,aux);
|
||
else
|
||
strcpy(FieldValue,"");
|
||
return(true);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Table::Get(const char* FieldName,int &FieldValue)
|
||
{
|
||
char *aux;
|
||
aux=tomadato(FieldName);
|
||
if(aux)
|
||
FieldValue=atoi(aux);
|
||
else
|
||
FieldValue=0;
|
||
return(true);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Table::Get(const char* FieldName,char &FieldValue)
|
||
{
|
||
char *aux;
|
||
aux=tomadato(FieldName);
|
||
FieldValue=aux[0];
|
||
return(true);
|
||
}
|
||
// __________________________________________________________________________
|
||
char* Table::tomadato(const char* FieldName)
|
||
{
|
||
Herror hr;
|
||
unsigned int i;
|
||
|
||
for(i = 0; i < num_fields; i++){
|
||
if(strcmp((char*)fields[i].name,FieldName)==0){
|
||
sprintf(m_ErrStr,"Success");
|
||
return((char*)row[i]);
|
||
}
|
||
}
|
||
hr.nError=-1;
|
||
strcpy(hr.dError,"El nombre del campo no existe");
|
||
ErrorHandler(hr,m_ErrStr);
|
||
return(NULL); // No existe el nombre del campo en la tabla
|
||
}
|
||
// __________________________________________________________________________
|
||
|
||
bool Table::MoveNext()
|
||
{
|
||
eof=false;
|
||
row=mysql_fetch_row(m_Rec);
|
||
if(row==NULL){
|
||
if(!mysql_eof(m_Rec))
|
||
return(false); // Fallo de lectura
|
||
else
|
||
eof=true; // Fin de fichero
|
||
}
|
||
return (true);
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Table::MoveFirst()
|
||
{
|
||
my_ulonglong auxnumreg;
|
||
|
||
auxnumreg=0;
|
||
mysql_data_seek(m_Rec,auxnumreg);
|
||
return (MoveNext());
|
||
}
|
||
// __________________________________________________________________________
|
||
bool Table::MoveLast()
|
||
{
|
||
my_ulonglong auxnumreg;
|
||
auxnumreg=numreg;
|
||
auxnumreg--;
|
||
if(auxnumreg<0) auxnumreg=0; // Principio de fichero
|
||
mysql_data_seek(m_Rec,auxnumreg);
|
||
return (MoveNext());
|
||
return (true);
|
||
}
|