我会用VC查询ACCSEE数据库,但这次项目主管要求先通过ADO从MyData.mdb数据库读取产品表Product的数据,保存在缓存ProdCache里,然后根据指定条件(例如ProdName或ProdDate)从缓存ProdCache里查询满足条件的产品数据。请坛中高手帮忙解决一下,不胜感谢!

解决方案 »

  1.   

    没听说过ACCESS缓存。SQLSERVER有临时表的概念。我理解项目主管的意思就是把数据存在另外一个具体表里面,这个具体表可能是按月形成,按日形成,或者定时刷新。这样就不用每次查询都要检索几个大数据量的相关表,提高速度。
      

  2.   

    你可以把从access中取出来的数据放到内存等中都可以...以后就是在内存中读取数据,效率要高点
      

  3.   

    的确是为了提高速度,这个缓存可以看成是内存中的表,表结构为
    struct ProdStruct
    {
        long ProdID;               // 产品ID
        CString Model;             // 产品型号
        CString ProdName;          // 产品名称
        CString ProdDate;          // 生产日期
        CString ProdArea;           // 产地
    };
      

  4.   

    struct ProdStruct 

      long ProdID;              // 产品ID 
      CString Model;            // 产品型号 
      CString ProdName;          // 产品名称 
      CString ProdDate;          // 生产日期 
      CString ProdArea;          // 产地 
    };std::vector<ProdStruct *> g_prods;void Init()
    { ... }void Clear()
    { ... }void InsertProd(ProdStruct *)
    { ... }void DeleteProd(ProdStruct *)
    { ... }class SelectCommand
    {
    public:
      void Execute(std::vector<ProdStruct *>&ret, std::vector<ProdStruct *>&total)
      {}  int valtype; // 1 by 产品ID, 2 by 产品型号, 3 by 产品名称, 4 by 生产日期, 5 by 产地
      int comptype; // 等于,不等于,大于,小于
      _variant_t val; //输入的条件
    }
      

  5.   

    谢谢a_rockboy!
    其实查询条件只要求1 by 产品ID, 2 by 产品型号, 3 by 产品名称, 4 by 生产日期, 5 by 产地就行了。
    要怎样将数据库的内容,读入Cacha中,能再指点一下吗(最好给出大致的程序)?
      

  6.   


    void Init()
    {
      _ConnectionPtr conn;
      conn.CreateInstance(_T("ADODB.Connection"));
      conn->Open(...);  _RecordsetPtr rs = conn->Execute(_T("select * from ...", NULL, adCmdText);
      while(rs->Eof)
      {
         ProdStruct * aProd = new ProdStruct;
         aProd->ProdID = (long)rs->Fields->Items[(short)0]->Value;  // 产品ID 
         //下面省略了判断字符串为NULL的情况
         aProd->Model = (LPCTSTR)(_bstr_t)rs->Fields->Items[(short)1]->Value;   // 产品型号 
          aProd->ProdName = (LPCTSTR)(_bstr_t)rs->Fields->Items[(short)2]->Value; // 产品名称 
          aProd->ProdDate = (LPCTSTR)(_bstr_t)rs->Fields->Items[(short)3]->Value; // 生产日期 
          aProd->ProdArea = (LPCTSTR)(_bstr_t)rs->Fields->Items[(short)4]->Value; // 产地       g_prods.push_back(aProd);     rs->MoveNext();
      }
    }大体上就是这样,我这没有开发环境。
      

  7.   

    再次感谢a_rockboy!问题基本上解决了。