转贴:
SQL Server和Delphi中有一个讨厌的地方就是,存储任意二进制文件的时候,比较烦人,例如把一个Word文件(25KB)保存到SQL Server中,但是等你重新提出保存成另外的文件的时候,可能生成的文件大小只有24.7KB左右大小了!这样Word就不能打开重新生成的文件!要解决这个问题,要做几个修改:
首先,你必须修改SQL Server中用来保存任意文件的字段的类型为Image(不要用Text/nText字段,更加不要用Binary/VarBinary字段,因为binary字段最多只能存储8K的数据)数据类型,然后,你在Word里面添加字段的时候,Delphi会默认字段类型为ftMemo,你必须把这个字段改成ftBlob字段!以后你就可以通过
Table1FileField.LoadFromFile()/SaveToFile()来读取任意的二进制文件了!而且不会丢失任何字节!也不会多出什么东西来!这是Kingron的经验之谈。

解决方案 »

  1.   

    多谢daniel007(添)。SQL Server中存储任意二进制文件容易解决。但是Oracle中很烦。
    Long Row很好用,但是同一张表只能有一个Long Row字段。我试用了BLOB和CLOB,存取BLOB表面上都没有问题,但是取出的Word文件打不开(注:纯文本则可以),而CLOB根本无法使用(可能什么地方设置不对)。
    还是要骂中国电信封了Google,否则这么问题也不会拖了2天了。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    听有位高人说SOL Server的大二进制字段存数据时有问题,会出现截取文件的情况。不知道Oracle里有没有这种情况。
    所以我建议你用图象字段试试!
      

  3.   

    如果是bde连接
    需要设置blob size
      

  4.   

    blazingfire(烈焰): Oralce8以下版本提供Long Row字段,可以存取任何文件,但是缺点是每张表只能有一个Long Row字段。Oracle8增加了LOB(包括BLOB(存取二进制)、CLOB(存取大型文本)和BFILE(通过链接存取文件)),虽说是存取,但是并不能完整取出存进去的二进制文件(文本文件没问题)。
    另外,据说我项目的用户东航购买的是Oracle7,所以我准备放弃用Blob存取含文本和图片的Word文件了。
    多谢各位捧场。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  5.   

    至于nebulaly(竹风论坛)所说的blob size,存取Long Row时也需要调整,所以并不是这个问题。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————