See the sample below, FYI: http://codeproject.com/database/cspreadsheet.asp
我有个好办法,我觉得还不错,实现起来很简单。用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 ); 加上你的程序控制,我想完全可以实现你的目的。省下的事情,你来吧!:)
对了,如果你对这几个API不熟悉的话,就看看MSDN吧,很容易理解的。 你可以封装成类来调用。
如果每条数据记录的条数不多的话可以声明一个非可视对象,然后添加成员利用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();就可以复原了。
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
);
加上你的程序控制,我想完全可以实现你的目的。省下的事情,你来吧!:)
你可以封装成类来调用。
还有,如果数据量比较大,只好使用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();就可以复原了。