|
#include "StdAfx.h"
#include "MFCMdbTable.h"
CMFCMdbTable::CMFCMdbTable(void)
{
tdef = 0;
}
CMFCMdbTable::~CMFCMdbTable(void)
{
}
void CMFCMdbTable::LoadTableColumns()
{
MdbCatalogEntry* entry = GetEntryByName(Name);
tdef = mdb_read_table(entry);
mdb_read_columns(tdef);
mdb_read_indices(tdef);
MdbColumn *pcol;
CMFCMdbColumn column;
//read columns and bind data
columns.clear();
for (int i=0;i<tdef->num_cols;i++)
{
pcol = (MdbColumn*)g_ptr_array_index(tdef->columns, i);
column.Name = CString(pcol->name);
cvalues[column.Name] = new char[256];
pcol->bind_ptr = cvalues[column.Name];
column.Type = (MFCMdbColType)pcol->col_type;
columns[column.Name] = column;
}
}
MFCMdbColGenType CMFCMdbTable::GetColumnGenType(MFCMdbColType type)
{
switch (type)
{
case MFCMdb_INT:
case MFCMdb_LONGINT:
case MFCMdb_FLOAT:
case MFCMdb_DOUBLE:
case MFCMdb_NUMERIC:
return MFCMdbGen_NUMERIC;
default:
return MFCMdbGen_TEXT;
}
}
CString CMFCMdbTable::GetStrValue(CMFCMdbColumn& col)
{
CString cad;
MFCMdbColGenType type = GetColumnGenType(col.Type);
/*switch (type)
{
case MFCMdb_INT:
case MFCMdb_LONGINT:
cad.Format("%05d", dvalues[col.Name]);
break;
case MFCMdb_FLOAT:
case MFCMdb_DOUBLE:
case MFCMdb_NUMERIC:
cad.Format("%f", dvalues[col.Name]);
break;
default:
cad = CString(cvalues[col.Name]);
break;
}*/
return cvalues[col.Name];
}
MdbCatalogEntry* CMFCMdbTable::GetEntryByName(CString name)
{
MdbCatalogEntry *entry;
for (int i=0;i<mdb->num_catalog;i++)
{
entry = (MdbCatalogEntry*)g_ptr_array_index(mdb->catalog,i);
CString cadaux(entry->object_name);
if (cadaux == name)
return entry;
}
}
void CMFCMdbTable::MoveFirst()
{
mdb_rewind_table(tdef);
}
BOOL CMFCMdbTable::NextItem()
{
return mdb_fetch_row(tdef);
}
void CMFCMdbTable::ClearTableColumns()
{
if (!tdef) return;
mdb_free_tabledef(tdef);
tdef = 0;
for (auto itr=cvalues.begin(); itr != cvalues.end(); itr++)
{
char* value = (*itr).second;
delete[] value;
}
cvalues.clear();
}
/*void CMFCMdbTable::AddRow()
{
MdbField fields[256];
MdbColumn *pcol;
CString colname;
CString strvalue;
for (int i=0;i<tdef->num_cols;i++)
{
pcol = (MdbColumn*)g_ptr_array_index(tdef->columns, i);
fields[i].colnum = pcol->col_num;
colname = CString(pcol->name);
strvalue = CString(cvalues[colname]);
fields[i].value = cvalues[colname];
fields[i].siz = strvalue.GetLength();
fields[i].is_null = 0;
fields[i].is_fixed = pcol->is_fixed;
}
mdb_insert_row(tdef, 1, fields);
}*/
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
System developer from Argentina.
Programmed in VB 5,6,.NET, C#, Java, PL-SQL, Transac-SQL, C, C++ and even some "calculator" language.
Love to build small, useful applications.
Usually building big and complicated apps based on solid, reliable components.
Hobbies: reading, photography, chess, paddle, running.