vc学习历程(4)--把文本数据到如到Access数据库中DLL形式

来源:互联网 发布:python3源码剖析 编辑:程序博客网 时间:2024/06/05 12:44

本篇的主要目的是,把文本中的数据(有一定的规则)到入到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;
   }

原创粉丝点击