Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Импорт нескольких полей в БД одним INSERTом / 11 сообщений из 11, страница 1 из 1
28.10.2015, 14:46
    #39088976
Askush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Привет, камрады!

Задача закинуть диапазон EXCEL в существующую БД. Перебирать построчно нудно и непроизводительно, по этому хочется сделать одним INSERTом. Однако вот такой SQL запрос приводит к ошибке. Подскажите, пожалуйста, что не так.

Код: plsql
1.
2.
3.
INSERT INTO Operation(FIO)
SELECT * 
FROM [Excel 12.0 xml;HDR=Yes;IMEX=1;DATABASE=C:\myWorkbook.xlsx].[Лист1$C2:C500];
...
Рейтинг: 0 / 0
28.10.2015, 14:50
    #39088987
Alozar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Что за ошибка?
Если в селекте не звёздочка, работает?
...
Рейтинг: 0 / 0
28.10.2015, 14:52
    #39088988
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Askushтакой SQL запрос приводит к ошибке
Обычно ошибка имеет вменяемое описание ака текст ошибки. В данном случае - вероятно, сообщение о несовпадении количества полей.
...
Рейтинг: 0 / 0
28.10.2015, 14:54
    #39088993
Alozar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Кстати, имя таблицы заключи в квадратные скобки, иначе работать точно не будет.
Возможно будет необходимо перечислить поля таблицы, куда данные заносишь.
...
Рейтинг: 0 / 0
28.10.2015, 15:07
    #39089014
Askush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Привожу код VBA и скрин ошибки
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Function AddToTabFromQuery1() As Boolean

Dim SQLAdd As String
Dim rs As New ADODB.Recordset

On Error GoTo FunctionError

If Not (DBConn) Then Exit Function


SQLAdd = "INSERT INTO Operation(FIO) SELECT * FROM [Excel 12.0 xml;HDR=Yes;IMEX=1;DATABASE=C:\myWorkbook.xlsx].[Лист1$C2:C500];"

rs.Open SQLAdd, conn

Set rs = Nothing
AddToTabFromQuery1 = True
Exit Function

FunctionError:
MsgBox "Ошибка"
Debug.Print SQLAdd
AddToTabFromQuery1 = False
            
End Function
...
Рейтинг: 0 / 0
28.10.2015, 15:13
    #39089022
Askush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Alozar, если убрать звёздочку то возникает ошибка синтаксиса.
...
Рейтинг: 0 / 0
28.10.2015, 15:52
    #39089057
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Askushесли убрать звёздочку то возникает ошибка синтаксиса.
Не убрать, а заменить на точное имя поля, которое выбирается из исходной таблицы.
...
Рейтинг: 0 / 0
28.10.2015, 16:12
    #39089071
Askush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Akina, премного благодарен! Заработало. Итого, вот такой код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Function AddToTabFromQuery1() As Boolean

Dim SQLAdd As String
Dim rs As New ADODB.Recordset

On Error GoTo FunctionError

If Not (DBConn) Then Exit Function


SQLAdd = "INSERT INTO Operation(FIO) SELECT [имя_поля] FROM [Excel 12.0 xml;HDR=Yes;IMEX=1;DATABASE=C:\myWorkbook.xlsx].[Лист1$C2:C500];"

rs.Open SQLAdd, conn

Set rs = Nothing
AddToTabFromQuery1 = True
Exit Function

FunctionError:
MsgBox "Ошибка"
Debug.Print SQLAdd
AddToTabFromQuery1 = False
            
End Function
...
Рейтинг: 0 / 0
28.10.2015, 17:20
    #39089153
Импорт нескольких полей в БД одним INSERTом
Askush
Код: vbnet
1.
2.
SQLAdd = "INSERT INTO ..."
rs.Open SQLAdd, conn


Охренеть! Вы открываете Recordset на основе запроса на добавление. И это работает?
И при этом еще и записи в таблицу добавляются?
...
Рейтинг: 0 / 0
29.10.2015, 01:06
    #39089439
Askush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт нескольких полей в БД одним INSERTом
Анатолий ( Киев ), таки да, добавляются. Поделитесь, пожалуйста, что вас смущает.
...
Рейтинг: 0 / 0
29.10.2015, 11:39
    #39089794
Импорт нескольких полей в БД одним INSERTом
Askushтаки да, добавляются. Поделитесь, пожалуйста, что вас смущает.
Запросы на изменение обычно выполняются методом Execute. В вашем случае это:
Код: sql
1.
conn.Execute "INSERT INTO..."


То, что добавление выполняется при выполнении rs.Open (и вообще, что Recordset открывается) для меня - откровение.
Видимо это ADODB такой мудрый, с DAO такой финт не прокатил бы.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Импорт нескольких полей в БД одним INSERTом / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]