com/
\\narmada\melodies
immadishero@yahoo.com
//mahesh chandh
you can access databases using mfc dao classes without help of mfc appwizard and
classwizard. this article explains how to access data using cdaodatabase and
cdaorecordset classes at runtime. here are few simple steps:
cdaodatabase m_db;
m_db.open( "d:\\mcb.krz", false, false, "" ) ;
cdaorecordset* pcaptionset;
pcaptionset = new cdaorecordset(mydb );
3. open recordset
open the recordset if it is not open with dynaset type and captions table.
if ( !pcaptionset->isopen() )
pcaptionset->open( dbopendynaset , "select * from captions", 0 );
4. get data
now you can use getfieldvalue of cdaorecordset to get value of a column. if you
know the column name, you can direct pass column name as a parameter in
getfieldvalue else you can pass field index. both returns colevariant.
colevariant var;
if ( ! (pcaptionset->isbof() && pcaptionset->iseof()) )
{
pcaptionset->movefirst();
}
while ( ! pcaptionset->iseof() )
{
// var = pcaptionset->getfieldvalue("fieldname");
pcaptionset->getfieldvalue( 5, var );
pcaptionset->movenext();
}
5. update data
you can add data by using setfieldvalue with edit and update member functions of
cdaorecordset. it takes two parameters, first is field index and second is the
value you want to add in colevariant format.
pcaptionset->edit();
pcaptionset->setfieldvalue(6,tempole);
pcaptionset->update();
you can read/write data for all fields in a loop. m_nfields of cdaorecordset
contains number of total fields in the table.
nfields = pcaptionset->m_nfields;
pcaptionset->edit();
for( int nfieldindex = 1;
nfieldindex < nfields; nfieldindex++ )
{
pcaptionset.getfieldvalue( nfieldindex, var);
pcaptionset.setfieldvalue( nfieldindex, var);
}
m_rstotable.update();
recset.close();
m_db.close();
-------------------------------------------------------------------------
cdaodatabase
---------------------
#include <afxdao.h>
cdaodatabase cdb;
colevariant cole;
cdb.open("",false,false,null);
cdaorecordset cset(&cdb);
cset.open("");
cset.getfieldvalue(1,cole);
cole.vt
cset.close();
cdb.close();
-------------------------------------
inorder to connect with database
//----------------------
//leap year
//==================
public function isleapyear(iyear as integer)
'-- check for leap year
if (iyear mod 4 = 0) and _
((iyear mod 100 <> 0) or (iyear mod 400 = 0)) then
isleapyear = true
else
isleapyear = false
end if
end function
//------------------
//random number
static unsigned long int next = 1;
//----------------------------------------
//sprintf----------
char *temp;
idstart = atol(str);
sprintf(temp,"%d",idstart);
messagebox(temp,"testing");
//-------------------------------------------
//data validation
//------------------------------------------
cedit * edit;
cstring str;
cstring message;
long ids;
int range1;
int range2;
if(str.isempty())
message += "enter starting consumer id \n";
if(str.isempty())
message += "enter ending consumer id \n";
if(str.isempty())
message += "enter starting serial number \n";
if(str.isempty())
message += "enter meter constant range 1 \n";
if(str.isempty())
message += "enter meter constant range 1 \n";
if(message.isempty())
{
messagebox("data for meter details generated successfully","meter details
data");
}
else
messagebox(message,"meter details data");
----------------------------------------------------
//new and delete
-----------------------------------------------------
void ctableciddetailsview::onaddnew()
{
cedit *edit;
cstring str;
int pos_or_digits=0;
int flag = 0;
int valid_record = 0;
cstring message;
//total_records = m_pset->getrecordcount();
if( m_pset->iseof() )
messagebox("no record","about new entry");
else{
m_pset->movefirst();
edit = (cedit *) getdlgitem(idc_edit1);
edit->getwindowtext(str);
while(true)
{
if(str == m_pset->m_szcompanyname)
{
flag = 1;
break;
}
m_pset->movenext();
if( m_pset->iseof() )
break;
}//while ends
}//else
if(flag == 1)
{
messagebox("already in database","about new entry");
else{
//record addition_code
if(str=="")
{
valid_record = 1;
message = "enter company name\n";
}
if(str=="")
{
valid_record = 1;
message += "enter level name\n";
}
if(str=="")
{
valid_record = 1;
message += "enter position\n";
}
if(str=="")
{
valid_record = 1;
message += "enter digits\n";
}
updatedata(false);
//record save
if(valid_record==0)
{
m_pset->addnew();
updatedata(true);
if (m_pset->canupdate())
m_pset->update();
m_pset->requery();
updatedata(false);
messagebox("new record created successfully !!!","new record");
}//if ends
else
messagebox(message,"new record");
}//else ends
}//function ends
//----------------------------
//delete
//---------------------------
void ctableciddetailsview::ondelete()
{
//record delete
m_pset->delete();
m_pset->moveprev();
m_pset->requery();
updatedata(false);
messagebox("record deleted successfully !!!","delete record");
}
/////////////////////////////////////////////////////////////
//==========================================================
on_generate()
//====================================================
void cgeneratemeterdetailsview::ongenerate()
{
cedit * edit;
cstring str,id,serial,str1;
cstring message;
long howmany;
int digitsinhowmany;
int range1;
int range2;
int meterconstant;
if(str.isempty())
message += "enter starting consumer id \n";
else
id = str;
str1+=str;
str1+="\n";
if(str.isempty())
message += "enter how many consumer id's you want \n";
else
howmany = atol(str);
digitsinhowmany = str.getlength();
str1+=str;
str1+="\n";
if(str.isempty())
message += "enter starting serial number \n";
else
serial = str;
str1+=str;
str1+="\n";
if(str.isempty())
message += "enter meter constant range 1 \n";
else
range1 = atoi(str);
str1+=str;
str1+="\n";
if(str.isempty())
message += "enter meter constant range 2 \n";
else
range2 = atoi(str);
/* //sprintf
//sprintf----------
char *temp;
sprintf(temp,"%d",digitsinhowmany);
messagebox(temp,"testing");
//---------------*/
//record save
m_pset->addnew();
updatedata(true);
if (m_pset->canupdate())
m_pset->update();
m_pset->requery();
updatedata(false);
//first one is saved.
//==========================================================
//generate and save the remaining id's.ie upto howmany id's.
//==========================================================
int i = 1;
part1_len = part1.getlength();
new_id = atoi(part2);
new_id = new_id + 1;
part2 = "";
part2.format("%d",new_id);
part2_len = part2.getlength();
id = part1 + part2;
return id;
}
part1_len = part1.getlength();
new_serial = atoi(part2);
new_serial = new_serial + 1;
part2 = "";
part2.format("%d",new_serial);
part2_len = part2.getlength();
int meterconstant;
m_pset->m_iserialno = serial;
m_pset->m_iconsumerid = id;
meterconstant = rand(range2);
//record save
m_pset->addnew();
updatedata(true);
if (m_pset->canupdate())
m_pset->update();
m_pset->requery();
updatedata(false);