使用'save'方法更改ado对象的xml导出字段的精度

时间:2009-03-02 15:54:20

标签: xml vb6 ado

我正在使用一个VB6应用程序,它使用ADODB.Recordset对象使用'save'方法将数据转储到.xml文件,如下所示:

adoRecordset.Save strDst, adPersistXML

其中strDst是描述目的地的字符串。

现在,对于某些表,数据库中有些行是浮点数/双精度数。例如,表TABLE包含一个类型为float的列MEASURE。

问题: 是否可以控制写入.xml文件的MEASURE的存在?

例如,如果度量为1.23456789,则输出文件中是否可以使用measure =“1.234”?

思想: ADO记录集为数据库的每个记录都有一个“字段”类型的集合“字段”。字段的“精度”属性存在,但“大多数”只读。目前还不清楚何时可以通过查看MSDN的帮助来编写它。它可以以某种方式使用吗?

限制: 我确实想使用'保存'方法。我想知道它是否可以用它来避免编写我自己的方法。

背景 目的是将通过长途通道从数据库中提取的大量数据传输到另一个系统。在该系统中,数据被加载到数据库中以进行初步分析。瓶颈是通道和现有的数据提取应用程序,它通过某种算法选择要传输的表。 .xml文件以高压缩率压缩,但数量仍然太多,因此我们决定删除一些不那么重要的数据。

附带问题(指onedaywhen的解决方案) 感谢onedaywhen为你回答到现在。我以不同的方式使用它,但它已经帮了很多(+1)。 出现的问题是大多数值在所需位置都是四舍五入的,但是当它写入.xml时,会出现一种二进制到十进制的转换错误。例如3.123成为“3.1230000000000002”。

2 个答案:

答案 0 :(得分:3)

简单的解决方案是使用SQL对值进行舍入,并将其作为记录集的附加列返回。因此,假设您有一个复杂的舍入算法,需要客户端代码。

您可以使用MSDataShape提供程序向记录集“追加”新列,例如数字类型(即固定精度十进制),然后在保存之前遍历记录集以填充值:

  Dim rs As ADODB.Recordset
  Set rs = CreateObject("ADODB.Recordset")
  With rs
    .ActiveConnection = _
    "Provider=MSDataShape;" & _
    "Data Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Tempo\New_Jet_DB.mdb"
    .Source = _
    "SHAPE {" & _
    " SELECT ExistingField" & _
    " FROM ExistingTable" & _
    " ORDER BY ExistingField" & _
    "} APPEND NEW adNumeric(5, 4) AS NewField"
    .LockType = 4  ' adLockBatchOptimistic

    .Open

    Dim i As Long
    For i = 0 To .RecordCount - 1
      .Fields("NewField").value = Round(.Fields("ExistingField").value, 4)
      .MoveNext
    Next

    rs.Save "C:\rs.xml", adPersistXML

  End With

当然,行将在XML中显示为已更新。

答案 1 :(得分:1)

“保存”方法不够灵活。 它的目的是持久保存数据,就是这样。无法更改值的格式或影响数据的存储方式(只能设置 PersistFormat )。

我采用的解决方案是对生成的XML文件进行后处理,以舍入我感兴趣的所有浮点值。这样我就可以获得所需的灵活性。