VBA ADODB测试两个字段是否可以转换?

问题描述 投票:1回答:1

我正在编写一个将recordset(从ADODB库中)的内容复制到另一个函数。具体将Oracle g11(其片段)的某些内容复制到Access 2007

因为我想确保只写全部内容或不写任何内容,我正在检查每个Fieldsrecordset是否相同(NameType相同)。

问题是我很快就偶然发现了一个案例,一个记录集的字段类型为adVarChar,另一个记录集的字段为adVarWChar。老实说,我不确定这些数据类型有什么不同,但是据我了解,它们都代表可变长度字符字段,如果我错了,请更正我,但我应该能够将adVarChar的内容写入adVarWChar

现在,我了解到ADODB可以识别的字符串类型更多,并且有很多类型的整数,双精度数,浮点数……您都明白了。

所以我的问题是如何检测是否可以将一种数据类型(ADODB的数据类型)的内容写入/强制/转换为另一种?

是否有一种简便且DRY的方法?

请参阅我的代码以供参考

Sub AppendRecords(NewRecords As ADODB.Recordset, OriginalRecords As ADODB.Recordset)
    Dim AllFieldsMatch As Boolean
    Dim Iterator       As Integer
    Dim ActiveField    As Field
    Dim FieldCount     As Integer
    Dim FieldNames()   As String
    Dim FieldValues()  As Variant

    FieldCount = NewRecords.Fields.Count

    For Iterator = 0 To FieldCount - 1
        If NewRecords.Fields(Iterator).Name <> OriginalRecords.Fields(Iterator).Name Then
            AllFieldsMatch = False
            Err.Raise 10001, "AppendRecords", "Field names are not matching."
        End If
    Next

    For Iterator = 0 To FieldCount
        If NewRecords.Fields(Iterator).Type <> OriginalRecords.Fields(Iterator).Type Then
            AllFieldsMatch = False
            Err.Raise 10002, "AppendRecords", "Field Types are not matching."
        End If
    Next
    If NewRecords.EOF And NewRecords.BOF Then
        Err.Raise 10003, "AppendRecords", "There are no records in new Recordset."
    End If

    Iterator = 0
    ReDim FieldNames(Iterator To FieldCount - 1)
    ReDim FieldValues(Iterator To FieldCount - 1)

    For Each ActiveField In NewRecords.Fields
        FieldNames(Iterator) = ActiveField.Name
    Next

    While Not NewRecords.EOF
        For Each ActiveField In NewRecords.Fields
            FieldNames(Iterator) = ActiveField.Value
        Next

        OriginalRecords.AddNew FieldNames, FieldValues

        NewRecords.MoveNext
        'LogCompletedJob "GetCoverageTable"  'Ignore for now
    Wend
End Sub
vba oracle11g ado access adodb
1个回答
0
投票

我之前已经完成过将ADO字段数据类型与DAO字段数据类型进行映射的操作。但是,我尚未使用Oracle完成此操作。该链接可能有帮助:

https://docs.oracle.com/cd/B19306_01/server.102/b14232/apb.htm

或此:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/oracle-data-type-mappings

您可以在不检查数据类型的情况下尝试更新字段值。添加错误处理以捕获明显的失败,然后比较两个字段值的内容以查看数据是否通过了。

即删除此:

For Iterator = 0 To FieldCount
    If NewRecords.Fields(Iterator).Type <> OriginalRecords.Fields(Iterator).Type Then
        AllFieldsMatch = False
        Err.Raise 10002, "AppendRecords", "Field Types are not matching."
    End If
Next

并将错误处理/检查添加到代码的这一部分:

For Each ActiveField In NewRecords.Fields
    FieldNames(Iterator) = ActiveField.Value
Next
© www.soinside.com 2019 - 2024. All rights reserved.