ODBC动态创建access数据库
2009-04-11 16:12
316 查看
#include "stdafx.h"
#include <string>
using namespace std;
/*
bool CreateData(void)
{
CString szPath;
::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer();
int nPos;
nPos = szPath.ReverseFind('//');
szPath = szPath.Left(nPos);
CString szFile = szPath + "//bookdata.mdb";
CString szAtr;
szAtr.Format(_T("DSN = bookdata!DBQ = %s!DEFAULTDIR = %s!!"),szFile,szPath);
HANDLE hFind;
WIN32_FIND_DATA wfd;
hFind = ::FindFirstFile(szFile,&wfd);
if(hFind == INVALID_HANDLE_VALUE)
{
int nlen;
nlen = szAtr.GetLength();
for(int i = 0;i<nlen;i++)
{
if(szAtr.GetAt(i) == '!')
szAtr.SetAt (i,'/0') ;
}
bool fCreated;
fCreated = SQLConfigDataSource(NULL,
ODBC_ADD_DSN,
_T("Microsoft Access Driver(*mdb)/0"),
(LPCWSTR)szAtr);
::FindClose (&hFind);
return fCreated;
}
return false;
}
*/
void CreateData()
{
/*
bool fCreated;
fCreated = ::SQLConfigDataSourceW(NULL,
ODBC_ADD_DSN,
_T("Microsoft Access Driver(*mdb)"),
_T("Driver=Microsoft Access Driver (*.mdb)/0Dbq=c://dbname.mdb/0Uid=Admin/0Pwd=pass/0/0"));
return fCreated;
string MainProgramPath=::GetModuleFileName(NULL,MainProgramPath.GetSetBufferLength(MAXPATH+1),MAXPATH);
MainProgramPath.ReleaseBuffer();
string ODBC_DSN_NameStr="Microsoft Access Driver(*mdb)";
string MdbDirPathStr=MainProgramPath+"MDB//";
string MdbFileNameStr="DVB-S.mdb";
CString szPath;
::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer();
int nPos;
string ODBC_DSN_NameStr="Microsoft Access Driver(*mdb)";
nPos = szPath.ReverseFind('//');
szPath = szPath.Left(nPos);
CString szFile = szPath + "//bookdata.mdb";
char ODBC_DSN[256];
sprintf(ODBC_DSN,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ",ODBC_DSN_NameStr.c_str(),szFile,szPath);
int thelen=strlen(ODBC_DSN);
for(int i=0; i <thelen; i++)
{
if(ODBC_DSN[i] == '!')
ODBC_DSN[i] = '/0';
}
bool fCreated;
fCreated = SQLConfigDataSource(NULL,ODBC_ADD_DSN, _T("Microsoft Access Driver (*.mdb)/0"),(LPCWSTR)ODBC_DSN) ; //用户库
//if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)/0",(LPCSTR)ODBC_DSN)) //系统库
if (FALSE == fCreated)
AfxMessageBox(_T("SQLConfigDataSource Failed"));
return fCreated;
}
*/
//HWND* m_hWnd1;
// m_hWnd1 =AfxGetMainWnd();
//BOOL fCreated;
//if(fCreated =
//SQLConfigDataSource( AfxGetApp()->GetMainWnd()->m_hWnd,ODBC_ADD_DSN,_T("Microsoft Access Driver(*.mdb)"),
// _T("DSN=Access Data Source/0")
// _T("DBQ=C://MyDocuments//dq.mdb/0")
// _T("Description=ODBC数据源/0")
// _T("DataDirectory=C://MyDocuments/0" )
// _T("/0")))
/*
SQLConfigDataSource(AfxGetApp()->GetMainWnd()->m_hWnd,ODBC_ADD_DSN,_T("Microsoft Access Driver (*.mdb)"),
_T( "COMPACT_DB=C://Sample.mdb C://CompatedSample.mdb General/0")
_T( "PWD=WSG/0DataDirectory=C://0MaxScanRows=20/0/0")))
AfxMessageBox(_T("创建成功!"));
else
AfxMessageBox(_T("取消创建或创建失败!"));
DWORD ierror;
DWORD errcode;
char szError[256] ;
WORD cerror;
WORD perror;
SQLInstallerError(ierror,&errcode,(LPWSTR)szError,cerror,&perror);
if(errcode==ODBC_ERROR_INVALID_HWND)
{
AfxMessageBox(_T("ODBC_ERROR_INVALID_HWND"));
}
else if(errcode==ODBC_ERROR_GENERAL_ERR)
{
AfxMessageBox(_T("ODBC_ERROR_GENERAL_ERR"));
}
else if(errcode==ODBC_ERROR_INVALID_REQUEST_TYPE)
{AfxMessageBox(_T("ODBC_ERROR_INVALID_REQUEST_TYPE"));
}
else if(errcode==ODBC_ERROR_INVALID_NAME)
{
AfxMessageBox(_T("ODBC_ERROR_INVALID_NAME"));
}
else if(errcode==ODBC_ERROR_REQUEST_FAILED)
{
AfxMessageBox(_T("ODBC_ERROR_REQUEST_FAILED"));
}
*/
CString szPath;
GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer ();
int nPos;
nPos = szPath.ReverseFind ('//');
szPath = szPath.Left (nPos);
CString szFile = szPath + "//bookdata.mdb";
CString szAtr;
szAtr.Format(_T("DSN=bookdata!DBQ=%s!DEFAULTDIR=%s!!"),szFile,szPath);
int nlen;
nlen = szAtr.GetLength();
for(int i = 0;i <nlen;i++)
{
if(szAtr.GetAt(i) == '!')
szAtr.SetAt (i,'/0') ;
}
if (FALSE == SQLConfigDataSource(NULL, ODBC_ADD_DSN, _T("Microsoft Access Driver (*.mdb)/0"), (LPCWSTR)szAtr))
AfxMessageBox(_T("数据源配置失败,确认数据库bookdata.mdb是否在当前路径下!"));
AfxMessageBox(_T("创建数据库成功"));
//return fCreated;
}
前面的失败只是因为连接字符串里的空格
#include <string>
using namespace std;
/*
bool CreateData(void)
{
CString szPath;
::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer();
int nPos;
nPos = szPath.ReverseFind('//');
szPath = szPath.Left(nPos);
CString szFile = szPath + "//bookdata.mdb";
CString szAtr;
szAtr.Format(_T("DSN = bookdata!DBQ = %s!DEFAULTDIR = %s!!"),szFile,szPath);
HANDLE hFind;
WIN32_FIND_DATA wfd;
hFind = ::FindFirstFile(szFile,&wfd);
if(hFind == INVALID_HANDLE_VALUE)
{
int nlen;
nlen = szAtr.GetLength();
for(int i = 0;i<nlen;i++)
{
if(szAtr.GetAt(i) == '!')
szAtr.SetAt (i,'/0') ;
}
bool fCreated;
fCreated = SQLConfigDataSource(NULL,
ODBC_ADD_DSN,
_T("Microsoft Access Driver(*mdb)/0"),
(LPCWSTR)szAtr);
::FindClose (&hFind);
return fCreated;
}
return false;
}
*/
void CreateData()
{
/*
bool fCreated;
fCreated = ::SQLConfigDataSourceW(NULL,
ODBC_ADD_DSN,
_T("Microsoft Access Driver(*mdb)"),
_T("Driver=Microsoft Access Driver (*.mdb)/0Dbq=c://dbname.mdb/0Uid=Admin/0Pwd=pass/0/0"));
return fCreated;
string MainProgramPath=::GetModuleFileName(NULL,MainProgramPath.GetSetBufferLength(MAXPATH+1),MAXPATH);
MainProgramPath.ReleaseBuffer();
string ODBC_DSN_NameStr="Microsoft Access Driver(*mdb)";
string MdbDirPathStr=MainProgramPath+"MDB//";
string MdbFileNameStr="DVB-S.mdb";
CString szPath;
::GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer();
int nPos;
string ODBC_DSN_NameStr="Microsoft Access Driver(*mdb)";
nPos = szPath.ReverseFind('//');
szPath = szPath.Left(nPos);
CString szFile = szPath + "//bookdata.mdb";
char ODBC_DSN[256];
sprintf(ODBC_DSN,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ",ODBC_DSN_NameStr.c_str(),szFile,szPath);
int thelen=strlen(ODBC_DSN);
for(int i=0; i <thelen; i++)
{
if(ODBC_DSN[i] == '!')
ODBC_DSN[i] = '/0';
}
bool fCreated;
fCreated = SQLConfigDataSource(NULL,ODBC_ADD_DSN, _T("Microsoft Access Driver (*.mdb)/0"),(LPCWSTR)ODBC_DSN) ; //用户库
//if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)/0",(LPCSTR)ODBC_DSN)) //系统库
if (FALSE == fCreated)
AfxMessageBox(_T("SQLConfigDataSource Failed"));
return fCreated;
}
*/
//HWND* m_hWnd1;
// m_hWnd1 =AfxGetMainWnd();
//BOOL fCreated;
//if(fCreated =
//SQLConfigDataSource( AfxGetApp()->GetMainWnd()->m_hWnd,ODBC_ADD_DSN,_T("Microsoft Access Driver(*.mdb)"),
// _T("DSN=Access Data Source/0")
// _T("DBQ=C://MyDocuments//dq.mdb/0")
// _T("Description=ODBC数据源/0")
// _T("DataDirectory=C://MyDocuments/0" )
// _T("/0")))
/*
SQLConfigDataSource(AfxGetApp()->GetMainWnd()->m_hWnd,ODBC_ADD_DSN,_T("Microsoft Access Driver (*.mdb)"),
_T( "COMPACT_DB=C://Sample.mdb C://CompatedSample.mdb General/0")
_T( "PWD=WSG/0DataDirectory=C://0MaxScanRows=20/0/0")))
AfxMessageBox(_T("创建成功!"));
else
AfxMessageBox(_T("取消创建或创建失败!"));
DWORD ierror;
DWORD errcode;
char szError[256] ;
WORD cerror;
WORD perror;
SQLInstallerError(ierror,&errcode,(LPWSTR)szError,cerror,&perror);
if(errcode==ODBC_ERROR_INVALID_HWND)
{
AfxMessageBox(_T("ODBC_ERROR_INVALID_HWND"));
}
else if(errcode==ODBC_ERROR_GENERAL_ERR)
{
AfxMessageBox(_T("ODBC_ERROR_GENERAL_ERR"));
}
else if(errcode==ODBC_ERROR_INVALID_REQUEST_TYPE)
{AfxMessageBox(_T("ODBC_ERROR_INVALID_REQUEST_TYPE"));
}
else if(errcode==ODBC_ERROR_INVALID_NAME)
{
AfxMessageBox(_T("ODBC_ERROR_INVALID_NAME"));
}
else if(errcode==ODBC_ERROR_REQUEST_FAILED)
{
AfxMessageBox(_T("ODBC_ERROR_REQUEST_FAILED"));
}
*/
CString szPath;
GetModuleFileName(NULL,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer ();
int nPos;
nPos = szPath.ReverseFind ('//');
szPath = szPath.Left (nPos);
CString szFile = szPath + "//bookdata.mdb";
CString szAtr;
szAtr.Format(_T("DSN=bookdata!DBQ=%s!DEFAULTDIR=%s!!"),szFile,szPath);
int nlen;
nlen = szAtr.GetLength();
for(int i = 0;i <nlen;i++)
{
if(szAtr.GetAt(i) == '!')
szAtr.SetAt (i,'/0') ;
}
if (FALSE == SQLConfigDataSource(NULL, ODBC_ADD_DSN, _T("Microsoft Access Driver (*.mdb)/0"), (LPCWSTR)szAtr))
AfxMessageBox(_T("数据源配置失败,确认数据库bookdata.mdb是否在当前路径下!"));
AfxMessageBox(_T("创建数据库成功"));
//return fCreated;
}
前面的失败只是因为连接字符串里的空格
相关文章推荐
- 用C#动态创建Access数据库
- ODBC - 在代码里动态创建ODBC数据源
- 用C#动态创建Access数据库
- 如何动态创建带密码的ACCESS数据库?
- 在.NET 2.0框架下动态创建Access数据库和表时的注意事项
- vc下动态创建access数据库的实现
- 详解C#动态创建Access数据库及密码
- Delphi动态创建、压缩Access数据库
- 用C#动态创建Access数据库
- VB.Net中动态创建Access数据库
- 动态创建ACCESS数据库及其表结构
- 在.NET 2.0框架下动态创建Access数据库和表
- C#动态创建Access数据库及表的方法
- 如何动态创建ACCESS数据库
- C#动态创建及连接ACCESS数据库的详细步骤
- 在DELPHI源程序中动态创建ACCESS数据库及当即建表文件
- 在VC中用ADO动态创建带密码的Access数据库
- C#动态创建Access数据库及密码的方法
- delphi中动态创建MySQL的ODBC连接 --转
- 详解C#动态创建Access数据库及密码