本篇的主要目的是,把文本中的数据(有一定的规则)到入到ACCESS数据库中,
代码如下:
#include <afxdao.h>
CDaoDatabase db; //数据库
CDaoRecordset RecSet(&db); //记录集
int __stdcall SaveToAccessDatebase( LPCTSTR lpszTxtFilePath , LPCTSTR lpszDatebaseFilePath )
{
int num=0;
CStdioFile file;
CString linedate;
static BOOL Flagbool=FALSE;
BOOL fsuccess;
int linelen,Flag;
int i,k,j,count1=0,count2=0;
char strid[10],strname[20],strsex[20],stremail[30],strzu[20];//用来存放文本中的数据;
char strbirth[15],strqq[15],strmsn[15];
CFileFind ffile;
fsuccess=ffile.FindFile (lpszDatebaseFilePath);//查找数据库的存放路径,如果存在则返回真值;
ffile.Close ();
if(!fsuccess)
{
db.Create(lpszDatebaseFilePath);//创建数据库;
CString SqlCmd="CREATE TABLE table1(ID VARCHAR(20),NAME VARCHAR(60),SEX VARCHAR(30),EMAIL VARCHAR(40),ZU VARCHAR(40),BIRTHDAY VARCHAR(40),QQ VARCHAR(40),MSN VARCHAR(40));";
//建表;
db.Execute(SqlCmd);//执行SQL语句;
// //打开已创建的数据表
// RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,
// "SELECT * FROM table1", 0);
//加入第一个记录,用SQL语句
}
else
db.Open (lpszDatebaseFilePath);
file.Open (lpszTxtFilePath,CFile::modeRead );//打开文本文件;
while(file.ReadString (linedate))//一行一行的读取文本数据;
{
num++;
linelen=linedate.GetLength ();//获取一行的长度;
char *buf=linedate.GetBuffer (linelen);
linedate.ReleaseBuffer ();
Flagbool=FALSE;
Flag=0;
for(i=0;i<=linelen;i++)//循环判断文本的格式,进行赋值;
{
if(*(buf+i)==':')
{
count1=i;
Flagbool=TRUE;
}
if(*(buf+i)==' '||*(buf+i)=='/0')
{
if(Flagbool==TRUE)
{
count2=i;
Flagbool=FALSE;
Flag=Flag+1;
switch(Flag)
{
case 1:
k=0;
for(j=count1+1;j<count2;j++)
{
strid[k]=*(buf+j);
k++;
}
strid[k]='/0';
break;
case 2:
k=0;
for(j=count1+1;j<count2;j++)
{
strname[k]=*(buf+j);
k++;
}
strname[k]='/0';
break ;
case 3:
k=0;
for(j=count1+1;j<count2;j++)
{
strsex[k]=*(buf+j);
k++;
}
strsex[k]='/0';
break ;
case 4:
k=0;
for(j=count1+1;j<count2;j++)
{
stremail[k]=*(buf+j);
k++;
}
stremail[k]='/0';
break ;
case 5:
k=0;
for(j=count1+1;j<count2;j++)
{
strzu[k]=*(buf+j);
k++;
}
strzu[k]='/0';
break ;
case 6:
k=0;
for(j=count1+1;j<count2;j++)
{
strbirth[k]=*(buf+j);
k++;
}
strbirth[k]='/0';
break ;
case 7:
k=0;
for(j=count1+1;j<count2;j++)
{
strqq[k]=*(buf+j);
k++;
}
strqq[k]='/0';
break ;
case 8:
k=0;
for(j=count1+1;j<count2;j++)
{
strmsn[k]=*(buf+j);
k++;
}
strmsn[k]='/0';
break;
}
}
}
}
//打开已创建的数据表
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,
"SELECT * FROM table1", 0);
//加入记录,用DAO涵数
RecSet.AddNew(); //增加一条新记录;
RecSet.SetFieldValue("ID",strid); //进行赋值;
RecSet.SetFieldValue("NAME",strname);
RecSet.SetFieldValue("SEX",strsex);
RecSet.SetFieldValue("EMAIL",stremail);
RecSet.SetFieldValue("ZU",strzu);
RecSet.SetFieldValue("BIRTHDAY",strbirth);
RecSet.SetFieldValue("QQ",strqq);
RecSet.SetFieldValue("MSN",strmsn);
RecSet.Update();
//关闭记录集及库
// RecSet.Close();
// db.Close();
}
// RecSet.Close();
db.Close();
// AfxMessageBox("Access文件写入成功!");
return num;
}
def中的代码:
LIBRARY mydll
EXPORTS
SaveToAccessDatebase
用到的类:MSDN中的事例;
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}