在一个vc程序中,用了odbc去访问一个Access数据库,在自己的机器上可以运行,把整个工程考到另一个机器上,运行的时候就报出“未发现数据源名称并且未制定默认驱动程序”。我自己的机器时自己配置的ODBC,想请教一下,我的这个程序怎么让它在程序里配置,使能在原来没有配置的机器上使用。
另外,在程序最后打包的时候,应该怎么做才行呢?这几天被这个问题搞昏了,没有找到适合我这个问题的资料。请各位指导了,多谢
另外,在程序最后打包的时候,应该怎么做才行呢?这几天被这个问题搞昏了,没有找到适合我这个问题的资料。请各位指导了,多谢
解决方案 »
- mscomm
- 静态库写一个接口函数供库外调用//改变静态库里封装的函数?
- 字节,位操作再问。
- 两个EXE问题?
- 怎样把浮点数正确地转换为整数
- 在线等待,有效马上结贴。如何在资源管理器左视图加入树形文件列表或者树形视图?
- WriteString出现异常。怎么解决?内有代码。
- 我已在object/library modules中设置了ddraw.lib d3drm.lib,为什么还是编译出错??
- 高分求邮件附件分离的源代码!分不够再加100分
- 有谁能帮我搞定这个问题,郁闷~~,如何如何计算出两个日期之间的所有日期
- socket程序,客户端的端口不能固定吗?
- 一个多行CEdit控件,怎样输出多行文本
GetCurrentDirectory(256,(char *)szDir);
sprintf(szValue,"%s\\Database\\dbodbc8.dll",szDir);
RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\ODBC\\ODBCINST.INI\\Sandy Database Engine",&hkey);
RegSetValueEx(hkey,"Driver",0,REG_SZ,(const BYTE *)szValue,256);
RegSetValueEx(hkey,"Setup",0,REG_SZ,(const BYTE *)szValue,256);
RegCloseKey(hkey);
RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\ODBC\\ODBC.INI\\ODBC Data Sources",&hkey);
strcpy(szValue,"DentistryDoctor's Database Engine");
RegSetValueEx(hkey,"dvr",0,REG_SZ,(const BYTE *)szValue,256);
RegCloseKey(hkey);
RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\ODBC\\ODBC.INI\\dvr",&hkey);
strcpy(szValue,"YES");
RegSetValueEx(hkey,"AutoStop",0,REG_SZ,(const BYTE *)szValue,256);
RegSetValueEx(hkey,"KeysInSQLStatistics",0,REG_SZ,(const BYTE *)szValue,256);
sprintf(szValue,"%s\\Database\\dvr.db",szDir);
RegSetValueEx(hkey,"DatabaseFile",0,REG_SZ,(const BYTE *)szValue,256);
strcpy(szValue,"dvr");
RegSetValueEx(hkey,"DatabaseName",0,REG_SZ,(const BYTE *)szValue,256);
strcpy(szValue,"NO");
RegSetValueEx(hkey,"Debug",0,REG_SZ,(const BYTE *)szValue,256);
RegSetValueEx(hkey,"DisableMultiRowFetch",0,REG_SZ,(const BYTE *)szValue,256);
RegSetValueEx(hkey,"Integrated",0,REG_SZ,(const BYTE *)szValue,256);
sprintf(szValue,"%s\\Database\\dbodbc8.dll",szDir);
RegSetValueEx(hkey,"Driver",0,REG_SZ,(const BYTE *)szValue,256);
sprintf(szValue,"%s\\Database\\dbeng8.exe -c 4m",szDir);
RegSetValueEx(hkey,"Start",0,REG_SZ,(const BYTE *)szValue,256);
strcpy(szValue,"dba");
RegSetValueEx(hkey,"UID",0,REG_SZ,(const BYTE *)szValue,256);
strcpy(szValue,"****************************");
RegSetValueEx(hkey,"EncryptedPassword",0,REG_SZ,(const BYTE *)szValue,256);
RegCloseKey(hkey);
1、必须将头文件ODBCINST.H包含进来,否则编译时会提示两个错误: error C2065: 'SQLConfigDataSource' : undeclared identifier error C2065: 'ODBC_ADD_DSN' : undeclared identifier 这是因为函数在该头文件中declare 2、SQLConfigDataSource的参数设置 第三个参数可参考ODBC管理器的驱动程序页。 第四个参数说明数据源的属性,由一系列子串构成,每个子串之间用"\0"符隔开。 第四个参数的设置可参考注册表相关部分。 void CMdbDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDatabase db;if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)","DSN=kq\0DBQ=d:\\kaoqin.mdb\0FIL=MS Access;\0"))
{
AfxMessageBox("不能注册数据源!");
return;
}
try
{
db.Open("kq");
}
catch(CDBException* e)
{
AfxMessageBox(e->m_strError);
return;
}}
_SYS_DSN,"Microsoft Access Driver (*.mdb)\0","
DSN=TryDB\0DBQ=D:\\Database\\
try.mdb\0DEFAULTDIR=D:\\DATABASE\0\0");
The following example uses the ::SQLConfigDataSource ODBC API function to create a new Excel data source called "New Excel Data Source":SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)",
"DSN=New Excel Data Source\0"
"Description=New Excel Data Source\0"
"FileType=Excel\0"
"DataDirectory=C:\\EXCELDIR\0"
"MaxScanRows=20\0");
Note that the data source is actually a directory (C:\EXCELDIR); this directory must exist. The Excel driver uses directories as its data sources, and files as the individual tables (one table per .xls file).加别的文件也一样
SQLConfigDataSource(NULL,ODBC_ADD
_SYS_DSN,"Microsoft Access Driver (*.mdb)\0","
DSN=YourDB\0DBQ=c:\\DB\\
your.mdb\0DEFAULTDIR=c:\\DB\0\0");
另外问以下,要想获得相关的知识,除了上网问,自己怎么获得呢,在msdn里也不是很好查
我去试一下,回来再谢谢各位
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); mlen = strlen(szDesc);
for (int i=0; i<mlen; i++)
{
if (szDesc[i] == '?')
szDesc[i] = '\0';
} if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))
AfxMessageBox("SQLConfigDataSource Failed");