谢谢!

解决方案 »

  1.   

    原来在asp中知道
    可以用
    CreateObject("Access.Application")
    来获取
    VC中也可以通过com来实现
    不过觉得有些得不偿失
    可以用
    try{
    }
    catch(...)
    {
    }
    方便一点
      

  2.   

    try catch有点问题,我就是这样用的:
    try
    {
    pApp->m_pDatabase->ExecuteSQL(_T("DROP TABLE TempTbl"));
    }
    catch
    {
    ...
    }
    实际上,如果TempTbl不存在,就会发生错误而无法继续执行,不知道楼上的是否这样用过?
      

  3.   

    select * from sysobjects where type='u'
    看看这样能不能搜出所有的表名称
      

  4.   

    SQL Server下的IF EXISTS (SELECT 1 FROM  sysobjects WHERE id = object_id('YOURTABLE') AND type = 'U')
    DROP TABLE YOURTABLE
      

  5.   

    用msysobjects这个表来判定,默认情况下admin对系统表没有读取权限,你需要手动设定,select * from msysobjects where name='test'
      

  6.   

    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();
    }
      

  7.   

    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存储表名