社区
数据库及相关技术
帖子详情
如何在数据库里面存储各种格式文件呢?存储图片已经没有问题了!
zjqc
2003-01-11 10:40:28
bcb+sql server2000,存储BMP图片没有任何问题!但是如果存储MP3或者EXE文件!就会出现出错信息是"Invalid class typecast"!大家有没有成功过阿?帮忙一下落!
...全文
143
28
打赏
收藏
如何在数据库里面存储各种格式文件呢?存储图片已经没有问题了!
bcb+sql server2000,存储BMP图片没有任何问题!但是如果存储MP3或者EXE文件!就会出现出错信息是"Invalid class typecast"!大家有没有成功过阿?帮忙一下落!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
googoler
2003-01-11
打赏
举报
回复
jishiping(JSP 季世平) 果然历害!
原来ADO和BDE处理Blob有所不同!
jishiping
2003-01-11
打赏
举报
回复
用 TADOBlobStream 代替 TMemoryStream。
if(!OpenDialog1->Execute())
return;
ADOTable1->Insert();
ADOTable1->FieldByName("num")->AsString = Edit1->Text;
ADOTable1->FieldByName("age")->AsString = Edit2->Text;
ADOTable1->FieldByName("add")->AsString = Edit3->Text;
TADOBlobStream* Stream = (TADOBlobStream*)ADOTable1->
CreateBlobStream(ADOTable1->FieldByName("photo"),
bwWrite);
Stream->LoadFromFile((OpenDialog1->FileName);
ADOTable1->Post(); delete Stream;
googoler
2003-01-11
打赏
举报
回复
2 zjqc(靓仔强
不好意思,不知道你搞定没有,或者我给个工具你,你试试!
googoler
2003-01-11
打赏
举报
回复
已通过测试,绝对没问题!
环境:bcb6+sp3 win2kp+sp3 BDE访问 IB 6.5表的blob字段写入.exe文件!
在csdn想得50分比在现实世界中挣50元还要麻烦!
-------------------------------------------------------------------
以上所述实属个人胡乱推测,如有雷同,纯属巧合。欢迎各位高手斧正。
仅供参考而已!
googoler
2003-01-11
打赏
举报
回复
估计TBlobField ->LoadFromFile 也会有问题。
Invalid class typecast
从错误上看起来 ADOTable1 Post时应该检查了
("photo")字段是不是BMP格式,看看你的photo字段定义有没有问题!
-------------------------------------------------------------------
以上所述实属个人胡乱推测,如有雷同,纯属巧合。欢迎各位高手斧正。
仅供参考而已!
zjqc
2003-01-11
打赏
举报
回复
to googoler()!你就不能完整试一下吗?这样比猜来猜去好一点!因为我真的很菜!
googoler
2003-01-11
打赏
举报
回复
要不 直接用
TBlobField ->LoadFromFile 试试
-------------------------------------------------------------------
以上所述实属个人胡乱推测,如有雷同,纯属巧合。欢迎各位高手斧正。
仅供参考而已!
黑兵
2003-01-11
打赏
举报
回复
我觉得也是按照二进制存取。可是你存贮EXE文件后,在打开时你还需要把它建立起来吗?没试过,呵,有创意。不行就把机器内码存进去。
zjqc
2003-01-11
打赏
举报
回复
注,上面代码如果是BMP图片就一点问题都没有的!
zjqc
2003-01-11
打赏
举报
回复
问题是一定要把SQL SERVER字段类型改了BINARY才可以读其它,但是这样还是会出错!我不知道代码应该怎么改!才不会出现出错信息是"Invalid class typecast"!
代码:
if(!OpenDialog1->Execute())
return;
TMemoryStream *tmpStream = new TMemoryStream();
TBlobField *tmpField;
tmpStream->LoadFromFile(OpenDialog1->FileName);
ADOTable1->Insert();
ADOTable1->FieldByName("num")->AsString = Edit1->Text;
ADOTable1->FieldByName("age")->AsString = Edit2->Text;
ADOTable1->FieldByName("add")->AsString = Edit3->Text;
tmpField = (TBlobField *)ADOTable1->FieldByName("photo");
tmpField->LoadFromStream(tmpStream);
ADOTable1->Post();//"Invalid class typecast"!出错
tmpField = NULL;
delete tmpStream;
googoler
2003-01-11
打赏
举报
回复
MP3或者EXE文件实际上是二进制流,Blob字段也就是二进制流,所以肯定没问题!
不清楚你的具体情况,可以不可以贴出你的代码?
-------------------------------------------------------------------
以上所述实属个人胡乱推测,如有雷同,纯属巧合。欢迎各位高手斧正。
仅供参考而已!
zjqc
2003-01-11
打赏
举报
回复
请楼上去领分!
http://expert.csdn.net/Expert/topic/1349/1349330.xml?temp=.212887
zjqc
2003-01-11
打赏
举报
回复
请楼上去领分!
googoler
2003-01-11
打赏
举报
回复
从错误上看起来 ADOTable1 Post时应该检查了
("photo")字段是不是BMP格式,看看你的photo字段定义有没有问题!
呀,偶前面的推断还是正确的哦!嘻嘻!
抢分
-------------------------------------------------------------------
把有限的生命投入到无限的CSDN之C++Builder版灌水(抢分中去)
灌呀...............
抢呀...............
zjqc
2003-01-11
打赏
举报
回复
一句话!一个美丽的误会!原来我那个字段用了DBIMAGE做了一个关联!我把那个该死的东西删除了!就没有问题!成功读入跟调出!呵呵!不过很佩服季世平!前段时间还说不懂ADO!现在就这样了!不是佩服水平!而是佩服那种求知欲!我不服都不行!问题没有了!可以的!一样读出读入!大家都可以!不过问题有一个!就是文件一大说有长度限制!这是唯一的谜底!希望大家继续关注!呵呵!结贴!
黑兵
2003-01-11
打赏
举报
回复
if(ADOTable1->State==dsEdit)
{
ADOTable1->Post();
Application->MessageBox("存贮成功!","提示", MB_OK);
}
zjqc
2003-01-11
打赏
举报
回复
一句话!一个美丽的误会!原来我那个字段用了DBIMAGE做了一个关联!我把那个该死的东西删除了!就没有问题!成功读入跟调出!呵呵!不过很佩服季世平!前段时间还说不懂ADO!现在就这样了!不是佩服水平!而是佩服那种求知欲!我不服都不行!问题没有了!可以的!一样读出读入!大家都可以!不过问题有一个!就是文件一大说有长度限制!这是唯一的谜底!希望大家继续关注!呵呵!结贴!
jishiping
2003-01-11
打赏
举报
回复
上面的代码,下午亲自测试过的,用的BCB5+SQL Server2000。我想一定是你
什么地方写错了。不过和你说句老实话,我从来没有用ADO写过程序,只是在
CSDN上有时帮别人解答时测试时用一下。
zjqc
2003-01-11
打赏
举报
回复
大哥!我很佩服你的水平!但是问题是我就是用你的代码!可是运行时候就是出现说我dataset close了!不能执行!奇怪!我们明明INSERT了!不过还是解决了!用其它方法!
jishiping
2003-01-11
打赏
举报
回复
有点笔误,自己改一下不就可以了。这也要我说呀。
if(!OpenDialog1->Execute())
return;
ADOTable1->Insert();
ADOTable1->FieldByName("num")->AsString = Edit1->Text;
ADOTable1->FieldByName("age")->AsString = Edit2->Text;
ADOTable1->FieldByName("add")->AsString = Edit3->Text;
TADOBlobStream* Stream = (TADOBlobStream*)ADOTable1->
CreateBlobStream(ADOTable1->FieldByName("photo"),
bmWrite);
Stream->LoadFromFile(OpenDialog1->FileName);
delete Stream; ADOTable1->Post();
加载更多回复(8)
数据库
中
存储
图片
等文件的小探讨
关于在
数据库
中
存储
图片
文件的
问题
直接
存储
在
数据库
中这样做有什么
问题
另寻方法 或许接下来的文章
没有
明显的帮到你解决
存储
问题
,但花点时间耐心的往下读一读,在思路上或许对你可以有点帮助! 直接
存储
在
数据库
中 当我们使用
数据库
存储
信息时,一般的属性我们都可以直接
存储
在
数据库
中,比如:某person的id,name,age等等,当然
图片
等文件也是可以直接
存储
在
数据库
中,但这一点就不会像普通字段直接
存储
在
数据库
中,我们一般都是采取流的机制把某
图片
文件的二进制数据
存储
在
数据库
中,这样就解决了
图片
等文件
存储
在
数据库
中的
问题
数据库
的
存储
系列———将
图片
存储
到
数据库
数据库
的
存储
—系列———将
图片
存储
到
数据库
在很多时候我们都使用
数据库
才
存储
我们的数据,然而我们通常在
数据库
里面
存放的数据大多都支持数或者是一些字符,那么如果我们想在
数据库
里面
存放
图片
,那么应该要怎么做的?第一,我们可以将
图片
所在的路径或者URI存入到
数据库
里面
,这样简单方便。不过这样的缺点也很显然,就是
图片
路径改变的时候,我们
没有
办法通过
数据库
来获取这一张
图片
。所以这种方法并不是我们所想要的将
图片
存
照片
存储
在mysql的格式_关于
图片
或者文件在
数据库
的
存储
方式归纳
商品
图片
,用户上传的头像,其他方面的
图片
。目前业界
存储
图片
有两种做法:1、 把
图片
直接以二进制形式
存储
在
数据库
中一般
数据库
提供一个二进制字段来
存储
二进制数据。比如mysql中有个blob字段。oracle
数据库
中是blob或bfile类型2、
图片
存储
在磁盘上,
数据库
字段中保存的是
图片
的路径。一、
图片
以二进制形式直接
存储
在
数据库
中第一种
存储
实现(php语言):大体思路:1、将读取到的
图片
用ph...
mysql
存储
视频_特殊
格式文件
(视频、声音等) 在
数据库
中的
存储
方式
问题
描述:一般网站,对于用户上传的
图片
、视频、声音等特殊格式的数据是以本地文件的形式
存储
,然后把相应URL路径存放在
数据库
里呢;还是,将数据直接写到
数据库
里存放?答:多数网站,基本上采用的是第一种方式,即:文件
存储
+URL路径的模式。首先,视频、声音、
图片
为非结构化数据,传统的关系型
数据库
主要是是针对结构化数据设计的,虽然有相应的字段格式支持
存储
,即:如果要把视频等文件
存储
到
数据库
的话,要使用大字...
关于
图片
或者文件在
数据库
的
存储
方式归纳
商品
图片
,用户上传的头像,其他方面的
图片
。目前业界
存储
图片
有两种做法: 1、 把
图片
直接以二进制形式
存储
在
数据库
中 一般
数据库
提供一个二进制字段来
存储
二进制数据。比如mysql中有个blob字段。oracle
数据库
中是blob或bfile类型 2、
图片
存储
在磁盘上,
数据库
字段中保存的是
图片
的路径。 一、
图片
以二进制形式直接
存储
在
数据库
中 第一种
存储
实现(php语言): 大体思路:...
数据库及相关技术
1,178
社区成员
18,939
社区内容
发帖
与我相关
我的任务
数据库及相关技术
C++ Builder 数据库及相关技术
复制链接
扫一扫
分享
社区描述
C++ Builder 数据库及相关技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章