Заполнить таблицу доступа из листа Excel - PullRequest
1 голос
/ 18 мая 2011

Я нашел в сети некоторый код, который экспортирует мои данные Excel в таблицу Access. Проблема в том, что он правильно создает заголовки, но не заполняет данные вообще. Как сказать Excel, чтобы они просматривали данные и экспортировали эти поля?

Вот код:

Sub Z_CreateTable()

'If this subroutine throws errors, remember to go to:
'Tools > References and select 'Microsoft ActiveX Data Objects #.# Library'

Dim dbConnectStr As String
Dim Catalog As Object
Dim cnt As ADODB.Connection
Dim dbPath As String
Dim strSQL As String
Dim rngDB As Range
Dim wbPath As String
Dim stSQL As String
Dim strTable As Object

'Set database name here
dbPath = "T:\Projects\testdata1.mdb"
dbConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";"

'Create new database
Set Catalog = CreateObject("ADOX.Catalog")
Catalog.Create dbConnectStr

'Connect to database and insert a new table
Set cnt = New ADODB.Connection
cnt.CursorLocation = adUseServer
With cnt
   .Open dbConnectStr
   .Execute "CREATE TABLE tblSample ([FIELD1] text(50) WITH Compression, " & _
             "[NAME] text(150) WITH Compression, " & _
             "[BLANK] text(10) WITH Compression, " & _
             "[CLASSID] text(10) WITH Compression, " & _
             "[TYPE] text(5) WITH Compression, " & _
             "[FIELD2] text(5) WITH Compression, " & _
             "[FIELD3] text(5) WITH Compression, " & _
             "[FIELD4] text(15) WITH Compression, " & _
             "[START YEAR] text(15) WITH Compression, " & _
             "[END YEAR] text(10) WITH Compression)"

End With
Set cnt = Nothing

End Sub

Ответы [ 3 ]

2 голосов
/ 18 мая 2011

См .: asp и ms-access db - как импортировать данные из файла xls Вы можете обновить из Excel, используя довольно стандартный SQL, без предварительного создания таблицы и без итераций по строкам, что очень медленно.

0 голосов
/ 18 мая 2011

Это правда, что этот код будет только создавать таблицу. Чтобы вставить записи, вам необходимо выполнить Execute, который использует «INSERT INTO tblSample», а затем каждую строку Excel.

Я не знаю, как это сделать в VBA, но я мог бы сделать это в VB, используя оператор For Each row In {table}.Rows...Next, поэтому, возможно, синтаксис Googling For Each в VBA поможет вам. Или, может быть, кто-то здесь может дать вам хороший пример.

EDIT: Нечто близкое к этому может сработать

For i = startRow to endRow
     cnt.Execute "INSERT INTO tblSample VALUES (" & _
                  Cells(i, 1).Value & "," & Cells(i, 2).Value & _
         --And so on
         & ")"
Next i

Вы должны установить значения для начальной и конечной строк. Этот цикл будет проходить через каждую строку в вашем диапазоне и вставлять значение ячейки в этой строке в указанное вами поле. Вам нужно будет сделать порядок таким же, как столбцы в вашей таблице, так что, возможно, у вас сначала будет Cells(i, 2).Value, например.

Попробуйте выполнить его сразу после блока With, до Set cnt = Nothing.

РЕДАКТИРОВАТЬ: Использование SELECT INTO

.Execute "SELECT * INTO tblSample FROM "[{Your version of Excel};
          DATABASE={Your Excel spreadsheet}].[{Your sheet name}]"

Замена существующего блока .Execute.

0 голосов
/ 18 мая 2011

Вы пробовали импортировать из базы данных Access?Сначала вы можете создать свою собственную таблицу, что даст вам больше контроля над типами данных и индексами поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...