Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 22:11   #1
TranzitZP
Пользователь
 
Регистрация: 06.11.2010
Сообщений: 19
По умолчанию Обновление таблицы Access путем импорта данных из DBF

Здравствуйте. Нужна Ваша помощь, так как поиски информации по сети интернет положительного результата не дали.

Есть у меня файл Access, в котором я периодически обновляю существующие в ней таблицы с данными.
Источники этих данных для обновления я получаю в файлах DBF:
- на каждую имеющуюся таблицу отдельный файл dbf;
- имена полей каждой базы DBF и соответствующей ей таблицы идентичны и неизменны.

Обычный импорт через меню или командой:
Код:
DoCmd.TransferDatabase acImport, "dBase IV", "c:\", acTable, "BAZ.dbf", "BAZ"
приводят к одному результату: имеющаяся таблица BAZ не обновляется, а создается новая таблица BAZ1. В итоге нужно удалять вначале BAZ, а потом после импорта вместо неё будет создана более свежая таблица.
Такой результат не устраивает, так как все таблицы имеют много связей и полное удаление существующей таблицы и замена её новой приведет к потере связей.

Таким образом, ищу помощи в написании в VB команд, при которых при нажатии кнопки на форме производилось удаление данных (строк) в существующей таблице и внесение новых строк с файла BDF.

Для примера вылаживаю часть своей базы и файл DBF, который нужно импортировать.
Заранее спасибо...
Вложения
Тип файла: rar ImportBDF.rar (466.1 Кб, 46 просмотров)
TranzitZP вне форума Ответить с цитированием
Старый 10.04.2011, 22:32   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от TranzitZP Посмотреть сообщение
Здравствуйте. Нужна Ваша помощь, так как поиски информации по сети интернет положительного результата не дали.

Есть у меня файл Access, в котором я периодически обновляю существующие в ней таблицы с данными.
Источники этих данных для обновления я получаю в файлах DBF:
- на каждую имеющуюся таблицу отдельный файл dbf;
- имена полей каждой базы DBF и соответствующей ей таблицы идентичны и неизменны.

Обычный импорт через меню или командой:
Код:
DoCmd.TransferDatabase acImport, "dBase IV", "c:\", acTable, "BAZ.dbf", "BAZ"
приводят к одному результату: имеющаяся таблица BAZ не обновляется, а создается новая таблица BAZ1. В итоге нужно удалять вначале BAZ, а потом после импорта вместо неё будет создана более свежая таблица.
Такой результат не устраивает, так как все таблицы имеют много связей и полное удаление существующей таблицы и замена её новой приведет к потере связей.

Таким образом, ищу помощи в написании в VB команд, при которых при нажатии кнопки на форме производилось удаление данных (строк) в существующей таблице и внесение новых строк с файла BDF.

Для примера вылаживаю часть своей базы и файл DBF, который нужно импортировать.
Заранее спасибо...

Я предлагаю сделать связанную таблицу, и тогда будет достаточно просто заменить файл и создавать ничего не придется, ну в крайнем случае обновить данные.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 10.04.2011, 22:41   #3
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
Восклицание

прилинковать можно так

Код:
DoCmd.TransferDatabase acLink, "dBase IV", "c:\", acTable, "BAZ.dbf", "BAZ"
но один раз

при замене DBF таблица BAZ должна быть закрыта
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 10.04.2011, 23:12   #4
TranzitZP
Пользователь
 
Регистрация: 06.11.2010
Сообщений: 19
По умолчанию

В этом то и проблема, что данные вех файлов BDF должны быть импортированы в файл Access, так как в дальнейшем этот файл мною распространяется другим пользователям на десятки разных компов.

Передавать файл Access с DBF не практично. Причем нужно, чтоб пользователи размещали DBF в прописанное место на диске.
Кроме того, базы имеют сотни тысяч строк и обработка внешних DBF происходит намного медленее, чем эти записи находятся в самом Access.

Пока что, я долгое время выходил их ситуации таким образом:
- импортровал базы в Access в таблицы с новыми именами;
- копировал все строки с новых таблиц в старые (большой недостаток, что буфер обмена ограничивается 65000 строками, из-за чего одну таблицу нужно копировать кусками).
*********************************** ***************
Если нельзя импортировать DBF в существующую таблицу, то можно ли какой-то командой скопировать строки одной таблицы (к примеру из новой BAZ1) в страрую - BAZ (имена колонок всех идентичны)?

Последний раз редактировалось TranzitZP; 10.04.2011 в 23:15.
TranzitZP вне форума Ответить с цитированием
Старый 10.04.2011, 23:33   #5
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от TranzitZP Посмотреть сообщение
В этом то и проблема, что данные вех файлов BDF должны быть импортированы в файл Access, так как в дальнейшем этот файл мною распространяется другим пользователям на десятки разных компов.

Передавать файл Access с DBF не практично. Причем нужно, чтоб пользователи размещали DBF в прописанное место на диске.
Кроме того, базы имеют сотни тысяч строк и обработка внешних DBF происходит намного медленее, чем эти записи находятся в самом Access.

Пока что, я долгое время выходил их ситуации таким образом:
- импортровал базы в Access в таблицы с новыми именами;
- копировал все строки с новых таблиц в старые (большой недостаток, что буфер обмена ограничивается 65000 строками, из-за чего одну таблицу нужно копировать кусками).
*********************************** ***************
Если нельзя импортировать DBF в существующую таблицу, то можно ли какой-то командой скопировать строки одной таблицы (к примеру из новой BAZ1) в страрую - BAZ (имена колонок всех идентичны)?

тогда линкуйте DBF BAZ1, и делайте запрос на создание BAZ

Код:
SELECT BAZ1.* INTO BAZ
FROM BAZ1;
будут и овцы целы и волки сыты
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 10.04.2011, 23:50   #6
TranzitZP
Пользователь
 
Регистрация: 06.11.2010
Сообщений: 19
По умолчанию

Не фартит мне. Также думал, что этим запросом можно решить проблему, однако не тут та было
В ходе выполнения запроса автоматически должна удалиться BAZ и вместо неё создастся новая BAZ с данными BAZ1, но связи BAZ с другими таблицами мешают.
Изображения
Тип файла: jpg Новый-2.jpg (51.8 Кб, 98 просмотров)
TranzitZP вне форума Ответить с цитированием
Старый 10.04.2011, 23:53   #7
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

правильнее так когда таблица прилинкована

Код:
Private Sub Кнопка_Click()
CurrentDb.Execute ("DELETE BAZ.*FROM BAZ;")
CurrentDb.Execute ("INSERT INTO BAZ SELECT BAZ1.* FROM BAZ1;")
End Sub
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 11.04.2011, 00:01   #8
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
Сообщение

ИТОГОВЫЙ


Код:
Private Sub Кнопка_Click()
DoCmd.TransferDatabase acLink, "dBase IV", "c:\", acTable, "BAZ.dbf", "BAZ1"  
CurrentDb.Execute ("DELETE BAZ.*FROM BAZ;")
CurrentDb.Execute ("INSERT INTO BAZ SELECT BAZ1.* FROM BAZ1;")
DoCmd.DeleteObject acTable, "BAZ1"
End Sub

точно работает
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 11.04.2011, 00:20   #9
TranzitZP
Пользователь
 
Регистрация: 06.11.2010
Сообщений: 19
По умолчанию

Вы -Шаман. Приклоняюсь. Работает четко и красиво.
Не ожидал . Огромнейшее спасибо.
А то я уже начал экспериментировать с конвертацией DBF в TXT и дальнейшим импортом в существующую таблицу (грубо, но практично).

Личного кошелька нет, попытаюсь через уличный терминал закинуть тебе на счет деньжат - поэкспериментирую наши украинские гривны конвертануть на рублики.

Еще раз спасибо.
TranzitZP вне форума Ответить с цитированием
Старый 11.04.2011, 00:26   #10
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от TranzitZP Посмотреть сообщение
Вы -Шаман. Приклоняюсь. Работает четко и красиво.
Не ожидал . Огромнейшее спасибо.
А то я уже начал экспериментировать с конвертацией DBF в TXT и дальнейшим импортом в существующую таблицу (грубо, но практично).

Личного кошелька нет, попытаюсь через уличный терминал закинуть тебе на счет деньжат - поэкспериментирую наши украинские гривны конвертануть на рублики.

Еще раз спасибо.
обращайтесь если что skype в подписи, рад был помочь
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на обновление таблицы в Access serge32 Microsoft Office Access 4 06.04.2011 07:44
Оптимизация импорта из DBF Marina Andreeva БД в Delphi 5 15.05.2009 19:09
Испарвление Записаного макроса импорта с DBF komar73 Microsoft Office Excel 8 24.03.2009 14:06
Создание билетов путем импорта из таблицы mistx Microsoft Office Excel 2 25.02.2009 09:02
импорт таблицы *.dbf в ms access через ADO ADO БД в Delphi 6 17.11.2008 15:01