ArcGIS的BLOB字段与Access数据库BLOB字段的交换
ArcGIS的BLOB========>Access数据库的BLOB
技术思路:首先利用AE接口获取VARIANT类型的属性值,然后将这个值以文件流的方式写到一个路径下的文件中,然后再根据这个文件形成一个新的COleVariant对象
IMemoryBlobStream2Ptr iMBS;
iMBS.CreateInstance(CLSID_MemoryBlobStream);
IMemoryBlobStreamVariantPtr iMBSV = (IMemoryBlobStreamVariantPtr)iMBS;
iMBSV=varFieldValue.punkVal;(varFieldValue为利用AE接口获取的VARIANT变量)
IBlobStreamPtr bs;
bs=iMBSV;
bs->SaveToFile(g_strBLOBImport.AllocSysString());(以文件流的方式写入指定文件中)
STATSTG tag;
hr = bs->Stat(&tag, STATFLAG_DEFAULT);
unsigned long size;
bs->get_Size(&size);(获得文件流的大小)
CFile file;
CByteArray ba;
if ((file.Open(g_strBLOBImport, CFile::modeRead|CFile::typeBinary)) == NULL) (以二进制的方式打开指定文件)
return NULL;
else
{
for (int j=0; j<size; j++)
{
file.LockRange(j,1);
BYTE b;
file.Read(&b, 1);
ba.Add(b);
}
}
file.Close();
COleVariant* pVar2 = new COleVariant(ba);(形成新的COleVariant对象)
另外:1.ArcGIS生成的BLOB字段的数据对象VARIANT的类型,即VARIANT::vt,是VT_UNKNOWN,所以在导出时要设置回去
2.在数据库插入BLOB字段,不能用SetValue,而要用AppendChunk()
Access数据库的BLOB========>ArcGIS的BLOB
技术思路:首先将属性数据拷贝为BYTE类型的变量中,然后利用AE接口将该变量导入类型为IMemoryBlobStream2Ptr变量中,最后再创建VARIANT对象
unsigned long cBufLen = var.parray->rgsabound[0].cElements;
BYTE * ppBuf;
ppBuf = new BYTE[cBufLen];
if(ppBuf != NULL)
{
void* pArrayData;
SafeArrayAccessData(var.parray,&pArrayData);
memcpy(ppBuf, pArrayData, cBufLen);(拷贝数据)
SafeArrayUnaccessData(var.parray);
}
IMemoryBlobStream2Ptr iMBS;
iMBS.CreateInstance(CLSID_MemoryBlobStream);
iMBS->ImportFromMemory(ppBuf, cBufLen);(导入数据)
IMemoryBlobStreamVariantPtr iMBSV = (IMemoryBlobStreamVariantPtr)iMBS;
VARIANT TVar;
TVar.vt = VT_UNKNOWN;
TVar.punkVal = iMBSV;(生成新的VARIANT对象)
hr = pFeature->put_Value(i + 2, TVar); (插入数据)
转载于:https://www.cnblogs.com/zhanglibo0626/archive/2008/10/09/1307494.html
ArcGIS的BLOB字段与Access数据库BLOB字段的交换相关推荐
- mybatisplus 实体类的字段名与数据库的字段名不一致的解决办法
我们在查询数据库时经常会碰到数据库的字段名与实体类的字段名不一致的情况,例如报如下的错误 使用mybatisplus可以使用以下几种方式进行字段名的匹配: 把实体类的字段名改成和数据库的字段名一致,当 ...
- 表单复选框提交到mysql_使用表单复选框设置Access数据库表字段
这样做的一种方法是在Access中使用VBA.在Access中访问VBA控制台的方式是,在表单的设计视图中,右键单击复选框控件并选择" Build Event"从菜单中.确保您的控 ...
- Access数据库创建字段类型无效问题
不用table.columns.append(..,..,..,) 用table.columns.append()如下所示,创建列头后在列头中设置类型属性再添加 //设置字段名:名字 column1. ...
- MySQL时间字段效率_MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较
正 文: 在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int.timestamp.datetime三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高,效率好 ...
- C# 日期插入access数据库
一 查询插入数据库中的日期 在Access数据库中,关于查询某一个时间段内的数据的问题(有字段属性为 时间/日期 类型的),容易出现的问题就是"#"符号是否缺少了-- C#程序中: ...
- access创建计算机字段,创建表并添加字段
创建 Access 数据库时,将数据存储在表(基于主题的列表,其中包含行和列)中. 例如,可创建"联系人"表来存储一系列姓名.地址和电话号码,或创建"产品"表存 ...
- mysql数据库blob区别_MySQL中TEXT与BLOB字段类型的区别
在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程序的博主不知道改为自己的博客正文字段选择TEXT还是BLOB类型. 下面给出几点区别: 一.主要差别 TEXT ...
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
首先说写入oracle的Blob字段 上一文章的实现方法没有贴出来,如下: TempUserService.java [html] view plaincopy package org.hd.temp ...
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(1)
最近做了个用户维护功能,涉及到照片的操作. 照片是存到数据库oracle中的Blob字段中. 难点有两个: 1,图片的上传:2,Blob字段的读取. 先说图片的上传吧, 我使用common-fileu ...
最新文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单
- python url编码 空格_使用请求和python时URL中的空格
- 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
- Kubernetes-ReplicaSet(RS)(五)
- mysql静默安装_oracle静默安装文件db_install.rsp详解
- MCGS 无限配方数据存储及U盘导入导出-第二集
- 指标的检测及检测仪器
- 快递员凌晨送件,将下班程序员误认成小偷
- IIS6配置后仍然无法解析json文件解决办法
- 【技术】jmeter 录制脚本
- UWB超宽带定位技术
- 常用正则表达式匹配Antconc英文句式搭配
- java 启动resin,Resin 启动时报错!解决方法
- xmapp 终端数据库问题记录 已解决
- 别了,腾讯!别了,深圳!我去老家当富豪了!
- RISC-V MCU应用方案之Little VGL(LVGL)移植(一)
- uplink Tx switching for ENDC/CA
- 计算机动画现状范文网,计算机动画教程
- 运动无线蓝牙耳机哪款好、运动无线蓝牙耳机推荐
- 技术科普丨平台效果调试篇1—灰区和权重
热门文章
- python3 socketserver源码解析_解读python中SocketServer源码
- 分层架构、六边形架构、CQRS架构模式解读
- 6-7Pytorch搭建cifar10训练脚本(下)
- 3-13其他数学函数
- Python3+TensorFlow人脸识别:1-1课程导学
- linux服务器健康检查,Linux 检查硬盘健康状态
- arm-linux-gcc 和Makefile
- endnote一打开就自动关闭_【EndNote文献管理】5分钟快速上手Endnote
- Spring Boot 特性
- mysql 5.7.18源码包下载_MYSQL数据库CentOS6.9+Mysql5.7.18源码安装详细教程