Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VB

Программирование VB

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: импорт в mdb из excel
 
 автор: Дрюня   (20.05.2009 в 18:32)   личное сообщение
 
 

всем доброго времени :)
может кто знает, как импортировать данные с листа экселя в таблицу аксеса на VB ?
именно импорт, а не перебор значений ячеек (записей в экселе > 35 тыщ, так что перебор не годится)

  Ответить  
 
 автор: час   (20.05.2009 в 20:38)   личное сообщение
 
 

А что если ихсначала выгрузить в текстовый файл с разделителем запятая, а затем как обычно приконнектица и ......создать таблицу на основании данных текста....
http://forum.developing.ru/archive/index.php/t-5882.html

=========================================
или вот тоже человек мучался но выход нашёл
http://www.sql.ru/forum/actualthread.aspx?tid=494702

  Ответить  
 
 автор: Дрюня   (20.05.2009 в 21:44)   личное сообщение
 
 

вся хитрость в том, что в самом акесе можно написать макрос, который импортирует данные из экселе в таблицу.
а как известно, что можно сделать кнопочками, то можно оформить и кодом.
проблема, как это сделать в бейсике ?

  Ответить  
 
 автор: Lukas   (21.05.2009 в 00:20)   личное сообщение
 
 

А Access имеется на той машине, где предполагается осуществлять импорт?
Операция импорта разовая, или периодическая?

  Ответить  
 
 автор: Дрюня   (21.05.2009 в 08:09)   личное сообщение
 
 

для универсальности, предположим, что:
- операция импорта будет периодической;
- аксеса нет, но сам офис 2003 установлен.

  Ответить  
 
 автор: Bellerofont   (21.05.2009 в 11:00)   личное сообщение
 
 

Например, в черновом виде так (предполагается, что таблица с соответствующими полями уже существует в 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

  Ответить  
 
 автор: Дрюня   (21.05.2009 в 11:15)   личное сообщение
 
 

а вот это то, что "доктор прописал" !
премного благодарен !

  Ответить  
 
 автор: Lukas   (21.05.2009 в 11:18)   личное сообщение
 
 

У меня ругается на con.execute strSQL .

А так работает:

    strConnectionString = "Provider=MSDASQL;Driver={Microsoft Excel Driver (*.xls)};" _
                            & "DBQ=" & strXlWorkbookFullName


Правда, я в Aceess пробую.

  Ответить  
 
 автор: Дрюня   (21.05.2009 в 11:47)   личное сообщение
 
 

наверное, в аксесе можно просто через Docmd, коннекшн не нужен

  Ответить  
 
 автор: Lukas   (21.05.2009 в 12:02)   личное сообщение
 
 

Ну мы-же договорились, что Access нет. Я просто использую VBA-редактор.
В Word - VBA-редакторе тоже работает. Этакое извращение - процедура в Word перегоняет данные из листа книги Excel в таблицу БД Access.

  Ответить  
 
 автор: Дрюня   (21.05.2009 в 12:40)   личное сообщение
 
 

да Вы, батенька, затейник
а DAO-шная библиотека подключена в референсах ?

  Ответить  
 
 автор: Bellerofont   (21.05.2009 в 13:14)   личное сообщение
 
 

>а DAO-шная библиотека подключена в референсах ?
а зачем?

  Ответить  
 
 автор: Lukas   (21.05.2009 в 13:35)   личное сообщение
 
 

Скорее всего да, и выше Ado-шной, сейчас не могу посмотреть, пробовал дома, в данный момент на даче с ноутбуком, но по идее она не должна мешаться.
В оригинальном варианте, насколько я понимаю, используется драйвер OLEDB, в моем старый ODBC?

  Ответить  
 
 автор: Bellerofont   (21.05.2009 в 13:56)   личное сообщение
 
 

И тот и другой OLEDB драйвера.
Цитата с Майкрософт:
Поставщик OLE DB для ODBC (MSDASQL) (Майкрософт) — это технология, позволяющая приложениям, построенным на основе технологий OLEDB и ADO (технология ADO внутренне также использует OLEDB), осуществлять доступ к источникам данных через драйвер ODBC. MSDASQL — это поставщик OLEDB, подключающийся к ODBC, а не к базе данных.

А как у вас ругается на con.execute strSql?

  Ответить  
 
 автор: Lukas   (21.05.2009 в 14:07)   личное сообщение
 
 

при "...Excel 8.0..." что то типа "...Не могу найти поле F1..."
при "...Excel 11.0..." что то про "ISAM".
Но точно не помню.

Добавил:
После проверки на ноутбуке:
Run-time error -2147217900
Инструкция INSERT INTO содержит неизвестное имя поля 'F1'.
Проверьте, что имя задано без ошибок, и повторите операцию.

Для 11.0:
Run-time error -2147467259
Невозможно найти устанавливаемый ISAM

  Ответить  
 
 автор: Bellerofont   (21.05.2009 в 14:26)   личное сообщение
 
 

>при "...Excel 8.0..." что то типа "...Не могу найти поле F1..."
это значит не получилось получить заголовки (HDR=Yes).
Сделайте в Access таблицу с полями F1, F2 и т.д.
Или вместо INSERT INTO попробуйте SELECT INTO

>Невозможно найти устанавливаемый ISAM
http://support.microsoft.com/kb/283881/ru

  Ответить  
 
 автор: Lukas   (21.05.2009 в 14:42)   личное сообщение
 
 

Тяжело быть бестолковым.
Добавил заголовки, все естественно заработало.
Спасибо за разжевывание.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList