2

我正在开发一个 VB6 应用程序,该应用程序使用 ADODB.Recordset 对象通过“保存”方法将数据转储到 .xml 文件,如下所示:

adoRecordset.Save strDst, adPersistXML

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

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

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

例如,如果度量为 1.23456789,是否可以在输出文件中包含 measure="1.234" ?

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

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

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

边问题(参考 onedaywhen 的解决方案) 感谢 onedaywhen 到目前为止的回答。我以不同的方式使用它,但它已经有很大帮助(+1)。出现的问题是大部分值都在所需位置四舍五入,但是写入.xml时,出现了一种二进制到十进制的转换错误。例如 3.123 变为“3.1230000000000002”。

4

2 回答 2

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 中显示为已更新。

于 2009-03-03T08:36:40.877 回答
1

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

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

于 2009-04-01T13:24:56.967 回答