|
|
|
| всем доброго времени :)
может кто знает, как импортировать данные с листа экселя в таблицу аксеса на VB ?
именно импорт, а не перебор значений ячеек (записей в экселе > 35 тыщ, так что перебор не годится) | |
|
| |
|
|
|
| А что если ихсначала выгрузить в текстовый файл с разделителем запятая, а затем как обычно приконнектица и ......создать таблицу на основании данных текста....
http://forum.developing.ru/archive/index.php/t-5882.html
=========================================
или вот тоже человек мучался но выход нашёл
http://www.sql.ru/forum/actualthread.aspx?tid=494702 | |
|
| |
|
|
|
| вся хитрость в том, что в самом акесе можно написать макрос, который импортирует данные из экселе в таблицу.
а как известно, что можно сделать кнопочками, то можно оформить и кодом.
проблема, как это сделать в бейсике ? | |
|
| |
|
|
|
| А Access имеется на той машине, где предполагается осуществлять импорт?
Операция импорта разовая, или периодическая? | |
|
| |
|
|
|
| для универсальности, предположим, что:
- операция импорта будет периодической;
- аксеса нет, но сам офис 2003 установлен. | |
|
| |
|
|
|
| Например, в черновом виде так (предполагается, что таблица с соответствующими полями уже существует в mdb):
Sub Export(strXlWorkbookFullName As String, _
strMDBFile As String, _
strTableName As String, _
strXlSheetName As String)
Dim con As Object
Dim strConnectionString As String
Dim strSQL As String
Set con = CreateObject("ADODB.Connection")
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" _
& "Data Source=" & strXlWorkbookFullName
strSQL = "INSERT INTO " & strTableName & " IN '" & strMDBFile & "' SELECT * FROM [" & strXlSheetName & "$]"
con.open strConnectionString
con.execute strSQL
con.Close
Set con = Nothing
End Sub
|
| |
|
| |
|
|
|
| а вот это то, что "доктор прописал" !
премного благодарен !
| |
|
| |
|
|
|
| У меня ругается на con.execute strSQL .
А так работает:
strConnectionString = "Provider=MSDASQL;Driver={Microsoft Excel Driver (*.xls)};" _
& "DBQ=" & strXlWorkbookFullName
|
Правда, я в Aceess пробую. | |
|
| |
|
|
|
| наверное, в аксесе можно просто через Docmd, коннекшн не нужен | |
|
| |
|
|
|
| Ну мы-же договорились, что Access нет. Я просто использую VBA-редактор.
В Word - VBA-редакторе тоже работает. Этакое извращение - процедура в Word перегоняет данные из листа книги Excel в таблицу БД Access. | |
|
| |
|
|
|
| да Вы, батенька, затейник
а DAO-шная библиотека подключена в референсах ? | |
|
| |
|
|
|
| >а DAO-шная библиотека подключена в референсах ?
а зачем? | |
|
| |
|
|
|
| Скорее всего да, и выше Ado-шной, сейчас не могу посмотреть, пробовал дома, в данный момент на даче с ноутбуком, но по идее она не должна мешаться.
В оригинальном варианте, насколько я понимаю, используется драйвер OLEDB, в моем старый ODBC? | |
|
| |
|
|
|
| И тот и другой OLEDB драйвера.
Цитата с Майкрософт:
Поставщик OLE DB для ODBC (MSDASQL) (Майкрософт) — это технология, позволяющая приложениям, построенным на основе технологий OLEDB и ADO (технология ADO внутренне также использует OLEDB), осуществлять доступ к источникам данных через драйвер ODBC. MSDASQL — это поставщик OLEDB, подключающийся к ODBC, а не к базе данных.
А как у вас ругается на con.execute strSql? | |
|
| |
|
|
|
| при "...Excel 8.0..." что то типа "...Не могу найти поле F1..."
при "...Excel 11.0..." что то про "ISAM".
Но точно не помню.
Добавил:
После проверки на ноутбуке:
Run-time error -2147217900
Инструкция INSERT INTO содержит неизвестное имя поля 'F1'.
Проверьте, что имя задано без ошибок, и повторите операцию.
Для 11.0:
Run-time error -2147467259
Невозможно найти устанавливаемый ISAM | |
|
| |
|
|
|
| >при "...Excel 8.0..." что то типа "...Не могу найти поле F1..."
это значит не получилось получить заголовки (HDR=Yes).
Сделайте в Access таблицу с полями F1, F2 и т.д.
Или вместо INSERT INTO попробуйте SELECT INTO
>Невозможно найти устанавливаемый ISAM
http://support.microsoft.com/kb/283881/ru | |
|
| |
|
|
|
| Тяжело быть бестолковым.
Добавил заголовки, все естественно заработало.
Спасибо за разжевывание. | |
|
| |