00000015.htm
来自「水木清华关于C++Builder程序的代码」· HTM 代码 · 共 112 行
HTM
112 行
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Zeemon (踏遍青山), 信区: Visual <BR>标 题: [CB]实现BLOB字段的读写 <BR>发信站: BBS 水木清华站 (Wed Jun 17 12:58:08 1998) <BR> <BR> CB中实现BLOB字段的读写 <BR>对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: <BR>BLOB字段的读取: <BR> TBlobSTream* TemplateStream; <BR> char* TempPlatePtr; <BR> <BR> TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName <BR> ("SearchTem"),bmReadWrite); <BR> TemplatePtr= new char[TemplateStream->Size]; <BR> TemplateStream->Read(TemplatePtr, TemplateStream->Size); <BR> <BR>BLOB字段的写入: <BR> TBlobSTream* TemplateStream; <BR> char* TempPlatePtr; <BR> <BR> TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName <BR> ("SearchTem"),bmReadWrite); <BR> TemplatePtr= new char[TemplateStream->Size]; <BR> TemplateStream->Write(TemplatePtr, TemplateStream->Size); <BR> <BR>________________________________________________________________ <BR>补充: <BR>获得字段的大小用函数datalength <BR> <BR>SQL Server端要作一点设置: <BR>By default, WRITETEXT is a nonlogged operation. This means that <BR>text or image data is not logged when it is written into the database. <BR>To use WRITETEXT in its default, nonlogged state, <BR>//注意!! <BR>the system administrator must use the sp_dboption system stored <BR>procedure to set select into/bulkcopy, <BR>// <BR>which allows nonlogged data to be inserted. <BR> <BR>做了试验,直接写SQL语句好象不行. <BR>____________________________________________________________________ <BR> 一些注意事项和一个例子 <BR>在写入时: <BR>(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; <BR>(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; <BR>使得TTable(TQuery)是可写的. <BR> <BR>下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, <BR>script为一个BLOB字段: <BR> TBlobStream *pScriptStream; <BR> //插入一条记录 <BR> strSQL1="insert into content(file_id,script,key_image) values('"; <BR> strSQL1=strSQL1+m_szFileID+"',null,null)"; <BR> dmStoryEditor->qryExec->SQL->Clear(); <BR> dmStoryEditor->qryExec->SQL->Add(strSQL1); <BR> dmStoryEditor->qryExec->ExecSQL(); <BR> dmStoryEditor->qryExec->Close(); <BR> //整理要写入的Blob数据 <BR> LockMemories(NewsScript); <BR> NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); <BR> NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); <BR> if(NewsScript.m_pScript!=NULL) <BR> { <BR> //再将刚插入的记录读出来,使该Query与该条记录关联 <BR> strSQL1="select file_id,script from content where file_id='"+ <BR> m_szFileID+"'"; <BR> //允许该Query写 <BR> dmStoryEditor->qryExec->RequestLive=true; <BR> dmStoryEditor->qryExec->SQL->Clear(); <BR> dmStoryEditor->qryExec->SQL->Add(strSQL1); <BR> dmStoryEditor->qryExec->Open(); <BR> dmStoryEditor->qryExec->First(); <BR> //将该Query置为可写 <BR> dmStoryEditor->qryExec->Edit(); <BR> pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor-> <BR> qryExec->FieldByName("script"),bmReadWrite); <BR> pScriptStream->Write(NewsScript.m_pScript, <BR> NewsScript.m_lScriptRealSize); <BR> dmStoryEditor->qryExec->Post(); <BR> dmStoryEditor->qryExec->RequestLive=false; <BR> delete pScriptStream; <BR> } <BR> GlobalUnlock(NewsScript.m_hScript); <BR> UnLockMemories(NewsScript); <BR> <BR> <BR>-- <BR> 最后青蛙问道:"为什么?我告诉过你我是一位美丽的公主, 会与你 <BR>共度一个星期并让你为所欲为. 你为什么还不愿吻我?" <BR> 男孩说道:"我是一个程序员. 我没时间交GF, 但拥有一只会说话的 <BR>青蛙简直太酷了." <BR> <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 159.226.41.99] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?