blob的问题

joinclear 2006-05-23 10:38:05
TBlobStream* TemplateStream;

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from drv_admin.drv_photo ");
ADOQuery1->Open();

ADOQuery1->FieldByName("sfzmhm")->AsString = Edit1->Text ;
ADOQuery1->FieldByName("gxsj")->AsString = Now().FormatString("yyyy-mm-dd hh:mm:ss");

TBlobField * pField=(TBlobField *)ADOQuery1->FieldByName("zp");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);

TJPEGImage *jp;
jp = new TJPEGImage();
jp->LoadFromFile(OpenPictureDialog1->FileName);
jp->SaveToStream(pmem);

ADOQuery1->ExecSQL();

delete TemplateStream;
delete jp;
zp是BLOBO类型。这段代码是有问题的 应该怎么写呢
...全文
289 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wf2091139 2006-05-27
  • 打赏
  • 举报
回复
给你一段我现在正在使用的代码.
AnsiString FileNameFrt;
AnsiString PlayStr;
TBlobField *BlobField;
bool bRet;

qryPub->Close();
qryPub->RequestLive = true;
qryPub->SQL->Clear();
qryPub->SQL->Add("select * from table ...");
try
{
qryPub->Open();
PlayStr = qryPub->FieldByName("描述")->AsString;
qryPub->Edit();
//文件写入
BlobField = (TBlobField*) qryPub->FieldByName("主表");
BlobField->LoadFromFile(ReportFileName);
//文件写入
FileNameFrt = ReportFileName.SubString(1,ReportFileName.Length()-1) + "t";
BlobField = (TBlobField*) qryPub->FieldByName("对象");
BlobField->LoadFromFile(FileNameFrt);
qryPub->Post();
qryPub->Close();
qryPub->RequestLive = false;
bRet = true;
}
catch(...)
{
bRet = false;
}
return bRet;
joinclear 2006-05-24
  • 打赏
  • 举报
回复
L_75480035 2006-05-24
  • 打赏
  • 举报
回复
在数据库连接串后面加上
Extended Properties=PLSQLRSet=1;DistribTx=0;
open的时候就不会报错了
joinclear 2006-05-23
  • 打赏
  • 举报
回复
还有一种方法如下:

//插入一条记录
String strSQL1="insert into drv_admin.drv_photo(sfzmhm,zp,gxsj) values('"+Edit1->Text+"',null,to_date('"+ToDateStr+"','yyyy-mm-dd hh24:mi:ss'))";
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(strSQL1);
ADOQuery1->ExecSQL();

TBlobStream* TemplateStream;
TFileStream * TempFile;

ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update drv_admin.drv_photo set zp=:blobdata where sfzmhm = '"+Edit1->Text+"'");

TempFile = new TFileStream(OpenPictureDialog1->FileName,fmOpenReadWrite );
TempFile->Position = 0;
ADOQuery1->Parameters->ParamByName("blobdata")->LoadFromStream(TempFile , ftBlob);

ADOQuery1->ExecSQL();

delete TemplateStream;
但是这个 blobdata 总是报没有这个字段。这样的用法 是不是blobdata可以在哪个地方设置。
请大家看看。
joinclear 2006-05-23
  • 打赏
  • 举报
回复
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from drv_admin.drv_photo ");
ADOQuery1->Open();
这个时候 就有错了  问题出在 sql语句上,因为drv_photo这个表中的 ZP字段是个 BLOB的 ,所以当ADOQuery1->Open();时就报错。报:数据类型不被支持!
daydayup234 2006-05-23
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=119995
编译失败 2006-05-23
  • 打赏
  • 举报
回复
不好意思又错了,应该是
blob->LoadFromFile(OpenPictureDialog1->FileName);
编译失败 2006-05-23
  • 打赏
  • 举报
回复
错了,第二句应该是
blog->LoadFromFile(OpenPictureDialog1->FileName);
编译失败 2006-05-23
  • 打赏
  • 举报
回复
TBlobField *blob=(TBlobField *)ADOQuery1->FieldByName("zp");
ADOQuery1->LoadFromFile(OpenPictureDialog1->FileName);
ADOQuery1->Post();

为什么用ExecSQL,你这并不是SQL语句,该用Post(),而且也不需要TADOBlobStream这个东西。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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