首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
C++ Builder
数据库及相关技术
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
如何在DBImage中加载JPG图片?
[已结贴,结贴人:lxp945]
加为好友
发送私信
在线聊天
lxp945
等级:
可用分等级:
长工
总技术分:
16
总技术分排名:
193287
揭贴率:
60.00%
发表于:
2007-03-18 22:01:34
楼主
如何用OpenPictrueDailog在DBImage中打开JPG图片并保存到数据库?
问题点数:
40
回复次数:
15
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-18 22:14:45
1
楼 得分:
15
ADO 组件,简单的写了一下,其实这类问题已经在论坛被问了很多次,搜索一下已经
结了的帖子就知道
// 二进制写表
// ---------------------------------------
AnsiString filename = " ";
if ( OpenDialog1-> Execute() )
{
filename = OpenDialog1-> FileName;
if ( FileExists ( filename ) == false)
return;
}
else
{
return;
}
TMemoryStream* pMS = new TMemoryStream;
pMS-> LoadFromFile(FileName); // 文件读入内存流
pMS-> Seek(0,soFromBeginning);
ADOQuery1-> SQL-> Clear();
ADOQuery1-> SQL-> Add( "insert into imagetab (title, image) values (:title, :image); ");
ADOQuery1-> Parameters-> ParamByName( "title ")-> Value = Edit1-> Text;
ADOQuery1-> Parameters-> ParamByName( "image ")-> LoadFromStream(pMS, ftBlob);
ADOQuery1-> ExecSQL();
// ---------------------------------------
// 二进制读取,相关的操作你自己写了
TMemoryStream* pMS = new TMemoryStream;
TBlobField* pField = (TBlobField*) ADOQuery2-> FieldByName( "image ");
pMS-> Seek(0,soFromBeginning);
pMS-> Size = 0;
pField-> SaveToStream(pMS);
pMS-> SaveToFile( "newfile ");
ADOQuery2-> Close();
delete pMS;
pMS = NULL;
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lxp945
等级:
可用分等级:
长工
总技术分:
16
总技术分排名:
193287
发表于:
2007-03-18 23:33:57
2
楼 得分:
0
谢谢你的帮助,但我引用你的代码后执行时当打开JPG的图片里仍然报错:Bitmap image is not valid ",代码如下:void __fastcall TForm1::Button11Click(TObject *Sender)
{
AnsiString filename = " ";
if ( OpenDialog1-> Execute() )
{
filename = OpenDialog1-> FileName;
if ( FileExists ( filename ) == false)
return;
}
else
{
return;
}
TMemoryStream* pMS = new TMemoryStream;
pMS-> LoadFromFile(filename);pMS-> Seek(0,soFromBeginning);
ADOQuery1-> SQL-> Clear();
ADOQuery1-> SQL-> Add( "update part set photo=:image; ");
ADOQuery1-> Parameters-> ParamByName( "image ")-> LoadFromStream(pMS, ftBlob);
ADOQuery1-> ExecSQL();
}
请问哪里出错了,麻烦说明白点,我很菜
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-18 23:40:08
3
楼 得分:
0
Bitmap image is not valid.
你用的控件不支持JPG,只支持Bitmap类型
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-18 23:48:33
4
楼 得分:
0
还有就是 Button11Click 内的代码不应该会引起这个错误
刚才看了一下 Help,DBImage 可能支持 Bitmap 不支持JPG
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-18 23:53:01
5
楼 得分:
0
刚才看了一下 Help,DBImage 只支持 Bitmap ,而不支持JPG
如果非要JPG,你可以在表的游标移动事件发生后将图片字段读出,放到目录内,由 TImage 控件直接往目录内载入
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lxp945
等级:
可用分等级:
长工
总技术分:
16
总技术分排名:
193287
发表于:
2007-03-18 23:55:44
6
楼 得分:
0
那请问哪里有支持JPG的DBImage控件下载?谢谢了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lxp945
等级:
可用分等级:
长工
总技术分:
16
总技术分排名:
193287
发表于:
2007-03-18 23:59:48
7
楼 得分:
0
我的是浏览到记录时,在DBImage中就显示产品的图片,图片有BMP的,也有JPG,GIF的。
“如果非要JPG,你可以在表的游标移动事件发生后将图片字段读出,放到目录内,由 TImage 控件直接往目录内载入”
能不能给出实现代码?:)谢谢你的帮助
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-19 00:18:10
8
楼 得分:
0
大体流程就是上面说的,部分代码你可以参考上面给出的代码,自己写写了,很简单的
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-19 11:19:44
9
楼 得分:
0
Table 或者 Query 的 AfterScroll 事件就是游标移动后的所产生的事件,再添加上面部分代码就实现所需功能了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ccrun
cc - http://www.ccrun.com
等级:
可用分等级:
小地主
总技术分:
93697
总技术分排名:
55
12
7
发表于:
2007-03-19 11:46:34
10
楼 得分:
25
#include <Jpeg.hpp>
将DBImage1的属性AutoDisplay设为false,在DBImage1对应的Table或者Query控件的事件AfterScroll里写代码:
void __fastcall TForm1::Table1AfterScroll(TDataSet *DataSet)
{
TMemoryStream *ms = DBImage1-> DataSource-> DataSet
-> CreateBlobStream(DBImage1-> DataSource->
DataSet-> FieldByName(DBImage1-> DataField),
bmRead);
TJPEGImage* Jpeg = new TJPEGImage;
Jpeg-> LoadFromStream(ms);
DBImage1-> Picture-> Bitmap-> Assign(Jpeg);
delete ms;
}
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
huzhangyou
信仰(http://doserver.net)
等级:
可用分等级:
中农
总技术分:
15148
总技术分排名:
958
发表于:
2007-03-19 11:54:05
11
楼 得分:
0
同意joyous的说法
可以以流的方式存除blob
显示的时候 不一定要用DBImage
可以直接使用Image
画上去就可以了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
joyous
- NULL -
等级:
可用分等级:
小地主
总技术分:
6038
总技术分排名:
3507
发表于:
2007-03-19 12:17:13
12
楼 得分:
0
不过 老妖 的方法也可以
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wewaa
阿尔博特
等级:
可用分等级:
掌柜
总技术分:
3773
总技术分排名:
5452
发表于:
2007-03-19 13:50:20
13
楼 得分:
0
mark
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lxp945
等级:
可用分等级:
长工
总技术分:
16
总技术分排名:
193287
发表于:
2007-03-19 17:51:37
14
楼 得分:
0
我用老妖的方法编译是报错:[C++ Error] Unit1.cpp(29): E2034 Cannot convert 'TStream * ' to 'TMemoryStream * '
我的全部代码如下:
#include <vcl.h>
#pragma hdrstop
#include <Jpeg.hpp>
#include "Unit1.h "
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(OpenPictureDialog1-> Execute())
{DBImage1-> Picture-> LoadFromFile(OpenPictureDialog1-> FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ADOQuery1AfterScroll(TDataSet *DataSet)
{
TMemoryStream *ms = DBImage1-> DataSource-> DataSet-> CreateBlobStream(DBImage1-> DataSource-> DataSet-> FieldByName(DBImage1-> DataField),bmRead);
TJPEGImage *Jpeg = new TJPEGImage;
Jpeg-> LoadFromStream(ms);
DBImage1-> Picture-> Bitmap-> Assign(Jpeg);
delete ms;
}
//---------------------------------------------------------------------------
请问该如何改?谢谢各位的帮助
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
river0001
等级:
可用分等级:
长工
总技术分:
40
总技术分排名:
137768
发表于:
2008-04-08 12:47:26
15
楼 得分:
0
翻了这么多类似问题的帖子,大家都搞得很麻烦,其实只要加上
#include <Jpeg.hpp>
TDBImage就可以支持jpg了!!!
就这么简单!!!
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友