程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 對《一個完善的ODBC數據庫程序》一文的補充

對《一個完善的ODBC數據庫程序》一文的補充

編輯:關於VC++

編者注:本文是作者對不久前發布的一篇文章的補充,在閱讀本文之前,最好先看一下原來的文章:“一個完善的ODBC數據庫程序”。

從方便用戶的角度考慮,應該在程序中采用動態創建數據源。經過編者的提醒,我查找了一些資料,還好最終實現了。代碼如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
//取的數據庫的路徑(參考徐景周的〈直接通過DAO讀寫Access文件〉
	CString sPath;
	GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer ();
	int nPos;
	nPos=sPath.ReverseFind (''\\'');
	sPath=sPath.Left (nPos);
	CString lpszFile = sPath + "\\student.mdb";
//在用SQLConfigDataSource()函數時,有一個需要注意的地方,因為在函數中用到Cstring
//變量,由於本身是字符串,最後有\0,所以用下面的方法處理:
	       char* szDesc;
			int mlen;
			szDesc=new char[256];
			sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","not",lpszFile,sPath);
//not為數據源名你可以改動。但必須與CString CLhwySet::GetDefaultConnect()
//{
//	return _T("ODBC;DSN=not");
//}
//中的數據源名保持一致,你可以改變一下。
			mlen = strlen(szDesc);
			  for (int i=0; i<mlen; i++)
			  {
				if (szDesc[i] == ''?'')
				  szDesc[i] = ''\0'';
			  }
//SQLConfigDataSource()函數用法參考:《用Visual C++程序實現設置ODBC數據源 》 下面//兩種用法都不成功
// if(FALSE==SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0","DSN=AbbDBQ=lpszFileDEFAULTDIR=sPath\0"))
// if(FALSE==SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0","DSN=Abb\0DBQ=lpszFile\0DEFAULTDIR=sPath\0\0"))
if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))
				AfxMessageBox("Failed");
	return 0;
}

需要注意的兩點:

1.在開頭需要包含頭文件:#include <odbcinst.h>。

2.Student.mdb 必須和lhwy應用程序在同一目錄下。

你還可以做一個讓用戶從一個對話框向程序輸入ODBC數據源名、以及通過浏濫文件目錄選擇所需數據庫,試一下。但一定注意CString的處理方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved