高分,如何在SQL SERVER中存储各种文件(如图象,MP3,WORD)

piantang 2002-09-20 03:05:56
我觉得好象往数据库中存储一个文件可分为两种:
其一存储文件路径;
其二存储文件本身。
我想将文档存储在数据库中应该是可行的,可是我只对字段操作过,没有对文件本身操作的经验,不知该如何做。请高手指点,谢谢了!
...全文
234 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifuming 2002-09-22
  • 打赏
  • 举报
回复
即然大家都写出了一段程序,我也写出一段吧,刚研究出来的(用的是InterBase):
读数据(照片):

TMemoryStream *memStream = new TMemoryStream;

TBlobField *tmpField = (TBlobField *)CustomerData->IBQuery2->FieldByName("photo");
tmpField->SaveToStream(memStream);

tmpField->SaveToStream(memStream);
memStream->SaveToFile("temp.bmp");

try{
Image4->Visible=True;
Image4->Picture->LoadFromFile("temp.bmp");
}catch(...){
MessageBox(NULL,"取员工照片错误!","错误",MB_ICONERROR);
};

delete memStream;

//写入照片:

if(Trim(OpenPictureDialog1->FileName)!="")
{
TMemoryStream *tmpStream = new TMemoryStream();
tmpStream->LoadFromFile(OpenPictureDialog1->FileName);
Query->ParamByName("photo")->LoadFromStream(tmpStream,ftBlob);

delete tmpStream;
};
xhfjy 2002-09-22
  • 打赏
  • 举报
回复
呵呵,先MARK一下啦
xiaoyu 2002-09-22
  • 打赏
  • 举报
回复
thank you very much
pzoon 2002-09-22
  • 打赏
  • 举报
回复
只于图像就使用SQL SERVER的IMAGE类型
它支持很多的图像
其它的用BLOB

Q:如何在C++Builder中存取BLOB字段的数据?
A:如果你使用的是BDE的数据访问方式(不论你使用的是BDE的数据源还是ODBC的数据源)
你可以按照下面的代码来存取BLOB字段的数据:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();

如果你使用的ADO的方式来访问数据库,你可以这样写:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream* pmem=new TADOBlobStream (pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();
pzoon 2002-09-22
  • 打赏
  • 举报
回复
只于图像就使用SQL SERVER的IMAGE类型
它支持很多的图像
其它的用BLOB

Q:如何在C++Builder中存取BLOB字段的数据?
A:如果你使用的是BDE的数据访问方式(不论你使用的是BDE的数据源还是ODBC的数据源)
你可以按照下面的代码来存取BLOB字段的数据:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();

如果你使用的ADO的方式来访问数据库,你可以这样写:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream* pmem=new TADOBlobStream (pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();
pzoon 2002-09-22
  • 打赏
  • 举报
回复
只于图像就使用SQL SERVER的IMAGE类型
它支持很多的图像
其它的用BLOB

Q:如何在C++Builder中存取BLOB字段的数据?
A:如果你使用的是BDE的数据访问方式(不论你使用的是BDE的数据源还是ODBC的数据源)
你可以按照下面的代码来存取BLOB字段的数据:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();

如果你使用的ADO的方式来访问数据库,你可以这样写:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream* pmem=new TADOBlobStream (pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();
piantang 2002-09-22
  • 打赏
  • 举报
回复
非常感谢各位,
容我回去试一下再给各位加分,先谢谢了!
IT-司马青衫 2002-09-21
  • 打赏
  • 举报
回复
只于图像就使用SQL SERVER的IMAGE类型
它支持很多的图像
其它的用BLOB

Q:如何在C++Builder中存取BLOB字段的数据?
A:如果你使用的是BDE的数据访问方式(不论你使用的是BDE的数据源还是ODBC的数据源)
你可以按照下面的代码来存取BLOB字段的数据:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();

如果你使用的ADO的方式来访问数据库,你可以这样写:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream* pmem=new TADOBlobStream (pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();


hbxtx 2002-09-20
  • 打赏
  • 举报
回复
存储图片的一段代码:
TBlobStream
.h File
#include <jpeg.hpp>
.cpp File
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TQuery *Query=new TQuery(this);
Query->DatabaseName="all_ttmis";
Query->RequestLive=true;
Query->SQL->Clear();
Query->SQL->Add("select * from yourtable");
Query->Open();
Query->Edit();
TBlobField *pField=(TBlobField*)Query->FieldByName("Picture Field");
TBlobStream *pStream=new TBlobStream(pField,bmReadWrite);
Graphics::TBitmap *pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromFile("Your Jpeg File");
pBitmap->SaveToStream(pStream);
pField->LoadFromStream(pStream);
Query->Post();
delete pStream;
delete pBitmap;
delete Query;
.....
}
codecb 2002-09-20
  • 打赏
  • 举报
回复
TMemoryStream* pms = new TMemoryStream();
TBlobStream *Stream1;
Memo1->Lines->SaveToStream(pms);
pms->Position=0;
Stream1 = new TBlobStream((TBlobField *)Form1->Table2->FieldByName("CODE"),bmReadWrite);
Stream1->CopyFrom(pms,pms->Size);
Form1->Table2->Post();

给你段我的代码,希望对你有帮助!
hailulu_wang 2002-09-20
  • 打赏
  • 举报
回复
用blob类型

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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