请问如何在POSTGRES里加入图片 ,在网上找过一些办法。但都没有完好的解决方案。都会出现不同的问题。。

解决方案 »

  1.   

    无论在DBF、MDB、MYSQL、SQL SERVER中,我一般不将图片、声音存入数据库中,
    存入、取出非常麻烦,容易出问题,建议用字符型字段保存名称及路径,使用时
    用语言相关控件显示
      

  2.   

    呵呵,POSTGRES使用的人本来比较少(比MYSQL都少),资料更少,
    将图片保存到数据库中,一般都是用ADO流,不过,我从来就不将
    图片保存到数据库中。
      

  3.   

    在当当、卓越上搜索POSTGRES,结果太少
      

  4.   

    想在postgres数据库中加入图片,首先,在你数据库表中肯定有个字段用来存储该图片,这个字段可以定义为bytea类型。
    VB不熟悉,在VC中用ADO以二进制流的形式读取图片,直接insert into表中的该字段就OK。
      

  5.   

    用ADO流是试过了,,但我在VB里用ADO两种方法都出现错误,
     RS("BY")= str.read
     RS("BY").AppendChunk mChunk(),这个就更不可能,看过帮助说是要长二进制,PGSQL里也没有长二进制,所以操作失败
    而第一种方法我怀疑是我赋值的方法有错,看过一些JAVA的,好像就有函数直接操作。。不过那些我不了解。
    ---------------------
    灵犀一点所说的这种方法可以吗?用SQL语句直接写进去??我没有试过。有没有例子?
      

  6.   

    // 上传二进制数据
    _StreamPtr pStream( __uuidof( Stream ) );
    _variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR); 
    pStream->Type = adTypeBinary;
    pStream->raw_Open(varOptional, adModeUnknown, adOpenStreamUnspecified, NULL, NULL);  
    pStream->LoadFromFile( _bstr_t( strFilePath ) );
    pRecordset->GetFields()->GetItem( "Scontent" )->Value = pStream->Read( pStream->GetSize() );
    // 更新数据库
    pRecordset->Update( vtMissing, vtMissing );
      

  7.   

    问一下:你的程序需要配置ODBC数据源吗?
      

  8.   

    是C语言的吗?我想来想去,就不明白为什么同一样的操作,代码,只是换了CONNECTION,ACCESS就可以存图片 ,PGSQL就不可以。我不明你所指的要配置ODBC源是指哪个,我只是用连接字符串连接的:Driver={PostgreSQL};Server=localhost;UID=postgres;PWD=12345;
    你指的配置是指这个,还是指DSN的那个?
      

  9.   

    现在有一个关键的问题。用SQL语句插进去时,好像担示要UNICODE,对于这方面的,我还是很混乱,不知如何去转换过来。
      

  10.   

    If you have to save your image into database,then you can visit here.
    http://bbs.chinaunix.net/viewthread.php?tid=261371
      

  11.   

    在有一个关键的问题。用SQL语句插进去时,好像担示要UNICODE
    =============
    这个问题,你可以查一下你postgres数据库的编码是什么?看是否是utf-8的,具体可以进入postgres数据库,打\l,就可以看到数据库是什么编码了。还有,你能连接ACCESS,但连不了postgres,我感觉就是你ODBC数据源的问题,如果你用ADO方式封装了ODBC来连接postgres数据库,需要下载postgres数据库的ODBC驱动,然后在控制面板-》管理工具-》数据源中添加一个postgres的数据源。
    postgres的ODBC驱动分为Unicode和ANSI两种,具体看你是什么形式的编码。配置时在DataSource的Page2中的bytea as LO前打钩。
      

  12.   

    其实我一直在想的是用BYTEA保存,但现在最基本的问题是,我用VB+ADO RS(“BT”)= B, 赋值不成功,初步认为是B的值不标准,可能是编码的问题,RS(“BT”).appendchunk mChunk() 也不成功 mChunk()是处理后的二进制,初步认为是因为BT字段的TYPE不一样,ADO的APPENDCHUNK只支持长二进制,但BYTEA是短二进制。跟灵犀一点里说的 pRecordset->GetFields()->GetItem( "Scontent" )->Value = pStream->Read( pStream->GetSize() ); 
    有点相似。但因为语种不一样,可能内部的支持也不一样。
      

  13.   

    ADO的APPENDCHUNK只支持长二进制,但BYTEA是短二进制
    ===============================================
    所以在控制面板的ODBC数据源配置时,要在bytea as LO前打钩,不打钩,二进制写数据库时会出现错误。
      

  14.   

    是哦。还真发现原来还有这样一个东西 。。但是你指的配置应该就是用户DSN配置的吧。。
    但如果我是用只填用户名和密码,服务器,数据库呢?这样的话有没有办法去设置这些呢?
    --------------------------------------------------------------------------
    PS:解决了后再放100分。
      

  15.   

    但如果我是用只填用户名和密码,服务器,数据库呢?
    ===============================
    这句没看懂,这句是在程序里写还是在控制面板中配置ODBC数据源时填入?
    其实我想的是,你的程序中是否用到了---在控制面板的ODBC数据源中通过配置来连接数据库--这个用到了吗?
      

  16.   

    不用DSN也可以设置各参数如在bytea as LO前打钩,相当于ByteAsLongbinary=1, 其他的项目可以看psqlodbc文档或注册表里