Я работаю над проектом, в котором у компании все еще есть все в лотосных заметках, и мы начинаем переделывать систему, чтобы они больше не работали на Lotus.
Сейчас я просто пытаюсь импортировать таблицы Lotus в базу данных MS Access, но получаю сообщение об ошибке «Числовое переполнение». Кто-нибудь знает, как с этим справиться?
Таблица содержит 196 столбцов и 846 строк. В настоящее время я назвал диапазон в таблице лотоса. Однако в идеале мы могли бы просто назвать диапазон, который мы хотим импортировать, так:
"SELECT * INTO PRNTDATM FROM [a:a1..a:a8100]"
Полная ошибка:
Ошибка времени выполнения '-2147467259 (800004005)' Переполнение числового поля
Private Sub Command0_Click()
Dim CombLoop As Integer
Dim LotusCn As Object
Dim rsLotus As Object
Dim strSql, CombFileName, GotoRange As String
Set LotusCn = CreateObject("ADODB.Connection")
Set rsLotus = CreateObject("ADODB.Recordset")
LotusCn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= K:\GEVS04\NUMBDATM.WK3; Extended Properties=Lotus WK3;"
strSql = "Select * INTO PRNTDATM FROM phil"
rsLotus.Open strSql, LotusCn
LotusCn.Close
Set rsLotus = Nothing
Set LotusCn = Nothing
End Sub
С этого поста я работал над ним и получил некоторые улучшения, теперь я могу читать и импортировать некоторые тестовые данные в таблицы. Найденное добавление работало лучше, чем импорт всей новой таблицы, поэтому придется попробовать этот маршрут. Это, похоже, решило проблему переполнения, потому что теперь у меня уже есть сама структура таблицы, поскольку существует только около 5 структур таблиц, которые должны нормально работать для этого кода.
Код теперь:
Dim CombLoop As Integer
Dim LotusCn As Object
Dim rsLotus As Object
Dim strSql As String
Dim rs As DAO.Recordset
Set LotusCn = CreateObject("ADODB.Connection")
Set rsLotus = CreateObject("ADODB.Recordset")
LotusCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Users\germany5.PLIMSOLL\Desktop\TEST.WK4;" & _
"Extended Properties=Lotus WK4;"
strSql = "SELECT * FROM [a1..C3];"
rsLotus.Open strSql, LotusCn
Set rs = CurrentDb.OpenRecordset("Select * From NICHDATMGECO20;")
If Not (rsLotus.EOF And rsLotus.BOF) Then
FindRecordCount = rsLotus.RecordCount
rsLotus.MoveFirst
Do Until rsLotus.EOF = True
Field1 = rsLotus![Reg. Number]
Field3 = rsLotus![Sales / Tot.Assets]
Field2 = rsLotus![Company Name]
rs.AddNew
rs![Reg. Number] = Field1
rs![Company Name] = Field2
rs.Update
rsLotus.MoveNext
Loop
End If
LotusCn.Close
Set rsLotus = Nothing
Set LotusCn = Nothing
rs.Close
Просто чтобы сообщить вам, что проблема была решена, и выше - это конечный результат кода, который прекрасно работает для меня. Мне нужно было ссылаться на Lotus 123 в Инструментах на тот случай, если кто-то захочет повторить то, что я сделал здесь.