如何判断ACCESS重某个数据表是否存在,再进行其它操作 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 原来在asp中知道可以用CreateObject("Access.Application")来获取VC中也可以通过com来实现不过觉得有些得不偿失可以用try{}catch(...){}方便一点 try catch有点问题,我就是这样用的:try{pApp->m_pDatabase->ExecuteSQL(_T("DROP TABLE TempTbl"));}catch{...}实际上,如果TempTbl不存在,就会发生错误而无法继续执行,不知道楼上的是否这样用过? select * from sysobjects where type='u'看看这样能不能搜出所有的表名称 SQL Server下的IF EXISTS (SELECT 1 FROM sysobjects WHERE id = object_id('YOURTABLE') AND type = 'U')DROP TABLE YOURTABLE 用msysobjects这个表来判定,默认情况下admin对系统表没有读取权限,你需要手动设定,select * from msysobjects where name='test' void CdbToolsDlg::GetDatabaseSchema(_ConnectionPtr pConnection, _bstr_t* bstrTableNames, int* nTableCount, _bstr_t bstrFilter){ ASSERT(pConnection->State==adStateOpen); _RecordsetPtr pRstSchema = NULL; SAFEARRAY FAR* psa = NULL; SAFEARRAYBOUND rgsabound; _variant_t var; _variant_t Array; rgsabound.lLbound = 0; rgsabound.cElements = 4; psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound); var.vt = VT_EMPTY; long ix; ix = 0; SafeArrayPutElement(psa, &ix, &var); ix= 1; SafeArrayPutElement(psa, &ix, &var); ix = 2; SafeArrayPutElement(psa, &ix, &var); var.vt = VT_BSTR;//表的类型有"ALIAS""TABLE""SYNONYM""SYSTEM TABLE""VIEW""GLOBAL TEMPORARY""LOCAL TEMPORARY""SYSTEM VIEW"var.bstrVal = bstrFilter;//这里bstrFilter="TABLE"就可以了 ix = 3; SafeArrayPutElement(psa, &ix, &var); var.vt=VT_EMPTY; Array.vt = VT_ARRAY|VT_VARIANT; Array.parray = psa; try { pRstSchema = pConnection->OpenSchema(adSchemaTables,&Array); *nTableCount=0; while(!(pRstSchema->EndOfFile)) { if(bstrTableNames!=NULL) { _bstr_t table_name = pRstSchema->Fields-> GetItem("TABLE_NAME")->Value; *(bstrTableNames++)=table_name; } *nTableCount+=1; pRstSchema->MoveNext(); } } catch (_com_error e) { PrintComError(e); } if(pRstSchema) if (pRstSchema->State == adStateOpen) pRstSchema->Close();} CString sFileName=SysDir+fileinform.name;CDaoDatabase* pdb=new CDaoDatabase; //获取数据库路径 CString m_strdatabasename=sFileName; try { pdb->Open(m_strdatabasename); } catch(CDaoException* e) { AfxMessageBox(e->m_pErrorInfo->m_strDescription);//("文件不是标准数据库文件!"); e->Delete(); delete pdb; return false; } //创建并打开数据表格 CDaoTableDef td(pdb); //获取数据库中的表格信息 //need to modify,还要看是否用到了 CDaoTableDefInfo tabledefinfo; CArray<CString,CString> tablename;//表名 short tableNum; tableNum=pdb->GetTableDefCount(); short i=0; while(i<tableNum) { pdb->GetTableDefInfo(i,tabledefinfo,AFX_DAO_SECONDARY_INFO); if(tabledefinfo.m_strName.Left(4)!="MSys") tablename.Add(tabledefinfo.m_strName); i++; } td.Close(); pdb->Close(); delete pdb;tablename存储表名 vc6.0 请教project->Add to project->components and controls char*转换成时间?(非MFC) 简单问题 向一个文本写入字符串 求助,急,关于轨迹绘图 C++中与数据库相关问题 winsock控件有何用? 怎样关闭进程! 关于JavaScript和下拉框的问题 如何得到本机正在运行的所有的processs的ID SOCKET内核对象的发送缓冲区和接收缓冲区是否是同一个 关于VC连接数据库的基础问题 招聘VC,Java技术人员两名
可以用
CreateObject("Access.Application")
来获取
VC中也可以通过com来实现
不过觉得有些得不偿失
可以用
try{
}
catch(...)
{
}
方便一点
try
{
pApp->m_pDatabase->ExecuteSQL(_T("DROP TABLE TempTbl"));
}
catch
{
...
}
实际上,如果TempTbl不存在,就会发生错误而无法继续执行,不知道楼上的是否这样用过?
看看这样能不能搜出所有的表名称
DROP TABLE YOURTABLE
{
ASSERT(pConnection->State==adStateOpen);
_RecordsetPtr pRstSchema = NULL; SAFEARRAY FAR* psa = NULL;
SAFEARRAYBOUND rgsabound;
_variant_t var;
_variant_t Array;
rgsabound.lLbound = 0;
rgsabound.cElements = 4;
psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound);
var.vt = VT_EMPTY;
long ix;
ix = 0;
SafeArrayPutElement(psa, &ix, &var); ix= 1;
SafeArrayPutElement(psa, &ix, &var); ix = 2;
SafeArrayPutElement(psa, &ix, &var); var.vt = VT_BSTR;
//表的类型有"ALIAS""TABLE""SYNONYM""SYSTEM TABLE"
"VIEW""GLOBAL TEMPORARY""LOCAL TEMPORARY""SYSTEM VIEW"
var.bstrVal = bstrFilter;//这里bstrFilter="TABLE"就可以了 ix = 3;
SafeArrayPutElement(psa, &ix, &var);
var.vt=VT_EMPTY;
Array.vt = VT_ARRAY|VT_VARIANT;
Array.parray = psa; try
{
pRstSchema = pConnection->OpenSchema(adSchemaTables,&Array); *nTableCount=0;
while(!(pRstSchema->EndOfFile))
{
if(bstrTableNames!=NULL)
{
_bstr_t table_name = pRstSchema->Fields->
GetItem("TABLE_NAME")->Value;
*(bstrTableNames++)=table_name;
}
*nTableCount+=1;
pRstSchema->MoveNext();
}
}
catch (_com_error e) {
PrintComError(e);
} if(pRstSchema)
if (pRstSchema->State == adStateOpen)
pRstSchema->Close();
}
CDaoDatabase* pdb=new CDaoDatabase;
//获取数据库路径
CString m_strdatabasename=sFileName;
try
{
pdb->Open(m_strdatabasename);
}
catch(CDaoException* e)
{
AfxMessageBox(e->m_pErrorInfo->m_strDescription);//("文件不是标准数据库文件!");
e->Delete();
delete pdb;
return false;
}
//创建并打开数据表格
CDaoTableDef td(pdb);
//获取数据库中的表格信息
//need to modify,还要看是否用到了
CDaoTableDefInfo tabledefinfo;
CArray<CString,CString> tablename;//表名
short tableNum;
tableNum=pdb->GetTableDefCount();
short i=0;
while(i<tableNum)
{
pdb->GetTableDefInfo(i,tabledefinfo,AFX_DAO_SECONDARY_INFO);
if(tabledefinfo.m_strName.Left(4)!="MSys")
tablename.Add(tabledefinfo.m_strName);
i++;
}
td.Close();
pdb->Close();
delete pdb;tablename存储表名