我通过“管理工具---数据源 (ODBC)”创建了一个新的用户数据源(对应的驱动程序选择Microsoft Access Driver)。在VC中添加一个对应的新类class CEmploy : public Crecordset。使用以下语句在表中添加第一条记录:
EmployerSet.AddNew();
EmployerSet.m_ID = …;
…
EmployerSet.Update();
如果表中一条记录都没有,运行到语句EmployerSet.Update()时肯定出错。如果表中已有记录,则不出错。特此请教。另外,如何把上述手工创建数据源的过程放到安装程序中实现自动创建,也请赐教。
EmployerSet.AddNew();
EmployerSet.m_ID = …;
…
EmployerSet.Update();
如果表中一条记录都没有,运行到语句EmployerSet.Update()时肯定出错。如果表中已有记录,则不出错。特此请教。另外,如何把上述手工创建数据源的过程放到安装程序中实现自动创建,也请赐教。
解决方案 »
- 高分求解在MFC环境下使用Berkeley_DB的问题。
- 基于对话框的dll运行时任务栏显示的icon怎么改
- 《DirectShow实务精选》关于DSNetwork的问题
- 数据库连接不上,adodc控件+access+datagrid
- 等待事件的问题,散分啰!
- 初学者请教:工具箱里怎么找不到DataGrid控间?
- 简单,如何实现延时?
- 如何获得Version资源里的各项值(MFC EXE App)?
- 对话框失去焦点后如何让该对话框的菜单栏不变灰?
- java写服务器端,c++写客户端,tcp的socket通信
- 想在连接点 方法中用自定义类型 指针做参数,请教Fire_MyMothed(CMyClass* pclass)该怎么写?
- 那位能告诉我如何用程序实现共享资源得访问权限只能以Administrator
在AddNew()前加上EmployerSet.SetFieldNULL(NULL);2
Q 用代码实现自动注册一个工程目录下的access数据库的ODBC数据源
A
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);//得到程序的路径
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
CString lpszFile=sPath+"\\lhwy.mdb"; //得到程序目录下的数据库的完整路径
char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s??","lhwy",lpszFile,sPath); //形成一个SQLConfigDataSource函数参数串结构
mlen = strlen(szDesc);
for (int i=0; i{
if(szDesc[i]=='?')
szDesc[i] = '\0'; //替换上面串的?为\0,形成一个完整的串
}
if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))//注册数据库
AfxMessageBox("SQLConfigDataSource Failed");
应该是你的表中有时间类型的字段。对于时间类型的字段,在映射的CRecordset类中会将改字段映射为CTime类型的变量,但在构造函数中没有给该变量赋初值,所以会出现你所说的问题。解决的办法有两种:
1、在构造函数中给该CTime类型的变量赋初值
2、将映射变量的类型改为COleDateTime。