半百分,想请问个有关问题,对SQL中保存图片不理解,有经验的请进
半百分,想请教个问题,对SQL中保存图片不理解,有经验的请进
怎么在SQL中保存图片呀, 在网上查了一下,都是说用流把二进制写到数据库中.
我建了表, name ,image 两个字段 一个是char 另一个 image 类型的.
我执行了一个代码怎么报错呀. 数据库SQL2000
ADOQuery1-> SQL-> Add(insert into test (name,image) values(:P_Name,:P_Photo);
ADOQuery-> Parameters-> ParamByName( "P_Name ")-> Value= "中国 ";
ADOQuery-> Parameters-> ParamByName(( "P_Photo ")-> LoadFromFile( "...\my.bmp ",ftBlob);
try
{
ADOQuery1-> open();
}
catch(...)
{}
这都执行不成功.
都说用stream,可是这里根本就没有用呀.
还希望有经验的朋友 不另赐教
调试后马上给分结帖. 明天就要接差了呀.
------解决方案--------------------
BLOB 写库操作
TMemoryStream* pMS = new TMemoryStream;
pMS-> LoadFromFile(Edit2-> Text); // 选择一个文件,读入流
pMS-> Seek(0,soFromBeginning); // 设流指针 0
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(); // 执行SQL
delete pMS; // 删除流
pMS = NULL;
------解决方案--------------------
{//以下相片保存代码********************************************************
//方法1:
CustomerData-> PictureClientDataSet-> FieldByName( "学号 ")-> AsString=BaseForm-> Edit1-> Text;
CustomerData-> PictureClientDataSet-> FieldByName( "相片 ")-> Assign(DBImage1-> Picture);
/* //方法2:以流的方式加载到Blobs字段
TBlobField *LinkBlobField;
TFileStream *fStream;
TMemoryStream *mStream=new TMemoryStream();
fStream=new TFileStream(OpenDialog1-> FileName,fmOpenRead);
mStream-> CopyFrom(fStream,fStream-> Size);
LinkBlobField=(TBlobField*)CustomerData-> PictureClientDataSet-> FieldByName( "相片 "); //与Blobs字段关连
LinkBlobField-> LoadFromStream(mStream);
//方法3:++++++++以文件方式加载到Blobs字段
TBlobField *LinkBlobField;
LinkBlobField=(TBlobField*)CustomerData-> PictureClientDataSet-> FieldByName( "相片 "); //与Blobs字段关连
LinkBlobField-> LoadFromFile(OpenDialog1-> FileName);
*/
//++++++++++++
CustomerData-> PictureClientDataSet-> Post();
} //以上相片保存代码********************************************************
以上所有方法都在我的项目中应用成功。
要给分呀
怎么在SQL中保存图片呀, 在网上查了一下,都是说用流把二进制写到数据库中.
我建了表, name ,image 两个字段 一个是char 另一个 image 类型的.
我执行了一个代码怎么报错呀. 数据库SQL2000
ADOQuery1-> SQL-> Add(insert into test (name,image) values(:P_Name,:P_Photo);
ADOQuery-> Parameters-> ParamByName( "P_Name ")-> Value= "中国 ";
ADOQuery-> Parameters-> ParamByName(( "P_Photo ")-> LoadFromFile( "...\my.bmp ",ftBlob);
try
{
ADOQuery1-> open();
}
catch(...)
{}
这都执行不成功.
都说用stream,可是这里根本就没有用呀.
还希望有经验的朋友 不另赐教
调试后马上给分结帖. 明天就要接差了呀.
------解决方案--------------------
BLOB 写库操作
TMemoryStream* pMS = new TMemoryStream;
pMS-> LoadFromFile(Edit2-> Text); // 选择一个文件,读入流
pMS-> Seek(0,soFromBeginning); // 设流指针 0
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(); // 执行SQL
delete pMS; // 删除流
pMS = NULL;
------解决方案--------------------
{//以下相片保存代码********************************************************
//方法1:
CustomerData-> PictureClientDataSet-> FieldByName( "学号 ")-> AsString=BaseForm-> Edit1-> Text;
CustomerData-> PictureClientDataSet-> FieldByName( "相片 ")-> Assign(DBImage1-> Picture);
/* //方法2:以流的方式加载到Blobs字段
TBlobField *LinkBlobField;
TFileStream *fStream;
TMemoryStream *mStream=new TMemoryStream();
fStream=new TFileStream(OpenDialog1-> FileName,fmOpenRead);
mStream-> CopyFrom(fStream,fStream-> Size);
LinkBlobField=(TBlobField*)CustomerData-> PictureClientDataSet-> FieldByName( "相片 "); //与Blobs字段关连
LinkBlobField-> LoadFromStream(mStream);
//方法3:++++++++以文件方式加载到Blobs字段
TBlobField *LinkBlobField;
LinkBlobField=(TBlobField*)CustomerData-> PictureClientDataSet-> FieldByName( "相片 "); //与Blobs字段关连
LinkBlobField-> LoadFromFile(OpenDialog1-> FileName);
*/
//++++++++++++
CustomerData-> PictureClientDataSet-> Post();
} //以上相片保存代码********************************************************
以上所有方法都在我的项目中应用成功。
要给分呀