home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_10_01
/
1001026b
< prev
next >
Wrap
Text File
|
1991-11-17
|
6KB
|
296 lines
//////////////////////////////////////////////////////
// Pinclass.cpp
//
// Source code for Wrapping C++ around Pinnacle
//
// David Brumbaugh, 1991
//////////////////////////////////////////////////////
#include <iostream.h>
#include <conio.h>
#include "PINCLAS.H"
Pfm_List::Pfm_List(char *database, char *table_name,
size_t mbs)
{
db = DB_Open(database,"rw",0);
if (db == NULL)
{
cerr << "Error opening database:"
<< database << "Error = "
<< DB_ErrorString() << "\n";
cerr << "Strike a Key"; getch();
return;
}
table = DB_Table(db,table_name);
if (DB_Errno != DB_OK)
{
cerr << "Error opening table:"
<< table_name << "Error = "
<< DB_ErrorString() << "\n";
cerr << "Strike a Key";
getch();
DB_Close(db);
return;
}
DB_FirstRow(table);
DB_NextRow(table,DBNEXT);
is_at_top = true;
is_at_bottom = false;
needs_closed = true;
default_key = NULL;
default_dbsearch = NULL;
max_buffer_size = mbs;
buffer = new char[max_buffer_size];
}
Pfm_List::Pfm_List(DB &open_db, char *table_name,
size_t mbs)
{
db = open_db;
table = DB_Table(db,table_name);
if (DB_Errno != DB_OK)
{
cerr << "Error opening table:"
<< table_name << "Error = "
<< DB_ErrorString() << "\n";
cerr << "Strike a Key"; getch();
return;
}
DB_FirstRow(table);
DB_NextRow(table,DBNEXT);
is_at_top = true;
is_at_bottom = false;
needs_closed = false;
default_key = NULL;
default_dbsearch = NULL;
max_buffer_size = mbs;
buffer = new char[max_buffer_size];
}
Pfm_List::Pfm_List(DB &open_db, DBTAB &db_table,
size_t mbs)
{
db = open_db;
table = db_table;
DB_FirstRow(table);
DB_NextRow(table,DBNEXT);
is_at_top = true;
is_at_bottom = false;
needs_closed = false;
default_key = NULL;
default_dbsearch = NULL;
max_buffer_size = mbs;
buffer = new char[max_buffer_size];
}
Pfm_List::~Pfm_List()
{
if (needs_closed)
DB_Close(db);
delete buffer;
}
Boolean Pfm_List::find(void *key, char *relation)
{
if (default_key == NULL)
return(false);
default_dbsearch = DB_SearchObject(db,
DB_GetType(default_key),key,relation);
DB_FirstRow(table);
return((Boolean) DB_FindNext(default_key,
default_dbsearch,DBNEXT));
}
Boolean Pfm_List::find(char *col, char *relation,
void *key)
{
default_key = DB_Column(table,col);
return(find(key,relation));
}
Boolean Pfm_List::find(void *key)
{
return(find(key,"=="));
}
void Pfm_List::prev()
{
if (DB_NextRow(table,DBPREVIOUS) != DB_OK)
{
is_at_top = false;
}
else
{
is_at_top = true;
if (total() > 1L)
{
is_at_bottom = false;
}
}
}
void Pfm_List::next()
{
if (DB_NextRow(table,DBNEXT) != DB_OK)
{
is_at_bottom = false;
}
else
{
is_at_bottom = true;
if (total() > 1L)
{
is_at_top = false;
}
}
}
void Pfm_List::top()
{
DB_FirstRow(table);
DB_NextRow(table,DBNEXT);
is_at_top = true;
if (total() > 1L)
is_at_bottom = false;
}
void Pfm_List::end()
{
DB_ForAllRows(table);
DB_NextRow(table,DBPREVIOUS);
is_at_bottom = true;
if (total() > 1L)
is_at_top = false;
}
void Pfm_List::add()
{
DB_AddRow(table);
}
void Pfm_List::replace(char *field,
char *value)
{
DBCOL col = DB_Column(table,field);
DB_PutString(col,(unsigned char *) value);
}
void Pfm_List::replace(char *field,
long value)
{
DBCOL col = DB_Column(table,field);
DB_PutInteger(col, value);
}
void Pfm_List::replace(char *field, double value)
{
DBCOL col = DB_Column(table,field);
DB_PutReal(col, value);
}
void Pfm_List::remove()
{
DB_DeleteRow(table);
next();
}
long Pfm_List::tell()
{
DBROWID thisrow, checkrow;
long position = 0L;
thisrow = DB_CurrentRow(table);
top();
do
{
checkrow = DB_CurrentRow(table);
if (checkrow != thisrow)
{
++position;
DB_NextRow(table,DBNEXT);
}
} while(checkrow != thisrow);
return(position);
}
Boolean Pfm_List::findnext()
{
if (default_key == NULL || default_dbsearch == NULL)
return(false);
return((Boolean) DB_FindNext(default_key,
default_dbsearch,DBNEXT));
}
Boolean Pfm_List::findprev()
{
if (default_key == NULL || default_dbsearch == NULL)
return(false);
return((Boolean) DB_FindNext(default_key,
default_dbsearch,DBPREVIOUS));
}
char *Pfm_List::get(char *field, char *value)
{
DBCOL col = DB_Column(table, field);
if (value != NULL)
{
strcpy(value,(char *)DB_GetString(col));
}
return(value);
}
long Pfm_List::get(char *field, long &value)
{
DBCOL col = DB_Column(table, field);
value = DB_GetInteger(col);
return(value);
}
double Pfm_List::get(char *field, double &value)
{
DBCOL col = DB_Column(table, field);
value = DB_GetReal(col);
return(value);
}
void *Pfm_List::get(char *field, void *value)
{
DBCOL col = DB_Column(table,field);
unsigned long type = DB_GetType(col);
if (type == Integer)
{
DBINTEGER *dbint = (DBINTEGER *) value;
get(field,*dbint);
}
else if (type == Real)
{
DBREAL *dbreal = (DBREAL*) value;
get(field,*dbreal);
}
else if (type == String)
{
get(field,(DBSTRING) value);
}
else if (type == NBytes)
{
memcpy(value,DB_GetNBytes(col,NULL),
DB_GetSize(col));
}
return(value);
}