我数据库表中某字段的值是类似于xml文档形式,如:
<?xml version="1.0" encoding="UTF-8"?>
<record>
<ID>659825</ID>
<Type>11</Type>
<Name>张三</Name>
<recordType>2</recordType>
</record>现程序想循环读取所有符合条件的该字段的值,用xmldocument处理,结果输出到html文件或者stringgrid
不知道该怎么写了,想到了用Tblodstream,但xml编码似乎出了问题,下面是简单的设想if con.Connected then
        begin
            with qry1 do
                begin
                    Close;
                    SQL.Clear;
                    SQL.Add('select content from mem_event where  uniqueID=:id');
                    Parameters.ParamByName('id').Value:=Trim(edt1.Text);
                    Open;
                    stream:= TADOblobStream.Create(Tblobfield(qry1.FieldByName('content')),bmRead);
                    stream.Position:=0;
                    xmldcmnt1.LoadFromStream(stream);
                   
这样会出错,错误提示大约是说流中有汉字,不能识别

解决方案 »

  1.   

    把Tblodstream内容作base64编码再向xml中写,取的时候再用base64解码
      

  2.   

    To:hongqi162
       你好,能说下具体的控件吗?我用的是D7,我在indymisc里面看到有IdEncoderMIME,IdEncoderUUE,IdEncoderXXE,具体到我这问题上该用哪个,是字段的内容保存到流,再进行base64编码吗?相关的decoder函数并没发现返回值是流的,是否还在中转一下?恳请万忙中给予答复,顺谢!
      

  3.   


     if con1.Connected then
         begin
           with qry1 do
             begin
               Close;
               SQL.Clear;
               SQL.Add('select content from mem_event where uniqueID=:id');
               Parameters.ParamByName('id').Value:=Trim(edt1.Text);
               Open;
               rstream:= TADOblobStream.Create(Tblobfield(qry1.FieldByName('content')),bmRead);
               rstream.Position:=0;
               dstream:=Tmemorystream.Create;
               EncodeStream(rstream,dstream);
               con2.Position:=0;
               xmldcmnt1.LoadFromStream(con2);
    这样会出错,说文档顶层存在无效内容
      

  4.   

    用你的第一种方法
    不过要把
    <?xml version="1.0" encoding="UTF-8"?> 
    改成
    <?xml version="1.0" encoding="GB2312"?> 
    应该就可以了
      

  5.   

    xml的字符串是什么编码?
    存放xml字符串的字段是什么类似,如果是varchar(xxx),就直接用Tstringstream好了