数据源访问问题 用VC6编一数据库程序,首先要在ODBC定义一数据源DBSOR。如果把该程序直接复制到其他机器上,除要复制相关的数据库文件(ACCESS数据库)外,是否还要在该机器上创建相应的数据源DBSOR?如果不想这样,要求能直接复制程序和数据库就可以运行,程序中哪些地方需要做相应的调整啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用SQLConfigDataSource在程序里面动态配置数据源就可以了。。不需要在程序外面手工配置ODBC数据源。。http://www.vckbase.com/document/viewdoc/?id=452参考上面这篇文章的源程序,在BOOL CLhwyApp::InitInstance()这个函数里面调用了上面所说的函数。。 创建数据源,一般在InitInstance()里写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 + "\\DriTrain.mdb"; char* szDesc; int mlen; szDesc=new char[256]; sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","DriTrain",lpszFile,sPath); mlen = strlen(szDesc); for (int i=0; i<mlen; i++) if (szDesc[i] == '?') szDesc[i] = '\0'; // AfxMessageBox((LPCSTR)szDesc); SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc);删除数据源,一般在ExitInstance()写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 + "\\DriTrain.mdb"; char* szDesc; int mlen; szDesc=new char[256]; sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","DriTrain",lpszFile,sPath); mlen = strlen(szDesc); for (int i=0; i<mlen; i++) if (szDesc[i] == '?') szDesc[i] = '\0'; // AfxMessageBox((LPCSTR)szDesc); SQLConfigDataSource(NULL,ODBC_REMOVE_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc); //动态删除数据源 偶看到别人写的程序,是用DAO访问的,不用创建数据源;运行了该程序后,ODBC数据源里也没有,可见并不是通过程序代码实现自动添加数据源;而且能支持手工选择数据库文件,选择后,以后就一直使用该文件,除非又重新选择了数据库文件 可以,用SQLConfigDataSource在程序里面动态配置数据源就可以了。。http://www.vckbase.com/document/viewdoc/?id=452参考上面这篇文章的源程序,在BOOL CLhwyApp::InitInstance()这个函数里面调用了上面所说的函数。。这个程序运行后,在ODBC数据源里可以看到添加了一个数据源;但偶看到别人写的程序就没有,(程序还在运行中,未退出)怪! 熟悉Java编程,了解c语言,新手学习VC编程,请求推荐的学习资料,谢谢! 销毁一个窗口后,再一次创建,提示其中的控件问题 网络丢包的问题! 2000系统下 拷贝 4.3g的mdf文件,为什么会在最后 提示要几十万 分钟 怎么保存图片?? 求Cmemfile用法详解 各位大虾帮忙---怎样找到那个dll? 视图类添加WM_TIMER消息,实现动态变幻的矩形 何为“事务处理”?该怎样理解?盼赐教! Kerberos 5 身份认证 请问如何控制模态对话框和非模态对话框的显示位置? 有谁知道北京天海宏业国际软件有限公司?
参考上面这篇文章的源程序,在BOOL CLhwyApp::InitInstance()这个函数里面调用了上面所说的函数。。
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 + "\\DriTrain.mdb";
char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","DriTrain",lpszFile,sPath); mlen = strlen(szDesc);
for (int i=0; i<mlen; i++)
if (szDesc[i] == '?')
szDesc[i] = '\0';
// AfxMessageBox((LPCSTR)szDesc); SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc);
删除数据源,一般在ExitInstance()写
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 + "\\DriTrain.mdb";
char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","DriTrain",lpszFile,sPath); mlen = strlen(szDesc);
for (int i=0; i<mlen; i++)
if (szDesc[i] == '?')
szDesc[i] = '\0';
// AfxMessageBox((LPCSTR)szDesc); SQLConfigDataSource(NULL,ODBC_REMOVE_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc);
//动态删除数据源
而且能支持手工选择数据库文件,选择后,以后就一直使用该文件,除非又重新选择了数据库文件
参考上面这篇文章的源程序,在BOOL CLhwyApp::InitInstance()这个函数里面调用了上面所说的函数。。这个程序运行后,在ODBC数据源里可以看到添加了一个数据源;但偶看到别人写的程序就没有,(程序还在运行中,未退出)怪!