用大型对象,LOB,不好意思,我也正在研究,帮你UP吧!

解决方案 »

  1.   

    你搜索一下,
    用blob字段(8i或以上)
    Oracle8用long字段,方法可以通过编程或其他工具(pl/sql developer)把图片存进去。
      

  2.   

    csdn的高手们就不能贴一个能运行的源码吗?
    我是低手,所以,我顶!
      

  3.   

    搜索一下"BLOB"或"图片"吧,相信楼主会找到答案的.
      

  4.   

    BLOB存储的是二进制对象,存储图片时对图片并没朋任何要求,因为oracle原原本本的一个字元不变地将数据放进了库中具体怎样将图片放进库中,我以前回答过这样的问题(delphi存储图片进oracle库),你可以搜索一下,或者将你用的开发工具等详细情况说明一下,大家再因源施解.
      

  5.   

    我的工具:
    vb+oracle8i
    想知道如何用VB+oracle8I
    如何存图片,
    如何存有格式文档我查了精华,例子不能用,或者我的环境有问题!
    各位大哥,拉一把吧!
      

  6.   

    blob或者long raw
    可以参考oracle 下面的例子
    里面有各种你想要的
      

  7.   

    可以参考oracle 下面的例子?------------------------------
    请问锐剑兄:
    你说的那个例子具体在哪个目录下?
      

  8.   

    #include <oci.h>
    #include <ctype.h>
    #include <atmi.h>
    #include <userlog.h>
    #include <fml32.h>
    #include <stdio.h>
    #include <string.h>
    #include <setjmp.h>
    #include <sqlda.h>
    #include <stdlib.h>
    #include <sqlcpr.h>
    #include <ocidfn.h>
    #include <ociapr.h>
    #include <oratypes.h>
    #define LOCALCONNECTION "local/local1111@ora817"
    EXEC ORACLE OPTION (ORACA=YES); 
    EXEC ORACLE OPTION (RELEASE_CURSOR=YES); EXEC SQL INCLUDE sqlda;
    EXEC SQL INCLUDE sqlca;FILE *fp ;
    unsigned filelen, remainder, nbytes ;
    boolean last ;#define MAXBUFLEN 5000EXEC SQL BEGIN DECLARE SECTION;
    char    dyn_statement[1024]="";
    EXEC SQL VAR dyn_statement IS STRING(1024);
    char buffer[5000];
    EXEC SQL VAR buffer IS RAW(5000);
    OCIBlobLocator *blob ;
    int amt, offset = 1 ;
    char vc_user[30]=LOCALCONNECTION; 
    EXEC SQL END DECLARE SECTION;
    main()
    {
    EXEC SQL CONNECT :vc_user; 
    EXEC SQL ALLOCATE :blob ;
    EXEC SQL INSERT INTO local.lob_table (a_blob) VALUES (EMPTY_BLOB())
       RETURNING a_blob INTO :blob;fp = fopen((const char *)"image.gif", (const char *)"r") ;
    (void) fseek(fp, 0L, SEEK_END) ;
    filelen = (unsigned int)ftell(fp) ;
    amt = filelen ;if (filelen > MAXBUFLEN)
        nbytes = MAXBUFLEN ;
    else
        nbytes = filelen ;(void) fseek(fp, 0L, SEEK_SET) ;
    (void) fread((void *)buffer, (size_t)nbytes, (size_t)1, fp) ;
    remainder = filelen - nbytes ;
    if (remainder == 0)
    {
     
        EXEC SQL LOB WRITE ONE :amt
        FROM :buffer INTO :blob AT :offset ;
    }
    else
    {
    EXEC SQL LOB WRITE FIRST :amt
               FROM :buffer INTO :blob AT :offset ;

        last = FALSE ;
        EXEC SQL WHENEVER SQLERROR DO break ;
        do
        {
            if (remainder > MAXBUFLEN)
             nbytes = MAXBUFLEN ;
            else
            {
             nbytes = remainder ;
                last = TRUE ;
            }
            if  (fread((void *)buffer, (size_t)nbytes, (size_t)1, fp) != 1)
            last = TRUE ;

            if (last)
            {  
               EXEC SQL LOB WRITE LAST :amt
                      FROM :buffer INTO :blob  ;
            }
               
            else
            {
                   EXEC SQL LOB WRITE NEXT :amt
                      FROM :buffer INTO :blob  ;
            }
               remainder -= nbytes ;

    while (!last && !feof(fp)) ;
    }
    EXEC SQL COMMIT WORK RELEASE; 
    }