如何在程序中自动注册数据源 我做了一个小型系统,打包安装到其他机器后,必须手工重新配置数据源,如何在程序中通过代码实现数据源的自动注册? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 result=((CMyApp *)AfxGetApp())->currentdir+"db1.mdb"; sprintf(odbc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=c:??", (LPTSTR)(LPCTSTR)(((CMyApp *)AfxGetApp())->m_DSN),(LPTSTR)(LPCTSTR)result); rv=strlen(odbc); for(i=0;i<rv;i++) if(odbc[i]=='?') odbc[i]='\0'; rv=SQLConfigDataSource(NULL,ODBC_ADD_DSN, (LPCSTR)"Microsoft Access Driver (*.mdb)\0", (LPCSTR)odbc); if(!rv) { //WORD iError; DWORD ErrorCode; char lpszErrorMsg[100]; //WORD cbErrorMsgMax; WORD cbMsgError; SQLInstallerError(1,&ErrorCode,lpszErrorMsg,100,&cbMsgError); } void RegisterDBSource(CString strDSName, CString strDBPath){ HKEY hKey; DWORD nLabel; CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI"); CString strMid = strBaseKey + _T("\\ODBC Data Sources") ; if(strDataSourceName.IsEmpty()) return; if(strDBPath.IsEmpty()) return; CString strDataSource = strBaseKey + _T("\\") + strDSName; CString strMdb = _T("Microsoft Access Driver (*.mdb)"); CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll"); CString strFIL = _T("Ms Access;"); CString strUID = _T(""); RegCreateKeyEx(HKEY_CURRENT_USER, strMid, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &nLabel );//获取数据源键值句柄 RegSetValueEx(hKey, strDSName, 0, REG_SZ, (const unsigned char *)((LPCTSTR)strMdb), strlen((LPCTSTR)strMdb)+1);///设置数据源类型 RegCreateKeyEx(HKEY_CURRENT_USER, strDataSource, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &nLabel );//创建数据源子键 RegSetValueEx(hKey, _T("DBQ"), 0, REG_SZ, (const unsigned char *)((LPCTSTR)strDBPath), strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径 RegSetValueEx(hKey, _T("Driver"), 0, REG_SZ, (const unsigned char *)((LPCTSTR)strDBDriver), strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径 RegSetValueEx(hKey, _T("FIL"), 0, REG_SZ, (const unsigned char *)((LPCTSTR)strFIL), strlen((LPCTSTR)strFIL)+1);//表的类型 RegSetValueEx(hKey, _T("UID"), 0, REG_SZ, (const unsigned char *)((LPCTSTR)strUID), strlen((LPCTSTR)strUID)+1);//必须项 DWORD DriverId = (DWORD)25; RegSetValueEx(hKey, _T("DriverId"), 0, REG_DWORD, (const BYTE *)(&DriverId), sizeof(DWORD));//必须项 DWORD SafeTrans = (DWORD)0; RegSetValueEx(hKey, _T("SafeTransactions"), 0, REG_DWORD, (const BYTE *)(&SafeTrans), sizeof(DWORD));//可选项} 通过注册表来添加ODBC数据源! 我是用MFC做的,楼上二位是不是都用WIN32做的? 控件库的下载 帮忙来看看 如何获取视图窗口鼠标坐标的绝对位置X,Y 类为什么加载不全啊??? 请问#include "..\..\Export Files\Include\hPlane2D.h"什么意思??? 如何在一个程序中调用其他exe程序 VCspecialist please come in: 请问c++里面怎么输出退格('/b')? 我的richedit怎么实现不了多行的功能? registerwndclass这个函数是注册用的,是把对象注册到注册表里面吗?谢谢!!! 对话框CDialog类的的一个对象,用DoModal()弹出后,是否会启动一个线程. 如何监视写文件时写入的数据?
sprintf(odbc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=c:??",
(LPTSTR)(LPCTSTR)(((CMyApp *)AfxGetApp())->m_DSN),(LPTSTR)(LPCTSTR)result);
rv=strlen(odbc);
for(i=0;i<rv;i++)
if(odbc[i]=='?') odbc[i]='\0';
rv=SQLConfigDataSource(NULL,ODBC_ADD_DSN,
(LPCSTR)"Microsoft Access Driver (*.mdb)\0", (LPCSTR)odbc);
if(!rv)
{ //WORD iError;
DWORD ErrorCode;
char lpszErrorMsg[100];
//WORD cbErrorMsgMax;
WORD cbMsgError;
SQLInstallerError(1,&ErrorCode,lpszErrorMsg,100,&cbMsgError);
}
{
HKEY hKey;
DWORD nLabel; CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ; if(strDataSourceName.IsEmpty()) return;
if(strDBPath.IsEmpty()) return; CString strDataSource = strBaseKey + _T("\\") + strDSName; CString strMdb = _T("Microsoft Access Driver (*.mdb)");
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
CString strFIL = _T("Ms Access;");
CString strUID = _T(""); RegCreateKeyEx(HKEY_CURRENT_USER,
strMid,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKey,
&nLabel );//获取数据源键值句柄 RegSetValueEx(hKey,
strDSName,
0,
REG_SZ,
(const unsigned char *)((LPCTSTR)strMdb),
strlen((LPCTSTR)strMdb)+1);///设置数据源类型 RegCreateKeyEx(HKEY_CURRENT_USER,
strDataSource,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKey,
&nLabel );//创建数据源子键 RegSetValueEx(hKey,
_T("DBQ"),
0,
REG_SZ,
(const unsigned char *)((LPCTSTR)strDBPath),
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径 RegSetValueEx(hKey,
_T("Driver"),
0,
REG_SZ,
(const unsigned char *)((LPCTSTR)strDBDriver),
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径 RegSetValueEx(hKey,
_T("FIL"),
0,
REG_SZ,
(const unsigned char *)((LPCTSTR)strFIL),
strlen((LPCTSTR)strFIL)+1);//表的类型 RegSetValueEx(hKey,
_T("UID"),
0,
REG_SZ,
(const unsigned char *)((LPCTSTR)strUID),
strlen((LPCTSTR)strUID)+1);//必须项
DWORD DriverId = (DWORD)25;
RegSetValueEx(hKey,
_T("DriverId"),
0,
REG_DWORD,
(const BYTE *)(&DriverId),
sizeof(DWORD));//必须项
DWORD SafeTrans = (DWORD)0;
RegSetValueEx(hKey,
_T("SafeTransactions"),
0,
REG_DWORD,
(const BYTE *)(&SafeTrans),
sizeof(DWORD));//可选项
}