我用VC+ADO+ACCESS2000数据库,我做一个更新语句,大概意思是这样的,我更新库存表,把以前库存中没有的数据添加上,如果有的话,则修改现有的数据,用一条语句完成。我用的是UPDATE KC,RKTMP SET KC。SL=KC。SL+RKTMP。SL,KC。JJ=RKTMP。JJ。这一条是用来更新的,INSERT INTO KC (ID,MC,JJ,SL,PH) SELECT ID,MC,JJ,SL,PH FROM RKTMP WHERE (SELECT ID NOT IN(SELECT SELECT ID FROM KC)。这一条是更新语句。
各位大侠,帮忙给小弟看一下。
多谢。

解决方案 »

  1.   

    首先要创建一个ODBC数据源,然后通过ADOConnection去连接它。
    _ConnectionPtr m_ADOConnection;
    ::CoInitialize(0);
    HRESULT hr=m_ADOConnection.CreateInstance(__uuidof(Connection));
    if(hr!=S_OK) ::MessageBox(0,"无法打开数据库!","Error",MB_OK+MB_ICONERROR+MB_TOPMOST);
    m_ADOConnection->ConnectionString="DSN=SmartPhone;UID=sa;PWD=sa";
    m_ADOConnection->ConnectionTimeout=30;
    try{
    hr=m_ADOConnection->Open("","","",adConnectUnspecified);
    }
    catch(...)
    {
    ::MessageBox(0,"无法打开数据库!","错误",MB_OK+MB_ICONERROR+MB_TOPMOST);
    m_bResultOfDatabase=FALSE;
    }
    if(hr!=S_OK){
    ::MessageBox(0,"无法打开数据库!","Error",MB_OK+MB_ICONERROR+MB_TOPMOST);
    m_bResultOfDatabase=FALSE;
    }
    ::CoUninitialize();void CBkDialog::OnBtnupdate()
    {
      ::CoInitialize(0); 
      _RecordsetPtr m_ADORecordSet;
       _CommandPtr m_ADOCommand("ADODB.Command");
       m_ADOCommand->putref_ActiveConnection(m_ADOConnection);
    m_ADOCommand->put_CommandType(adCmdText); 
     _variant_t vSQL;
      CString m_strSQL("");
      m_strSQL.Format("Update yourtable set field1=value1,.... where condition",.....);
      vSQL=(LPCTSTR)m_strSQL;   
      m_ADOCommand->put_CommandText(vSQL.bstrVal);
      m_ADORecordSet=m_ADOCommand->Execute(0,0,adCmdText);
      if(m_ADORecordSet==0){
         ::MessageBox(0,"Failed to update!","Error",MB_OK+MB_ICONERROR);
       }
      else{
         ......Do ....
      }
      ......
      ....
      ::CoUninitialize();
    }
      

  2.   

    INSERT INTO KC (ID,MC,JJ,SL,PH) SELECT ID,MC,JJ,SL,PH FROM RKTMP WHERE (SELECT ID NOT IN(SELECT SELECT ID FROM KC)。
    是不是这样呢
    INSERT INTO KC (KC.ID,KC.MC,KC.JJ,KC.SL,KC.PH) SELECT RKTMP.ID,RKTMP.MC,RKTMP.JJ,RKTMP.SL,RKTMP.PH FROM RKTMP WHERE  RKTMP.ID NOT IN(SELECT KC.ID FROM KC)