Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 12.03.2011, 12:40   #1
TSla
Новичок
Джуниор
 
Регистрация: 12.03.2011
Сообщений: 2
По умолчанию Перенос данных из Excel в Access: Automation error

Доброго времени, Уважаемые!
Помогите решить следующую проблему:
Есть два файла: загрузчик (excel) и база данных (access). В Excel написан код (VBA) для передачи данных в Access. Задача кода – из файла xls копировать его содержимое в access при этом выполняется проверка – если в access уже есть такие данные, то они сначала удаляются, а потом перезаписываются новыми значениями. Код рабочий – проверял на работе )).
Проблема:
При переносе файлов на другие компьютеры с разными установленными Windows (XP, 7 и MS Office 2003 и 2010 – все лицензия) код не работает – выдается ошибка (бывают ее вариации):
Run-time error "-2147467259 (80004005)
Automation error
Unspecified error"

Методом имперического тыка установлено, что ошибка возникает при исполнении строки добавления данных в базу. Код следующий:
Sub load()

Dim x As Integer, i As Integer, dd As Date, str As String
Dim cn As New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=C:\ db.mdb"
cn.Open

With Sheets("Data")
For x = 2 To ActiveSheet.UsedRange.Rows.Count
For i = 6 To ActiveSheet.UsedRange.Columns.Count + 1
dd = .Cells(1, i)
If Not IsNull(.Cells(x, i)) And Len(.Cells(x, i)) > 0 Then

str = "Delete * from tblResult Where Ticker='" & .Cells(x, 2) & "' and ID_Field='" & .Cells(x, 4) & _
"' and ID_Year=" & .Cells(x, 5) & " and format(DateI,'dd/mm/yyyy')='" & Format(dd, "mm/mm/yyyy") & "'"
cn.Execute str

str = "Insert Into tblResult(Ticker, Asset, DateI, ID_Field, ID_Year, ValueI ) " & _
" Values ('" & .Cells(x, 2) & "','" & .Cells(x, 3) & "',#" & Format(dd, "dd/mm/yyyy") & _
"#,'" & .Cells(x, 4) & "'," & .Cells(x, 5) & "," & .Cells(x, i) & ")"
cn.Execute str

End If
Next i
Next x
End With
End Sub


Поля excel
ID_TICKER
ID_ASSET
ID_FIELD
ID_YEAR
+ даты

Если есть возможность подсказать решение данной проблемы – буду благодарен. Файлы прилагаю.
Спасибо!
TSla вне форума Ответить с цитированием
Старый 12.03.2011, 13:02   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,904
По умолчанию

Я думаю проблема с датами возникает,встречалось подобное.
Попробуйте такой вариант.

Код:
   Set Rs = New ADODB.Recordset

For
        Ssql = "SELECT tblResult.* FROM tblResult Where Ticker='" & .Cells(X, 2) & "' and ID_Field='" & .Cells(X, 4) & _
"' and ID_Year=" & .Cells(X, 5) & " and format(DateI,'dd/mm/yyyy')='" & Format(DD, "mm/mm/yyyy") & ";"
    Rs.Open Ssql, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic
If Rs.RecordCount = 0 Then
Rs.AddNew
Rs(0) = X
Rs(1) = Y
......
Else
Rs(0) = X
Rs(1) = Y
......
End If
Rs.Update
  Rs.Close
   Next
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 12.03.2011 в 13:06.
doober вне форума Ответить с цитированием
Старый 12.03.2011, 13:13   #3
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,271
По умолчанию

вот это Format(DD, "mm/mm/yyyy") Вас не смущает? там день не надо указать?
41001804815208 - Яндекс-деньги благодарности за удачные советы и решения можно отправлять прямо сюда)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.03.2011, 20:44   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Function DataSql(dt_sql As String)
DataSql = "#" & Replace(Format(CDate(dt_sql), "mm/dd/yyyy hh:nn:ss"), ".", "/") & "#"
End Function

всегда для SQL использую, и ни когда не подводила
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 25.03.2011, 00:34   #5
TSla
Новичок
Джуниор
 
Регистрация: 12.03.2011
Сообщений: 2
По умолчанию

Господа, прошу прощения за длительное отсутствие с ответом .
Проблема действительно заключалась в дате. Но конкретно не в фрагменте
Format(DD, "mm/mm/yyyy"), как справедливо заметил IgorGo (это при переносе кода в форум – я допустил очепятку), а в формате представления дат. Решение оказалось довольно лаконичным – в панели управления после изменения формата представления дат (замена разделителя с точки на слэш).
Логически размышляя - я так подозреваю, что решение данной проблемы на уровне кода было предложено R Dmitry – за что ему отдельное спасибо, но к сожалению, не являясь докой в VBA – я не смог сообразить в каком месте необходимо вызывать его функцию и как (было бы здорово если бы вы могли показать пример).
Аналогично выражаю признательность doober’у за предоставленный код, но я также не смог сообразить в какой участок изначального кода его необходимо ставить.
Надеюсь, что решения данной проблемы, представленные здесь будут полезны для форумчан.
Спасибо Вам большое!
TSla вне форума Ответить с цитированием
Старый 25.03.2011, 01:28   #6
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от TSla Посмотреть сообщение
Господа, прошу прощения за длительное отсутствие с ответом .
Проблема действительно заключалась в дате. Но конкретно не в фрагменте
Format(DD, "mm/mm/yyyy"), как справедливо заметил IgorGo (это при переносе кода в форум – я допустил очепятку), а в формате представления дат. Решение оказалось довольно лаконичным – в панели управления после изменения формата представления дат (замена разделителя с точки на слэш).
Логически размышляя - я так подозреваю, что решение данной проблемы на уровне кода было предложено R Dmitry – за что ему отдельное спасибо, но к сожалению, не являясь докой в VBA – я не смог сообразить в каком месте необходимо вызывать его функцию и как (было бы здорово если бы вы могли показать пример).
Аналогично выражаю признательность doober’у за предоставленный код, но я также не смог сообразить в какой участок изначального кода его необходимо ставить.
Надеюсь, что решения данной проблемы, представленные здесь будут полезны для форумчан.
Спасибо Вам большое!
вставьте функцию в отдельный модуль,

и используйте в коде примерно так
Код:
str = "Delete * from tblResult Where Ticker='" & .Cells(x, 2) & "' and ID_Field='" & .Cells(x, 4) & _
"' and ID_Year=" & .Cells(x, 5) & " and " & DataSql(DateI) & "= " & DataSql(dd) & "'"

только не зная типов данных на 100 % не уверен
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
Периодическая ошибка Run-time error -2147417848 (80010108) Automation error в файле с макросом faraviper Microsoft Office Excel 0 24.02.2011 17:23
ошибка при старте макроса "Automation error (Error 440)" Дятел Microsoft Office Excel 7 29.11.2010 18:34
перенос данных из stringgrid в Access 13Angel БД в Delphi 4 26.08.2009 11:11
перенос данных из Access в MS SQL Server2000 ГОСЕАН БД в Delphi 5 28.12.2007 13:31