我正在开发一个 VB6 应用程序,该应用程序使用 ADODB.Recordset 对象通过“save”方法将数据转储到 .xml 文件,如下所示:
adoRecordset.Save strDst, adPersistXML
其中 strDst 是描述目的地的字符串。
现在,数据库中的某些表的某些行是 float / double 。例如,表 TABLE 包含 float 类型的列 MEASURE。
问题: 是否可以控制写入 .xml 文件的 MEASURE 精度?
例如,如果度量为 1.23456789 是否可以在输出文件中包含measure="1.234"?
想法: ADO 记录集对于数据库的每条记录都有一个“Field”类型的集合“Fields”。字段的属性“精度”存在,但“大部分”是只读的。看MSDN的帮助还不太清楚什么时候能写出来。它可以以某种方式使用吗?
限制: 我确实想使用“保存”方法。我想知道是否可以使用它以避免编写自己的方法。
背景: 目的是通过长距离 channel 将从数据库中提取的大量数据传输到另一个系统。在该系统中,数据被加载到数据库中以进行初步分析。瓶颈是 channel 和现有的数据提取应用程序,它通过某种算法选择要传输的表。 .xml 文件以高压缩率进行压缩,但数量仍然太多,因此我们决定删除一些不那么重要的数据。
附带问题(引用onedaywhen的解决方案) 感谢您迄今为止的答复。我使用它的方式略有不同,但它已经帮助了很多(+1)。 出现的问题是大多数值都在所需位置进行了很好的舍入,但是当将其写入 .xml 时,存在一种二进制到十进制转换错误。例如3.123 变为“3.1230000000000002”。
最佳答案
简单的解决方案是使用 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 中显示为已更新。
关于xml - 使用 ado 对象使用 'save' 方法更改 xml 导出字段的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602839/