Переслать данные из Excel в БД

Программирование на Visual Basic for Applications
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Переслать данные из Excel в БД

Сообщение Avtopic » 26.12.2005 (Пн) 20:24

Здравствуйте все!

У кого слабые нервы могут не читать этот вопрос, потому что вопрос может бить очень глупый, из-за незнания предмета!
Искал поиском по форуму. Таких тем очень и очень много. Все перечитал, но ответа на понятном мне языке не нашел, опят же из-за незнания предмета.

Читая найденное выяснил, что можно одним махом переслать данные из БД в Excel:

Sub Examp_Le()
Dim DB As Database, r As Recordset
Set DB = OpenDatabase(ThisWorkbook.Path & "\A.mdb") ‘база лежит рядом
sqlk = "SELECT * FROM [A1] ORDER BY cnum;"
Set r = DB.OpenRecordset(sqlk)
Cells(1, 1).CopyFromRecordset r
r.Close
DB.Close
End Sub
И результат- вся таблица А1 уже на листе. Начиная с ячейки Cells(1, 1)

Вопрос:
Допустим в колонки A,B,C, row с первого по 100 заполнены данными.
Можно или нет, все вместе таким же быстрым способом переслать в БД.

Мне бы на этом этапе как-то запихнуть в БД повседневные отчеты (их очень много и навалились все вместе), а потом когда освобожусь, обещаю выучить, как работать с БД и как их обработать.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2005 (Вт) 8:37

Можно открыть базу данных, прилинковать к ней файл Excel как базу данных (таблицу) и перенести данные запросом.
Пример этого давался в форуме, в поиск по словам LinkTable.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.12.2005 (Вт) 9:32

Просто открыть табличку как Recordset можно примерно так:

Код: Выделить всё
    Set сn = New ADODB.Connection
    cn.CursorLocation = adUseClient
    cn.Mode = adModeRead
    cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=""" & sFile & """;Mode=Read;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""
   
    r.Open "SELECT * FROM [a2:j65536]", cn, adOpenStatic, adLockReadOnly


А вообще все зависит от конкретных условий...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 27.12.2005 (Вт) 14:00

Большое спасибо обоим!
Получилось! По-лу-чи-лось! По--лу--чи--лось!

Может пока код некрасивый, но уладить его уже не проблема:

Sub From_Excel_To_Access()
Dim DB As Database
Dim sqlk As String, Excel_Path As String, Access_Path As String

Access_Path As String ThisWorkbook.Path & "\A.mdb"
Excel_Path = ThisWorkbook.Path & "\" & ActiveWorkbook.Name

Set DB = OpenDatabase(Access_Path)

sqlk = "INSERT INTO D1 SELECT * FROM [Sheet1$] IN '" & Access_Path & "'[Excel 5.0;HDR=YES;IMEX=2];"
DB.Execute sqlk

End Sub

Пока на било времени углубится, но для тех, кто сразу захочет повторить этот код, добавлю:
1. Row1 в Sheet1 воспринимается как названия колонок
2. Базу A и в ней таблицу D1 нужно создать заранее.
3. в D1 количество и имена колонок должны совпадать с именами в Row1 Sheet1. количество колонок не 256, а столько, сколько используется.
И, разумеется, стоит галочка на DAO
Эти три пункта, наверно необязательны и зависят от того, что содержит sqlk.

Если кто не будь научит, где прочитать что такое HDR=YES IMEX=2 буду очень благодарен.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 27.12.2005 (Вт) 14:04

Sorry, в коде четвертая линя должна читаться так:
Access_Path = ThisWorkbook.Path & "\A.mdb"

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.12.2005 (Вт) 14:22

Avtopic писал(а):Если кто не будь научит, где прочитать что такое HDR=YES IMEX=2 буду очень благодарен.


Когда-же мы поиском пользоваться научимся? См., например:

http://www.sql.ru/forum/actualthread.aspx?tid=195120
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 27.12.2005 (Вт) 17:26

Извиняюсь, в праздновании забил про поиск :oops: . Спасибо!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110

    TopList