VC中如何更改access表的某字段的属性(如允许空字符/必填)?
要求用ADO或ADOX解决,多谢啦
一定是用程序语句实现啊

解决方案 »

  1.   

    只要会用ado的connection,会sql就可以了
      

  2.   

    ALTER TABLE tablename ALTER COLUMN colname  类型 Not Null
      

  3.   

    ADO用法
    http://www.vckbase.com/document/viewdoc/?id=215
      

  4.   

    这个要看『Access MDB』数据库引擎是否支持相应的『SQL语句』,如果支持,它的语法是否是标准的『SQL语句』,需要查相关资料,或者测试一下。补充:这方面的资料确实不好找,曾经我也找过;感觉『SQL SERVER』在帮助和支持方面做的很到位,如果可以,还是使用『SQL SERVER』吧。
      

  5.   

    应该都行
    只要能执行sql的都没问题
      

  6.   

    使用_RecordsetPtr接口(以连接SQL Server为例) 
    _RecordsetPtr pPtr; 
    if (FAILED(pPtr.CreateInstance("ADODB.Recordset"))) 

    AfxMessageBox("Create Instance failed!"); 
    return FALSE; 
    } CString strSRC; 
    strSRC="Driver=SQL Server;Server="; 
    strSRC+="127.0.0.1"; 
    strSRC+=";Database="; 
    strSRC+="DB"; 
    strSRC+=";UID=sa;PWD="; 
    strSRC+="sa"; CString strSQL = "select id,name,gender,address from personal"; _variant_t varSRC(strSRC); 
    _variant_t varSQL(strSQL); if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText))) 

    AfxMessageBox("Open table failed!"); 
    pPtr.Release(); 
    return FALSE; 
    } while(!pPtr->GetadoEOF()) 

    _variant_t varNo; 
    _variant_t varName; 
    _variant_t varSex; 
    _variant_t varAddress; varNo = pPtr->GetCollect ("id"); 
    varName = pPtr->GetCollect ("name"); 
    varSex = pPtr->GetCollect ("gender"); 
    varAddress = pPtr->GetCollect ("address"); CString strNo =(char *)_bstr_t(varNo); 
    CString strName =(char *)_bstr_t(varName); 
    CString strSex =(char *)_bstr_t(varSex); 
    CString strAddress =(char *)_bstr_t(varAddress); strNo.TrimRight(); 
    strName.TrimRight(); 
    strSex.TrimRight(); 
    strAddress.TrimRight(); int nCount = m_list.GetItemCount(); 
    int nItem = m_list.InsertItem (nCount,_T("")); 
    m_list.SetItemText (nItem,0,strNo); 
    m_list.SetItemText (nItem,1,strName); 
    m_list.SetItemText (nItem,2,strSex); 
    m_list.SetItemText (nItem,3,strAddress); pPtr->MoveNext(); 
    } pPtr->Close(); 
    pPtr.Release(); 
      

  7.   

    ::CoInitialize(NULL); CString strConnection;
    CString strMsg;
    CString strTemp;
    strTemp = m_strDBPath + TEXT("\\XXXXXX.mdb");
    strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False;"),strTemp);
    _ConnectionPtr pConnection;
    HRESULT hr = pConnection.CreateInstance( __uuidof(Connection) );
    if ( FAILED(hr) )
    {
    ::MessageBox(NULL,_T("您系统中的数据库驱动有问题。"), _T("提示"),MB_OK | MB_ICONINFORMATION);
    } _RecordsetPtr pRecordset;
    CString strSql;
    try
    {
    pConnection->ConnectionTimeout = 18;
    pConnection->ConnectionString =_bstr_t(strConnection);
    pConnection->Open( _bstr_t(L""), _bstr_t(L""), _bstr_t(L""), -1 );
    pConnection->Execute(_bstr_t(TEXT("ALTER TABLE tablename ALTER COLUMN colname  类型 Not Null")),NULL,adCmdText);
    }
    catch( _com_error& e)
    {
    _bstr_t bstrError = e.Description();
    strMsg=(LPCTSTR)bstrError;
    ::MessageBox(NULL,strMsg, _T("提示"),
    MB_OK | MB_ICONINFORMATION);
    return;
    } CoUninitialize();