void btl1strdb(CString btlstr)
{
int  bhno=0, bzno=0;        CString btlstr1,stemp, jhstr,jmstr,jsstr,clstr,xhstr,bhstr,bzstr;
        LPCTSTR sortstr1;  btlstr1=btlstr;
  jhstr=btlstr1.Mid(btlstr1.Find("件号")+5,btlstr1.Find("件数")-btlstr1.Find("件号")-5-1);
  jmstr=btlstr1.Mid(btlstr1.Find("件名")+5,btlstr1.Find("件号")-btlstr1.Find("件名")-5-1);
  jsstr=btlstr1.Mid(btlstr1.Find("件数")+5,btlstr1.Find("材料")-btlstr1.Find("件数")-5-1);
  clstr=btlstr1.Mid(btlstr1.Find("材料")+5,btlstr1.Find("重量")-btlstr1.Find("材料")-5-1);
  xhstr=btlstr1.Mid(btlstr1.Find("型号")+5,btlstr1.Find("部号")-btlstr1.Find("型号")-5-1);
  bhstr=btlstr1.Mid(btlstr1.Find("部号")+5,btlstr1.Find("件名")-btlstr1.Find("部号")-5-1);
  //bzstr=btlstr1.Mid(btlstr1.Find("部号")+5,btlstr1.Find("件名")-btlstr1.Find("部号")-5-1);  LPCTSTR jhstr1(jhstr);
  LPCTSTR jmstr1(jmstr);
  LPCTSTR jsstr1(jsstr);
  LPCTSTR clstr1(clstr);
  LPCTSTR xhstr1(xhstr);
  LPCTSTR bhstr1(bhstr);
   if(jhstr.Right(1)=="H" || jhstr.Right(1)=="h")
   {
   //jhstr=jhstr.Left(jhstr.GetLength()-1);
           LPCTSTR sortstr1(jhstr.Left(jhstr.GetLength()-1));
   }
  CDaoDatabase db;
  db.Open(_T("e:\\flq\\cpstest.mdb"));   CDaoRecordset rs(&db);
  rs.Open(dbOpenDynaset,
         _T("Select * FROM Parts "));
int nFieldCount = rs.GetFieldCount();
try
{
// while (!rs.IsEOF()) {
COleVariant var;
rs.AddNew();
for (int i=0; i <= nFieldCount; i++)
{
    switch(i) 
{
case 0:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,jsstr1);
break;
case 1:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,jhstr1); break;
case 2:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,clstr1);
break;
case 3:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,bhstr1);
break;
case 4:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,xhstr1);
break;
case 5:
var = rs.GetFieldValue(i);
//rs.SetFieldValue(i,xhstr1);
break;
case 6:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,jmstr1);
break;
case 8:
var = rs.GetFieldValue(i);
rs.SetFieldValue(i,sortstr1);
break; default:
break;
    } }   rs.Update(); rs.MoveNext();
}
// }
catch (CDaoException* e)
{ e->Delete();
}
  rs.Close();
  db.Close();
}

解决方案 »

  1.   

    以上函数可读写表,运行到以下函数时只能读不能写,为何?BOOL IsStandard(CString mlinetext)
    {
      CString mText,mPara,mClassfy,seartext,mCount;
      int i,k;
     
      mText=mlinetext;
      i=mText.Find(";");
      if(i <= 0) 
    {
    i = mText.Find(";");
    }    if(i > 0) 
    {        mPara=mText.Left(i);
            mText=mText.Right(i);
    //return TRUE;
    }
    else 
    {
            return FALSE;
           // return;
    }
      i=mText.Find("(");
      if(i <= 0) 
    {
    i = mText.Find("(");
    }    if(i > 0) 
    {        mPara=mText.Left(i);
            mText=mText.Right(i-1);
            k=mText.Find(")");
            if(i <= 0) 
    {
         k = mText.Find(")");
    }
            if(k > 0) 
    {
         mCount = mText.Left(k);
    }
            k=mText.Find("件");
            if(k > 0) 
    {
         mCount = mText.Left(k);
    }
     
    //return TRUE;
    }
    else 
    {
           mClassfy=mText;
           //mClassfy=mText.TrimRight();
    }  LPCTSTR mLineTextstr(mlinetext);
      LPCTSTR mClassfystr(mClassfy);
      LPCTSTR mParastr( mPara);
     //LPCTSTR jimstr1(jimstr);
      //CDaoDatabase db;
    CDaoDatabase* db1 = new CDaoDatabase;
      db1->Open(_T("e:\\flq\\cpstest.mdb"));   CDaoRecordset rs2(db1);
      rs2.Open(dbOpenDynaset,
             _T("Select * FROM Standard "));
    int nFieldCount = rs2.GetFieldCount();
    try
    {
    // while (!rs.IsEOF()) {
    COleVariant var;
    rs2.AddNew();
    for (int i=0; i <= nFieldCount; i++)
    {
        switch(i) 
    {
    case 0:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mLineTextstr);
    break;
    case 1:
    var = rs2.GetFieldValue(i);
    //rs.SetFieldValue(i,""); break;
    case 2:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mClassfystr);
    break;
    case 3:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mParastr);
    break;
    case 4:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mParastr);
    break;
    case 5:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mParastr);
    break;
    case 6:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mParastr);
    break;
    case 7:
    var = rs2.GetFieldValue(i);
    rs2.SetFieldValue(i,mParastr);
    break; default:
    break;
        } }   rs2.Update(); rs2.MoveNext();
    }
    // }
    catch (CDaoException* e)
    { e->Delete();
    }AfxMessageBox("df");
      rs2.Close();
      db1->Close();}
      

  2.   

    如果先调第二个函数 BOOL IsStandard(CString mlinetext) 则
    第1个函数void btl1strdb(CString btlstr)调的表能读不能写,反之一样。
      

  3.   

    var = rs2.GetFieldValue(i);
    //rs.SetFieldValue(i,"");
    ===================================
    该字段是否允许 NULL ,若不允许,必须为其设置值.
      

  4.   

    小弟还有一问题:
    也就是这个工程的resourceView, 双击时出现“这个文件已在另一文件中打开”,无法编辑菜单
    和对话框,如何解决?我这个工程作废了吗?
      

  5.   

    resourceView的问题解决了,小弟最后一问题:怎么用dao的人这么少,用ado的人多?
      

  6.   

    ado 的性能比 dao 好。
      

  7.   

    楼上的朋友,你看到问题了,今天我又试了一天,字符型的字段写进了,数值型的写不进,
    msdn 找了半天数值型的写不进,请帮我诊断一下:var = rs2.GetFieldValue(i);
    rs.SetFieldValue(i,这里如何写数值型的阿);
      

  8.   

    还没找到DAO写整形字段的方法。
      

  9.   

    int value=123;
    rs.SetFieldValue(i,COleVariant(value,VT_I4 ));这样试试行不行