紧急求助! IB如何保存Jpeg图片?

nnlyc 2003-05-06 10:30:14
表中有一字段为PICTURE,BLOB字段,现在想用Image装入图片并保存,怎么办?以前有人问过类似的问题,但回答得不是很具体,小弟弟做毕业设计,就要交了,希望各位不吝赐教!谢谢!
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
domustdo 2003-05-07
  • 打赏
  • 举报
回复
上述代码要加上头文件#include <memory.hpp>
粘贴的时候格式比较乱,你自己整理吧,希望对你有帮助。
domustdo 2003-05-07
  • 打赏
  • 举报
回复
//我的一个程序代码就是如下所示,在interbase中保存jpeg图片
std::auto_ptr<TMemoryStream> stream (new TMemoryStream);
stream->LoadFromFile(OpenPictureDialog1->FileName);
stream->Position = 0;
String sqlstr;

if(RadioButton1->Checked ) //添加图片
{
sqlstr = "insert into pic_table (PicName, Picture) values (:PicName, :Picture)"; //Picture即是jpeg图片

IBQuery1->Close();
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add(sqlstr);
IBQuery1->Params->ParamByName("PicName")->AsString = OpenPictureDialog1-
>FileName;
IBQuery1->Params->ParamByName("Picture")->LoadFromStream(stream.get(), ftBlob);
IBQuery1->ExecSQL();
}
nnlyc 2003-05-06
  • 打赏
  • 举报
回复
哪位大虾能给小弟一段关于存取Jpeg图片的代码啊,分不是问题。
nnlyc 2003-05-06
  • 打赏
  • 举报
回复
To zcm(我是一只猪,我有一个梦):
IB当然是InterBase,我用的是BCB6 Update4+IB6.5
猎人66 2003-05-06
  • 打赏
  • 举报
回复
IB是interbase吗?
道素 2003-05-06
  • 打赏
  • 举报
回复
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
BLOB字段的读取:
TBlobSTream* TemplateStream;
char* TempPlatePtr;

TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
("SearchTem"),bmReadWrite);
TemplatePtr= new char[TemplateStream->Size];
TemplateStream->Read(TemplatePtr, TemplateStream->Size);

BLOB字段的写入:
TBlobSTream* TemplateStream;
char* TempPlatePtr;

TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
("SearchTem"),bmReadWrite);
TemplatePtr= new char[TemplateStream->Size];
TemplateStream->Write(TemplatePtr, TemplateStream->Size);

________________________________________________________________
补充:
获得字段的大小用函数datalength

SQL Server端要作一点设置:
By default, WRITETEXT is a nonlogged operation. This means that
text or image data is not logged when it is written into the database.
To use WRITETEXT in its default, nonlogged state,
//注意!!
the system administrator must use the sp_dboption system stored
procedure to set select into/bulkcopy,
//
which allows nonlogged data to be inserted.

做了试验,直接写SQL语句好象不行.
____________________________________________________________________
一些注意事项和一个例子
在写入时:
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
使得TTable(TQuery)是可写的.

下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
script为一个BLOB字段:
TBlobStream *pScriptStream;
//插入一条记录
strSQL1="insert into content(file_id,script,key_image) values('";
strSQL1=strSQL1+m_szFileID+"',null,null)";
dmStoryEditor->qryExec->SQL->Clear();
dmStoryEditor->qryExec->SQL->Add(strSQL1);
dmStoryEditor->qryExec->ExecSQL();
dmStoryEditor->qryExec->Close();
//整理要写入的Blob数据
LockMemories(NewsScript);
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
if(NewsScript.m_pScript!=NULL)
{
//再将刚插入的记录读出来,使该Query与该条记录关联
strSQL1="select file_id,script from content where file_id='"+
m_szFileID+"'";
//允许该Query写
dmStoryEditor->qryExec->RequestLive=true;
dmStoryEditor->qryExec->SQL->Clear();
dmStoryEditor->qryExec->SQL->Add(strSQL1);
dmStoryEditor->qryExec->Open();
dmStoryEditor->qryExec->First();
//将该Query置为可写
dmStoryEditor->qryExec->Edit();
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
qryExec->FieldByName("script"),bmReadWrite);
pScriptStream->Write(NewsScript.m_pScript,
NewsScript.m_lScriptRealSize);
dmStoryEditor->qryExec->Post();
dmStoryEditor->qryExec->RequestLive=false;
delete pScriptStream;
}
GlobalUnlock(NewsScript.m_hScript);
UnLockMemories(NewsScript);

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧