
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.07.2008, 00:50
|
|||
|---|---|---|---|
|
|||
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
Привет! Задал этот вопрос в форуме по Delphi ( тут ), но не совсем уверен, что там в тему поскольку больно общий вопрос. Модераторы, плиз, удалите лишний, если не прав. Стоит задача загрузить данные из Excel в Access. Делаю так: 1. Создаю соединение к Access 2. Создаю ADOCommand с CommandText := 'INSERT INTO access_table SELECT * FROM ["Excel 8.0;Database=%s;HDR=Yes"].[excel_range]' 3. Радуюсь. Но радость моя не полная! Потому что когда вдруг в поле в Excel вместо числового значения оказывается строковое, то всё это дело откатывается и ничего не загружается. НО! Возьмем к примеру сам Access. И воспользуемся его DoCmd.TransferSpreadsheet. То этот гад загружает всё что есть, с одним только исключением: поля которые не соответствуют типу инициализируются Null-значениями. Спрашивается вопрос: есть ли возможность в свойствах ADOCommand или ADOConnection указать Accessу поступать так же, т.е не вываливаться с ошибкой и не откатывать все, а вставлять Null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2008, 22:24
|
|||
|---|---|---|---|
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
если нужно именно из делфи (так просто в екселе сделал запрос к листу екселе и занес что нужно), то делай построчно, открывай рекордсет на основе листа екселя и вставляй по одной строчке в акс обрабатывая исключения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2008, 10:29
|
|||
|---|---|---|---|
|
|||
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
barrabasто делай построчно заметно проигрывает, если очень большой файл. а второе - эксепшн не говорит в каком месте несоответствие типов, в каком столбце, например. т.е. необходим потом еще дополнительный анализ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2008, 11:12
|
|||
|---|---|---|---|
|
|||
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
Вообще, как вариант решения можно сделать следующее: Открыть 2 соединения: одно в Excel, другое в Access. Читать построчно из Excel-таблицы и присваивать значение по полям отлавливая exception и в нем присваивая Null. Но это значительно дольше :( Может кто знает как убыстрить алгоритм? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2008, 17:30
|
|||
|---|---|---|---|
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
Latent Force barrabasто делай построчно заметно проигрывает, если очень большой файл. а второе - эксепшн не говорит в каком месте несоответствие типов, в каком столбце, например. т.е. необходим потом еще дополнительный анализ. а если просто использовать автоматизацию ? как в делвях не помню но типа этого object app = createobject("Access.Aplication") app.currentbd = "...mdb" - или както так т.е. фактически делать всю работу будет акс (там и используй docmd), и не забудь закрыть app после работы с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2008, 17:44
|
|||
|---|---|---|---|
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
а если попробовать использовать Val и IIF в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2008, 18:28
|
|||
|---|---|---|---|
|
|||
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
С автоматизацией не пробовал еще. Что-то у меня какая-то неприязнь к ним с прошлых времен осталась, когда вроде бы и закрываешь и удаляешь, а процесс висеть остается. barrabasа если попробовать использовать Val и IIF в запросе поля перечислять нужно в запросе тогда. А там таблица на 25-30 полей. Иду по пути наименьшего сопротивления :) договариваюсь, что либо дольше, либо выбрасывать ошибку и пока не исправят не давать загружать. Теоретически правильнее закачивать валидные данные, конечно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2008, 18:10
|
|||
|---|---|---|---|
ADOCommand загрузка Excel spreadsheet в Access |
|||
|
#18+
Latent ForceС автоматизацией не пробовал еще. Что-то у меня какая-то неприязнь к ним с прошлых времен осталась, когда вроде бы и закрываешь и удаляешь, а процесс висеть остается. значит не все объекты связанные с апликейшин закрыл (ну например книгу екселя забыл закрыть, а сам ексель закрываешь). Latent Force barrabasа если попробовать использовать Val и IIF в запросе поля перечислять нужно в запросе тогда. А там таблица на 25-30 полей. Иду по пути наименьшего сопротивления :) договариваюсь, что либо дольше, либо выбрасывать ошибку и пока не исправят не давать загружать. Теоретически правильнее закачивать валидные данные, конечно... ну да, этож один копипаст в селект ну вобщем главное чтоб заказчика устроило ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=16&mobile=1&tid=1345151]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 499ms |

| 0 / 0 |
