发信人: lofe ()感激生活(), 信区: BorlandDev
标  题: [CB]实现BLOB字段的读写 (转载) 
发信站: 哈工大紫丁香 (Sun Sep  3 07:56:25 2000), 转信

【 原文由 Zeemon 所发表 】
        CB中实现BLOB字段的读写
对于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); 

--
※ 修改:.haojs 于 Sep  3 07:54:01 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: bbs.hit.edu.cn]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: haojs.bbs@bbs.whnet.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.098毫秒