如何在SDE表格中写入二进制bolb数据

来源:互联网 发布:js 时间戳 编辑:程序博客网 时间:2024/04/27 21:24

如何在SDE表格中写入二进制bolb数据

http://blog.csdn.net/wuhuiran

吴会然(wuhran@126.com)
目前的项目要求把 一个文件保存在SDE表格的BOLB字段,初学AE,不懂啊

经过研究和请教高人,终于解决了该问题

两种方法可以解决。

1,使用ADO操作表格。这个网上有很多写二进制的例子,我就不多说了。

在编译过程中你可能会遇到很多命名冲突,ADO和AE有很有命名时相同的。我已经解决了,你可以参考我的方法。

还是有两种方法:

(1)改ADO名字#import "f:/Program Files/Common Files/System/ADO/msado15.dll" rename("EOF","adoEOF"), rename("BOF","adoBOF"),rename("EOS","adoEOS"),rename("Fields", "adoFields"),rename("EditModeEnum","adoEditModeEnum")

可能不需要改这么多,我多写你个,给大家个参考而已

(2)不用改名字。指定ADO命名空间。在ADO对象前加上ADODB,如ADODB::_RecordsetPtr

2,使用AO方法同样可以写入BOLB数据到表格,SDE表格提供有BOLB的字段类型,当然也会提供写入方法。不过我是请教了高人才知道的。代码如下。

IMemoryBlobStreamPtr ipMemoryBlobStream(CLSID_MemoryBlobStream);
ipMemoryBlobStream->LoadFromFile(_bstr_t("C://Documents and Settings//zwf//桌面//temp.txt"));

IRowPtr ipRow;
ipTable->CreateRow(&ipRow);
VARIANT var;
VariantInit(&var);
var.vt = VT_UNKNOWN;
var.punkVal=ipMemoryBlobStream;
ipRow->put_Value(1,var);

ipRow->Store();

写入成功,但是有一个问题的。那就是,SDE默认的BOLB字段大小是1000000Byte,1M而已,太小了

我们需要修改。修改方法如下。在cmd命令提示窗口输入:sdemon -o info -I config输出参数看看Max . in Memory Blob Size的值,默认的是Max. in Memory BLOB Size          1000000 Bytes

使用如下命令修改:sdeconfig -o alter -v BLOBMEM=自己定义一个合适的大小 -u sde -p sde

这样就可以了。