procedure TFHelpConfig.FormShow(Sender: TObject);
var Stream:TMemoryStream;
begin
try
try
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select top 1 * from AceHelpIni Order by ModifyTime');
Open;
end;
Stream := TMemoryStream.Create;
TBlobField(ADOQuery2.FieldByName('Ini')).SaveToStream(Stream);
Stream.Position := 0;
Stream.SaveToFile('D:\aa.xml');
finally
Stream.Free;
end; self.ADOQuery1.LoadFromFile('D:\aa.xml');
except
ShowMessage('出错!');
end;
end;我数据库中Ini的内容为
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='id' rs:number='1' rs:writeunknown='true' rs:basecatalog='AceStylePlatform' rs:basetable='AceHelpConfig'
rs:basecolumn='id'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
... ...
<s:AttributeType name='UserId' rs:number='2' rs:nullable='true' rs:writeunknown='true' rs:basecatalog='AceStylePlatform'
rs:basetable='AceHelpConfig' rs:basecolumn='UserId'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row id='562' UserId='1' ModuleId='7101' Seq='22' DisplayName='Shiplot_Re' Length='100' Selected='N' Fixed='Y'
Condition='N' Range='N' MustInput='N'/>
... ...
<z:row id='563' UserId='1' ModuleId='7101' Seq='23' DisplayName='Lot' Length='100' Selected='N' Fixed='Y' Condition='N'
Range='N' MustInput='N'/>
</rs:data>
</xml>但读到aa.xml中后打开看,最后的</xml>没有了,所以程序一直报:下列标记没有关闭:xml为什么数据库中有</xml>,但读到aa.xml中就没了?
如果没办法使数据库中内容全部读到aa.xml中,那怎么手动加一行</xml>到aa.xml中?请高人赐教。
var Stream:TMemoryStream;
begin
try
try
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select top 1 * from AceHelpIni Order by ModifyTime');
Open;
end;
Stream := TMemoryStream.Create;
TBlobField(ADOQuery2.FieldByName('Ini')).SaveToStream(Stream);
Stream.Position := 0;
Stream.SaveToFile('D:\aa.xml');
finally
Stream.Free;
end; self.ADOQuery1.LoadFromFile('D:\aa.xml');
except
ShowMessage('出错!');
end;
end;我数据库中Ini的内容为
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='id' rs:number='1' rs:writeunknown='true' rs:basecatalog='AceStylePlatform' rs:basetable='AceHelpConfig'
rs:basecolumn='id'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
... ...
<s:AttributeType name='UserId' rs:number='2' rs:nullable='true' rs:writeunknown='true' rs:basecatalog='AceStylePlatform'
rs:basetable='AceHelpConfig' rs:basecolumn='UserId'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row id='562' UserId='1' ModuleId='7101' Seq='22' DisplayName='Shiplot_Re' Length='100' Selected='N' Fixed='Y'
Condition='N' Range='N' MustInput='N'/>
... ...
<z:row id='563' UserId='1' ModuleId='7101' Seq='23' DisplayName='Lot' Length='100' Selected='N' Fixed='Y' Condition='N'
Range='N' MustInput='N'/>
</rs:data>
</xml>但读到aa.xml中后打开看,最后的</xml>没有了,所以程序一直报:下列标记没有关闭:xml为什么数据库中有</xml>,但读到aa.xml中就没了?
如果没办法使数据库中内容全部读到aa.xml中,那怎么手动加一行</xml>到aa.xml中?请高人赐教。
可能是你往数据库写时就没有写入。
数据库中有</xml>我在SQL中用print显示出来都有,最上面贴出来的就是从数据库中Copy出来的。我知道怎么手动在xml文档后加多"</xml>"了,但是怎么也不明白为什么读出来的跟数据库中的不一致.
要不把数据库备份一个上来给大家瞧瞧?
用TMemoryStream的SaveToFile方法,
读text类型生成的xml文件为8kb
读ntext类型生成的xml文件为16kb用self.Memo1.Lines.Add(ADOQuery.FieldByName('Ini').AsString);
self.Memo1.Lines.SaveToFile('D:\aa.xml');
读ntext类型生成的xml文件为8kb3个文件内容是一样的。
self.ADOQuery1.LoadFromFile('D:\aa.xml'); 只能Load大小为8kb的xml档,否则报错。请问是为什么生成的xml档大小不同?
除了用Memo1控件有没有其他方法生成ADOQuery能Load的xml档?
有没有方法从数据库中读出来Ini字段后直接放到ADOQuery中,不用生成中间的xml档?
http://topic.csdn.net/u/20100128/17/dfc0f1e7-1c32-4409-abad-a354240c52ae.html如果解决可以再加分,望高人指点迷经。
不用xml中转可以用CoStream,本论坛有。
并不是String的长度不够,我数据库中Ini字段内容加长减短都一样少4位。Ini字段正好中有4个中文字,应该与编码有关。我试试CoStream,如果行的话,xml问题就不存了。
ShowMessage(ADOQuery.FieldByName('Ini').AsString)没有</xml>,ADOQuery读Ini字段时就没读出</xml>来,这样来看Stream应该没问题的。ShowMessage(ADOQuery.FieldByName('Ini').AsWideString)也没有</xml>
Ini只是我的字段名而已,上面5楼时说了我设成text类型或ntext类型,ADOQuery读出来有不同结果。
CoStream在哪个单元中?
_Stream是什么类型流?我很菜... :(