龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC+ADO动态创建Access数据库(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
BOOL bRet = FALSE; CFileFind finder; CString ErrLong; if (finder.FindFile(SqlScriptFile) == TRUE) { CFile fSql; TCHAR *buffer, *pSQL, *p; fSql.Open(SqlScriptFile,Cfile::modeRead); UINT nFileLength = f

BOOL bRet = FALSE;

CFileFind finder;

CString ErrLong;

if (finder.FindFile(SqlScriptFile) == TRUE)

{

CFile fSql;

TCHAR *buffer, *pSQL, *p;

fSql.Open(SqlScriptFile,Cfile&::modeRead);

UINT nFileLength = fSql.GetLength();

buffer = (TCHAR *)malloc((nFileLength + 1) * sizeof(TCHAR));

_tcsnset(buffer, TCHAR('\0'), nFileLength + 1);

UINT nBytesRead = fSql.Read(buffer,nFileLength); //把sql文件内容读入内存缓冲区

fSql.Close();

p = pSQL = buffer;

BOOL bRunOK = FALSE;

BOOL bInNote = FALSE;

BOOL bSkip = FALSE;

CString strSQL;

TCHAR ch;

ErrLog = _T("");

while (p < (buffer + nFileLength)){

//判断是否是注释行

if (bInNote)

{

if (*p == TCHAR('x0a'))

bInNote = FALSE;

}

else


{

if ((*p == Remark) && (*(p+1) == Remark))

{

bInNote = TRUE;

p++;

}

else

{

//判断是否是sql语句结束标志

if (*p == separator){

strSQL = _T("");

bSkip = FALSE;

while (pSQL < p)

{

if (bSkip == FALSE){

if ((*(pSQL) == Remark) &&(*(pSQL+1) == Remark))

{

bSkip = TRUE;

pSQL++;

}

else

{

ch = *pSQL;

strSQL = strSQL+ch;

}

}

else{


if (*pSQL = TCHAR('x0a')){

bSkip = FALSE;

ch = TCHAR(' ');

strSQL = strSQL + ch;

}

}

pSQL++;

}

pSQL = p + 1;

ErrLog = ErrLog + _T("-- SQL Running ... ");

ErrLog = ErrLog + strSQL;

_variant_t vRecords;

m_nRecordsAffected = 0;

try

{

g_pConn->CursorLocation = adUseClient;

g_pConn->Execute(_bstr_t((LPCTSTR)strSQL), &vRecords, adExecuteNoRecords);

m_nRecordsAffected = vRecords.iVal;

bRunOK = TRUE;

}

catch(_com_error &e)

{

bRunOK = FALSE;

}


if (bRunOK)

ErrLog = ErrLog + _T(" -- Successed! ");

else

{

ErrLog = ErrLog + _T(" -- Failed! ");

break;

}

}

}

}

p++;

}

free(buffer);

bRet = bRunOK;

}

return bRet;

}

调用RunSqlScript创建access数据库中的表:

RunSqlScript(_T("d: est.sql"));

关闭数据库连接:

g_pConn->Close();

::CoUninitialize();

以上代码演示了怎样在vc中利用ado根据sql文件动态创建一个access数据库。

精彩图集

赞助商链接