为什么我的贴子没有人回啊!CSDN人气太差了。!

解决方案 »

  1.   

    try
    {
        pRecordset.CreateInstance(__uuidof(Recordset));
        pRecordset->Open((_bstr_t)strSQL, _variant_t(pConnection, true),
    adOpenStatic,adLockOptimistic,adCmdText);    if(!pRecordset->EndOfFile)
        {
    long nSize = pRecordset->GetFields()->GetItem("GRAPHIC")->ActualSize;
    if(nSize > 0)
    {
      _variant_t varBLOB;
      varBLOB=pRecordset->GetFields()->GetItem("GRAPHIC")->GetChunk(nSize);
      if(varBLOB.vt == (VT_ARRAY | VT_UI1))
      {
        if(BYTE *pBuffer = new BYTE [nSize+1]) ///ÖØÐÂÉêÇë±ØÒªµÄ´æ´¢¿Õ¼ä
        {
          char *pBuf = NULL;
          SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
          memcpy(pBuffer,pBuf,nSize); ///½»º³åÇøm_pBMPBuffer
                  SafeArrayUnaccessData (varBLOB.parray);
          CFile f;
          CFileException e;
                  CFileStatus fStatus;

         CString strFileType = (LPCTSTR)(_bstr_t)pRecordset->GetCollect(_variant_t("DRAWINGNAME"));
    strFileType = strFileType.Right(4);
    int n = strFileType.GetLength();
    strName = strFileType.Left(n-4);
    CString FilePath = "E:\\";
    FilePath = FilePath+strName+strFileType;
            if(f.Open(FilePath, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary, &e))
    {
    f.Write(pBuffer, nSize);
    f.GetStatus(FilePath, fStatus);
    f.Close();
    }

    delete [] pBuffer;
    pBuf=0;

    m_pNetFind->ShowWindow(SW_HIDE);
    FileOpen(FilePath);   //通过文件名字打开文件的,
    }
          }
       }
    }
    pRecordset->Close();
    pRecordset.Release();
    }
    catch(_com_error &e)
    {
    CString err;
    err.Format("%d\n%s", e.Error(), (char *)e.Description());
    AfxMessageBox(err);
    return FALSE;
    }
    在oracle中我建立视图,想从视图中得到long raw类型的字段“GRAPHIC”中的文件内容,但是long nSize = pRecordset->GetFields()->GetItem("GRAPHIC")->ActualSize;的取值不正确,就无法从数据库得到正确的文件数据,希望大家帮忙解决一下!
      

  2.   

    ORACLE中的物化视图       物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。       物化视图可以查询表,视图和其它的物化视图。       通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。       对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。       对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。       在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。1.主键物化视图:              下面的语法在远程数据库表emp上创建主键物化视图        SQL> CREATE MATERIALIZED VIEW mv_emp_pk
                 REFRESH FAST START WITH SYSDATE 
                NEXT  SYSDATE + 1/48
                WITH PRIMARY KEY 
                AS SELECT * FROM emp@remote_db;
                Materialized view created.
                  注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:            SQL> CREATE MATERIALIZED VIEW LOG ON emp;
                Materialized view log created.
    2.Rowid物化视图              下面的语法在远程数据库表emp上创建Rowid物化视图      SQL> CREATE MATERIALIZED VIEW mv_emp_rowid 
                REFRESH WITH ROWID 
                 AS SELECT * FROM emp@remote_db; 
                Materialized view log created.
    3.子查询物化视图              下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图            SQL> CREATE MATERIALIZED VIEW  mv_empdept
                AS SELECT * FROM emp@remote_db e
                WHERE EXISTS
                 (SELECT * FROM dept@remote_db d
                 WHERE e.dept_no = d.dept_no)
          Materialized view log created.
           REFRESH 子句                    [refresh [fast|complete|force]
                [on demand | commit]
                [start with date] [next date]
                [with {primary key|rowid}]]
     
           Refresh选项说明:a.      oracle用刷新方法在物化视图中刷新数据.b.      是基于主键还是基于rowid的物化视图c.       物化视图的刷新时间和间隔刷新时间 Refresh方法-FAST子句       增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志                    SQL> CREATE MATERIALIZED VIEW LOG ON emp;
    Materialized view log created.       对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。 Refresh方法- COMPLETE子句       完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成       完全刷新即使增量刷新可用。 Refresh Method – FORCE 子句       当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项 主键和ROWD子句       WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.       主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。       Rowid物化视图只有一个单一的主表,不能包括下面任何一项:n         Distinct 或者聚合函数.n         Group by,子查询,连接和SET操作 刷新时间              START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.            SQL> CREATE MATERIALIZED VIEW mv_emp_pk
                         REFRESH FAST 
                      START WITH SYSDATE 
                      NEXT  SYSDATE + 2
                      WITH PRIMARY KEY 
                      AS SELECT * FROM emp@remote_db;
                      Materialized view created.
    在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次. 总结物化视图提供了可伸缩的基于主键或ROWID的视图,指定了刷新方法和自动刷新的时间。
      

  3.   

    上面这个文章来自 lovexueer
      

  4.   

    为什么建立物化视图时说我的权限不够呢?
    create MATERIALIZED view base as
    select aac001, aac003, aab001 from ct01
    union
    select aac001, aac003, aab001 from ac01
      

  5.   

    grant create materialized view to user
      

  6.   

    谢谢楼上的,为什么我查看的《PL/SQL程序设计》里面关于权限设置没有提到呢?请问这方面的书籍哪里有?谢谢!