一个oracle数据库中某个表中有个字段类型为long,其中存放的为image图片格式为bmp;一个用pb编写的成品程序读写没有任何问题;可是我用delphi6读出的该字段显示的时候不正常,出现有规律的条纹;
   报表用quickreport,图片用qrdbimage显示;
   用dbimage也不可以。

解决方案 »

  1.   

    ”image图片格式为bmp”,在Oracle一般形式用BLOB型,
    LONG型是文字data。
      

  2.   

    在Oracle一般形式用BLOB型 -- 同意 hehe^^
      

  3.   

    在Oracle一般形式用BLOB型
    严重同意。HH
      

  4.   

    blob不清楚啊。
    delphi中能转换吗。
    急用。大家帮帮忙。
      

  5.   

    数据库已经设计成这个样子,而且有配套软件运行,不可能更改了。我想知道如何在delphi中导出照片。显示出来。
    pb(配套软件用pb编写)中导出的照片很正常;
      

  6.   

    CREATE TABLE CS.INVENTORY_MST (
      CODE VARCHAR2(10) NOT NULL,
      NAME VARCHAR2(50),
      POSTER BLOB     ←定義例子
    )
    BLOB型:最大size為4G
      

  7.   

    首先要知道blob里面存放的是什么格式的,否则是很难在Image里面显示的。
    如果blob里面放的是jpg,那把blob读出后,用TJPEGImage load后,赋值给Image.picture.bitmap,就可以显示,如果blob里面存放的是bmp 那么需要用TBitmap load后才能在Image里面显示,不过,一般数据库都存jpg格式的,否则bmp太大了,也许有GIF的,但是GIF我没有用过
      

  8.   

    这个样子啊。我用这个方法导出的图片和本来的图片不一样,如上面所说:原来的pb做的软件可以正常读写,delphi弄的就不可以,如果有必要的话,我可以把数据库部分数据放到网上。
    麻烦大家帮忙。
      

  9.   

    我觉得保存image的path更好,那样就不会使容量过于庞大
      

  10.   

    是啊。我的程序设计就是这样设计的。
    不过反正是oracle,小型机,sun服务器,问题不会太大。而且数据稳定在2万左右。
    我现在了解到可能就是数据流的问题,因为我把一个正常的图片用流的方式存入数据库中,读出来的仍然是有问题的。不解。程序如下:
    var fs:tfilestream;
    begin
        fs:=tfilestream.Create('c:\145.bmp',fmopenread);
        try
        adodataset1.Append;
        tblobfield(adodataset1.FieldByName('blobdata')).LoadFromStream(fs);
        adodataset1.FieldByName('xh').AsString:='1234567';
        adodataset1.fieldbyname('idx').asstring:='0';
        adodataset1.Post;
        except
        end;
    end;
      

  11.   

    Delphi里应该可以转换,在Delphi里一般都用TFileStream这个类做操作,如果还不可以的话,你把图片控件的DoubleBuffer设置为True,看看可以不
      

  12.   

    老兄,谢谢帮忙!
    可是还是没有解决;
    我自己建立了一个blob的字段,对它的读写没有任何问题。我觉得是不是因为字段是long的原因呢〉?如果是这个样子的话,如何转化呢?多谢支持!
      

  13.   

    long raw 没有问题的,读出的时候要转化一下,
      

  14.   

    是不是和文件格式有关
    转化为bmp的试试
      

  15.   

    fenglaile(风清飘) 你好,如何转换啊,能不能说详细点呢。谢谢!
      

  16.   

    可以自己把数据读出来,保存在临时文件里,然后在显示出来;象jpeg文件,dbimage不支持,当初我也只有使用image,然后用上述的方法来实现的
      

  17.   

    可以试试Delphi For Oracle的doa组件包,我记得里面有很好的方法可以进行比较简单的处理,也许会有收获哦!
    来我的网站下http://wwdn.kmip.net
    msn:[email protected]
      

  18.   

    谢谢大家,不过问题依然。
    long里面存放的就是bmp格式文件,头部为bm。
      

  19.   

    为什么非要用long来保存呢?!
    用BLOB吧!
    而且图片文件最好用JPG格式,否则太大了 !
      

  20.   

    在delphi中的处理 
    对于lob字段而言,个人认为其使用比long类型有很大的灵活性,而且lob字段可以保存各类的数据,可以保存图片,大量的文字,现就clob跟blob两种类型加以说明,其中blob保存图片信息,clob保存大量文字。 
    exmple 6. 
    Create table test_table 
    (c_no number(1) not null, 
    c_blob blob, 
    c_clob clob, 
    constraint pk_test_table primary key (c_no)); unit Unit1; interface uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls, DBCtrls, Grids, DBGrids, DB, DBTables, ExtDlgs; type 
    TForm1 = class(TForm) 
    Database1: TDatabase; //用于连接数据库 
    Table1: TTable; //获取表信息 
    DataSource1: TDataSource;  
    DBGrid1: TDBGrid; 
    DBMemo1: TDBMemo; //显示c_clob字段内容 
    DBImage1: TDBImage; //显示c_blob字段内容 
    Button1: TButton; //插入按钮 
    Button2: TButton; //保存按钮 
    Table1C_NO: TFloatField; //Tfiled 
    Table1C_BLOB: TBlobField; 
    Table1C_CLOB: TMemoField; 
    OpenPictureDialog1: TOpenPictureDialog; //从文件获取图片 
    OpenDialog1: TOpenDialog; //从文件获取文字 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; var 
    Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); 
    begin //插入操作 
    with Table1 do 
    begin 
    Insert; //将表状态置为插入状态 
    if OpenPictureDialog1.Execute then //获得图片信息 
    Table1C_BLOB.LoadFromFile(OpenPictureDialog1.FileName); 
    if OpenDialog1.Execute then //获得文字信息 
    Table1C_CLOB.LoadFromFile(OpenDialog1.FileName); 
    end; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin //提交插入内容 
    try 
    Table1.Post; 
    except 
    Application.MessageBox('错误发生','警告',0); 
    end; 
    end; end. 注意: 
    openpiceturedilog只能打开dmp,ico,wmf等文件,事先需要将图片文件格式保存成这几类; 
    在文字字段不从文件获得时,可以手动输入 
    本例只是对lob字段的一个小小的探索,用法不当及需改正之处,还请多多指教。 注:本篇文章大部分例子均取自论坛,如有侵犯您的版权,请来信告知,我们会做相应处理。     
      注意: 
    openpiceturedilog只能打开dmp,ico,wmf等文件,事先需要将图片文件格式保存成这几类; 
    在文字字段不从文件获得时,可以手动输入 
      

  21.   

    参考以下:
    http://211.99.196.144:8090/forum1/frontshow/dispbbs.jsp?boardid=106&id=5355