230 lines
5.5 KiB
C++
230 lines
5.5 KiB
C++
#include "StdAfx.h"
|
|
#include "ManagerDbfGdataTable.h"
|
|
#include "GdataTable.h"
|
|
//***************************************************************************
|
|
|
|
ManagerDbfGdataTable::ManagerDbfGdataTable(void)
|
|
{
|
|
_dt = NULL;
|
|
}
|
|
//***************************************************************************
|
|
|
|
ManagerDbfGdataTable::~ManagerDbfGdataTable(void)
|
|
{
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfSet( int nrow, int ncolm )
|
|
{
|
|
_dt->delAll();
|
|
_nrow = nrow;
|
|
_ncolm = ncolm;
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
bool ManagerDbfGdataTable::AddCol( char* path, char* name, BYTE type,IAddColDbf *dt, int size)
|
|
{
|
|
GdataTable tb;
|
|
|
|
if(!LeeDbf(path, &tb))
|
|
return false;
|
|
int ic=tb.getInd(name);
|
|
|
|
if(ic<0)
|
|
{
|
|
//la crea
|
|
if(!tb.addColm(name,type,size))
|
|
return false;
|
|
ic=tb.nColm()-1;
|
|
}
|
|
for(int i=0;i<tb.nRow();i++)
|
|
{
|
|
dt->setData(i, tb.get(i,ic));
|
|
}
|
|
|
|
if(!grabaDbf(path,&tb))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfSetColm( char* name, BYTE type, int size )
|
|
{
|
|
int t;
|
|
switch(type)
|
|
{
|
|
case(DBF_TYPE_DATA_STR):
|
|
size++;
|
|
t = GdataTable::Tstring;
|
|
break;
|
|
case(DBF_TYPE_DATA_I64):
|
|
t = GdataTable::Tint64;
|
|
break;
|
|
case(DBF_TYPE_DATA_D):
|
|
t = GdataTable::Tdouble;
|
|
break;
|
|
case(DBF_TYPE_DATA_BOOL):
|
|
t = GdataTable::Tbool;
|
|
break;
|
|
case(DBF_TYPE_DATA_BIN):
|
|
t = GdataTable::Tbin;
|
|
break;
|
|
case(DBF_TYPE_DATA_I):
|
|
t = GdataTable::Tint;
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
bool res = _dt->addColm(name,t,size);
|
|
if(res && _nrow>0 && _dt->nColm()>= _ncolm)
|
|
{
|
|
res = _dt->addRow(_nrow);
|
|
_nrow =0;
|
|
}
|
|
return res;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfaddVal( int icol, int v )
|
|
{
|
|
int* vv = _dt->getI(_nrow,icol);
|
|
if(vv)
|
|
*vv = v;
|
|
return vv!= NULL;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfaddVal( int icol, double v )
|
|
{
|
|
double* vv = _dt->getD(_nrow,icol);
|
|
if(vv)
|
|
*vv = v;
|
|
return vv!= NULL;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfaddVal( int icol, __int64 v )
|
|
{
|
|
__int64* vv = _dt->getI64(_nrow,icol);
|
|
if(vv)
|
|
*vv = v;
|
|
return vv!= NULL;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfaddVal( int icol, char* v )
|
|
{
|
|
char* vv = _dt->getS(_nrow,icol);
|
|
if(vv)
|
|
strcpy(vv,v);
|
|
return vv!= NULL;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfaddVal( int icol, void* v )
|
|
{
|
|
void* vv = _dt->getBin(_nrow,icol);
|
|
if(vv)
|
|
memcpy(vv,v,_dt->getSize(icol));
|
|
return vv!= NULL;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfFinRow()
|
|
{
|
|
_nrow++;
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfFinR()
|
|
{
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfGet( int *nrow, int *ncolm )
|
|
{
|
|
*nrow = _dt->nRow();
|
|
*ncolm = _dt->nColm();
|
|
_nrow =0;
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
#define MAX_NDECIMALS 10;
|
|
bool ManagerDbfGdataTable::DbfGetColm(int icolm, char* name, BYTE *type, int *size, int*ndecimal )
|
|
{
|
|
//pilla tipo----------------------
|
|
static BYTE t[GdataTable::Tntip]={0,DBF_TYPE_DATA_BOOL,DBF_TYPE_DATA_I, DBF_TYPE_DATA_D,DBF_TYPE_DATA_I64, DBF_TYPE_DATA_STR, DBF_TYPE_DATA_BIN } ;
|
|
*type = t[_dt->getType(icolm)];
|
|
*ndecimal = MAX_NDECIMALS;
|
|
//copia segura de nombre------------------
|
|
int i =0;
|
|
char *st =_dt->getName(icolm);
|
|
for(; i<10; i++)
|
|
{
|
|
if(!st[i])
|
|
break;
|
|
name[i]=st[i];
|
|
}
|
|
name[i]=0;
|
|
*size = _dt->getSizeASCII(icolm);
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfGetVal(int irow, int icol, int* v )
|
|
{
|
|
*v = *_dt->getI(irow,icol);
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfGetVal(int irow, int icol, double* v )
|
|
{
|
|
*v = *_dt->getD(irow,icol);
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfGetVal(int irow, int icol, __int64* v )
|
|
{
|
|
*v = *_dt->getI64(irow,icol);
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfGetVal(int irow, int icol, char** v )
|
|
{
|
|
*v= _dt->getS(irow,icol);
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfGetVal(int irow, int icol, void** v )
|
|
{
|
|
*v= _dt->getBin(irow,icol);
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::DbfFinW()
|
|
{
|
|
return true;
|
|
}
|
|
//***************************************************************************
|
|
|
|
bool ManagerDbfGdataTable::LeeDbf( char* path, GdataTable *db )
|
|
{
|
|
_dt= db;
|
|
return ManagerDbf::leer(path,this);
|
|
}
|
|
//***************************************************************************
|
|
bool ManagerDbfGdataTable::grabaDbf( char* path, GdataTable *db )
|
|
{
|
|
_dt= db;
|
|
return ManagerDbf::grabar(path,this);
|
|
}
|
|
//***************************************************************************
|