【发布时间】:2017-03-27 22:43:33
【问题描述】:
我正在编写一个将recordset(来自ADODB 库)的内容复制到另一个的函数。特意将Oracle g11的部分内容(其中的片段)复制到Access 2007。
因为我想确保我写的是所有内容或根本不写 - 我正在检查每个 recordset 的 Fields 是否相同(具有相同的 Name 和 Type)。
问题是我很快就偶然发现了一个案例,一个记录集的字段类型为adVarChar,而另一个记录集的字段类型为adVarWChar。老实说,我不确定这些数据类型有何不同,但据我所知,它们都表示可变长度字符字段,如果我错了,请纠正我,但我应该能够将 adVarChar 的内容写入 adVarWChar .
现在我明白了ADODB 可以识别的字符串类型还有很多,而且整数、双精度、浮点数的类型也很多......你明白了。
所以我的问题是如何检测您是否可以将一种数据类型(ADODB 的数据类型)的内容写入/强制/转换为另一种?
有没有一种持续且干燥的方法来做到这一点?
查看我的代码以供参考
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 ms-access oracle11g ado adodb