myadoxclass.cpp

来自「采用VC++编写访问数据库非常麻烦」· C++ 代码 · 共 90 行

CPP
90
字号
// MyAdoxClass.cpp : 实现文件
//

#include "stdafx.h"
#include "MyAdoxClass.h"

// CMyAdoxClass

CMyAdoxClass::CMyAdoxClass()
{
}

CMyAdoxClass::~CMyAdoxClass()
{
}

bool CMyAdoxClass::GetDatabaseTables(LPCWSTR pConnectStr,long *pTableCount,LPWSTR** ppTablesNameArray)
{
	bool AllIsRight = true;
	*pTableCount = 0;
	*ppTablesNameArray = NULL;

	try
	{
		_CatalogPtr MyCataLog;
		Tables *pTables=NULL;
		HRESULT hr = MyCataLog.CreateInstance(L"ADOX.Catalog");

		hr = MyCataLog->put_ActiveConnection(_variant_t(pConnectStr));
		if(FAILED(hr))
			AllIsRight = false;

		if(AllIsRight)
		{
			hr = MyCataLog->get_Tables(&pTables);
			if(FAILED(hr))
				AllIsRight = false;
		}

		if(AllIsRight)
		{
			hr = pTables->get_Count(pTableCount);
			if(FAILED(hr))
				AllIsRight = false;
		}

		LPWSTR* ppp = (LPWSTR*)::CoTaskMemAlloc(sizeof(LPWSTR)**pTableCount);
		*ppTablesNameArray = ppp;
		for(long i=0;i<*pTableCount;i++)
			ppp[i] = NULL;

		int PosForBuff = 0;
		for(long i=0;i<(*pTableCount)&&AllIsRight;i++)
		{
			_Table *pTable = NULL;
			hr = pTables->get_Item(_variant_t(long(i)),&pTable);//一定要用long型变量
			if(FAILED(hr))
				AllIsRight = false;

			if(AllIsRight)
			{
				_bstr_t bstr;
				hr = pTable->get_Name(bstr.GetAddress());
				if(FAILED(hr))
					AllIsRight = false;

				if(AllIsRight)
				{
					DWORD len = (DWORD)wcslen(bstr);
					ppp[i] = (LPWSTR)::CoTaskMemAlloc(sizeof(TCHAR)*(len+1));
					wcscpy_s(ppp[i],len+1,bstr);

					pTable->Release();
					pTable = NULL;
				}
			}
		}

		pTables->Release();
		pTables = NULL;
	}
	catch(...)
	{
		AllIsRight = false;
	}

	return AllIsRight;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?