想把一个数据库的表中的东西写入一个文件中,但不知用什么方法,数据记录大概有几千条,要求逐个读入,还能逐个读出(按原来的形式返回数据库),在两个字段数据之间用什么做分隔呢?如何来实现。请各位帮忙,先谢!

解决方案 »

  1.   

    我以前导数据的时候使用TAB,你看看行不行,可以去看看ACCESS里面的方发但是要对齐
      

  2.   

    See the sample below, FYI: http://codeproject.com/database/cspreadsheet.asp
      

  3.   

    我有个好办法,我觉得还不错,实现起来很简单。用INI文件结合结构体思路是这样的:
    1.首先建立一个结构体,要跟你的数据库中字段相同,我想这应该很容易,跟你的字段一一对应。
    2.对INI文件的操作,几个API你应该比较熟悉吧,重点提出这两个,你将会用到:
    BOOL WritePrivateProfileStruct(
      LPCTSTR lpszSection,
                        // pointer to section name
      LPCTSTR lpszKey,  // pointer to key name
      LPVOID lpStruct,  // pointer to buffer that contains data to add
      UINT uSizeStruct, // size, in bytes, of the buffer
      LPCTSTR szFile    // pointer to initialization filename
    );
    BOOL GetPrivateProfileStruct(
      LPCTSTR lpszSection,  // address of section name
      LPCTSTR lpszKey,      // address of key name
      LPVOID lpStruct,      // address of return buffer
      UINT uSizeStruct,     // size of return buffer
      LPCTSTR szFile        // address of initialization filename
    );
    将结构体中的数据写到键值,或者将键值读到数据库。聪明的人,我想应该明白我的意思了。
    一个结构体对应一条记录。然后用以下两个API来记录你的数据库的记录条数:
    BOOL WritePrivateProfileString(
      LPCTSTR lpAppName,  // pointer to section name
      LPCTSTR lpKeyName,  // pointer to key name
      LPCTSTR lpString,   // pointer to string to add
      LPCTSTR lpFileName  // pointer to initialization filename
    );
    UINT GetPrivateProfileInt(
      LPCTSTR lpAppName,  // address of section name
      LPCTSTR lpKeyName,  // address of key name
      INT nDefault,       // return value if key name is not found
      LPCTSTR lpFileName  // address of initialization filename
    );
    DWORD GetPrivateProfileString(
      LPCTSTR lpAppName,        // points to section name
      LPCTSTR lpKeyName,        // points to key name
      LPCTSTR lpDefault,        // points to default string
      LPTSTR lpReturnedString,  // points to destination buffer
      DWORD nSize,              // size of destination buffer
      LPCTSTR lpFileName        // points to initialization filename
    );
    加上你的程序控制,我想完全可以实现你的目的。省下的事情,你来吧!:)
      

  4.   

    对了,如果你对这几个API不熟悉的话,就看看MSDN吧,很容易理解的。
    你可以封装成类来调用。
      

  5.   

    如果每条数据记录的条数不多的话可以声明一个非可视对象,然后添加成员利用VC的串行化Serialize到文件中去。但是这种解决方案只适用于记录条数不多的情况下。
    还有,如果数据量比较大,只好使用struct了,比如:
    struct Stu 
    {
       int num ;
       char name[30] ;
       ....
    };
    CFile fsave("data.dat",CFile::modeCreate | CFile::modeWrite) ;
    struct Stu ms ;
    m_dataset->GetFieldValue(...)
    ms.num = ...
    ms.name = ...
    // 赋值操作
    fsave.Write(&ms,sizeof(struct Stu)) ;
    m_dataset->MoveNext() ;
    这样放在一个while循环中即可:
    while(!m_dataset->EOF())
    {
       ....
    }
     就可以保存数据了,读取只要把Write模式换成Read模式,Write函数换成Read即可从文件中读取数据。还有数据库的操作采用m_dataset->AddNew()。m_dataset->UpdateData();就可以复原了。