Изменение точности полей для экспорта xml с объектом ado с помощью метода "save"
Я работаю над приложением VB6, которое использует объект ADODB.Recordset для передачи данных в XML файл с помощью метода "save", например:
adoRecordset.Save strDst, adPersistXML
где strDst - это строка, описывающая назначение.
Теперь в базе данных есть несколько строк, которые являются float/doubles, для некоторой таблицы. Например, таблица TABLE содержит столбец MEASURE типа float.
Вопрос:
Можно ли управлять выбором MEASURE, который записывается в .xml файл?
Например, если значение равно 1.23456789, возможно ли в выходном файле иметь value = 1.234?
Идея:
У набора записей ADO есть коллекция "Поля" типа "Поле" для каждой записи базы данных. Свойство "Precision" для полей существует, но "главным образом" доступно только для чтения. Это довольно неясно, когда это можно написать, посмотрев на помощь из MSDN. Может ли это быть каким-то образом?
Ограничение:
Я хочу использовать метод "Сохранить". Я хочу знать, возможно ли это с этим, чтобы не писать собственный метод.
Фон:
Цель состоит в том, чтобы передать огромное количество данных, извлеченных из базы данных по удаленному каналу, в другую систему. В этой системе данные загружаются в базу данных для предварительного анализа. Узкие места - это канал и существующее приложение для извлечения данных, которое выбирает таблицы для передачи через какой-либо алгоритм. Файлы .xml сжаты с высокой степенью сжатия, но количество все равно слишком велико, поэтому мы решили отказаться от некоторых не очень важных данных.
Боковые проблемы (ссылаясь на onedaywhen решение)
Спасибо, если вы ответите до сих пор. Я использую его по-разному, но он уже много помог (+1).
Возникающая проблема заключается в том, что большинство значений хорошо округлены в желаемой позиции, но когда она записывается в .xml, существует некоторая ошибка двоичного преобразования в десятичное преобразование. например 3.123 становится "3.1230000000000002".
Ответы
Ответ 1
Метод "Сохранить" не совсем гибкий.
Его цель - сохранить данные настойчиво, все. Изменение формата значений или влияние способа хранения данных невозможно (может быть установлен только параметр PersistFormat).
Решение, которое я принял, состоит в том, чтобы опубликовать полученный XML файл, округляя все значения с плавающей запятой, с которыми я перепробовал. Таким образом, мне нужна гибкость.
Ответ 2
Простым решением было бы округлить значение с помощью SQL и вернуть это как дополнительный столбец для набора записей. Поэтому допустим, что у вас есть сложный алгоритм округления, который требует кода на стороне клиента.
Вы можете использовать поставщика MSDataShape для добавления нового столбца в ваш набор записей, например, типа numeric (т.е. фиксированной точности десятичного), а затем пройти набор записей, чтобы заполнить значения перед сохранением:
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, конечно.