![]() |
|
![]() ![]() ![]() |
|
ADAM83 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Здравствуйте! У меня такой вопрос: есть 2 БД в Access, кот. содержит по одному таблицу (поля таблицы 1 БД: id, Name1) (поля таблицы 2 БД: id, Name2), здесь БД не пустые!
Теперь, как можно программным путем сравнить эти 2 БД, точнее структуру этих баз, и к первой БД добавить новые поля с данными из второй БД (примерно так: id, Name1, Name2), так чтоб данные первой БД не стерлись после модификации? Спасибо заранее! |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Прежде всего надо определиться с источником и преемником в базах данных. Далее можно проверять содержимое полей, например, в цикле, сравнивая содержимое источника с преемником.
А источник не сотрется никак, если вы трогать его не будете ![]() |
|||
|
||||
ADAM83 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Keeper89,
хорошо, я понял что данные сами по себе не сотрутся! ![]()
как теперь организовать сравнение полей между БД? |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 4 Всего: 146 |
запросом видать можно сравнить (точнее найти отличия и показать одинаковый) только индексы заюзать для быстроты работы +добавление полей юзать alter )) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
flomaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 28.12.2007 Где: СПб Репутация: нет Всего: нет |
Если требуется получить две одинаковые таблицы, то зачем сравнивать?
Удалить неполную таблицу, и вставить целиком полную. Это же не Оракл и млрд записей. Если уперлось искать отсутствующие поля: Отправляем одинаковый запрос к обеим базам DataSet1.CommandText:="Select * From Table"; //К первой БД DataSet2.CommandText:="Select * From Table"; //Ко второй БД ...Open; Дальше просматриваем список полей, сравниваем названия. И находим отсутствующие. Если шла речь о сравнении в цикле значений полей - это глупость. |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 1 Всего: 58 |
Найти недостающие поля во второй гораздо вычитанием (1 запросом) , как сказал Romikgy, и добавлением к преемнику недостающих данных, а не удалением ВСЕЙ таблицы и вставки новой. И не в миллиарде записей дело. |
|||
|
||||
ADAM83 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
![]() в переменную (массив) структурного типа сливаю всю инфу с первой таблицы, далее заменяю первую таблицу со второй, и в новую таблицу обратно заливаю инфу с массива. При этом у меня вторая таблица уже пустая.
![]() Наверно мой вопрос некорректно звучал, мне нужно было изменить структуру первой БД на основании структурой второй БД (как бы слить в одну).
С этим моя проблема решена. Спасибо всем кто откликнулся! |
||||
|
|||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
ADAM83, зачем там какие-то временные файлы?
![]() Это сообщение отредактировал(а) Данкинг - 16.6.2009, 15:49 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
flomaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 28.12.2007 Где: СПб Репутация: нет Всего: нет |
Данкинг, перебор полей и присвоение значений в цикле - ошибка. Используйте запрос на добавление или обновление. TADOCommand. TADOTable - зло. Используйте TADODataSet. Это сообщение отредактировал(а) flomaster - 16.6.2009, 22:47 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
В чём ошибка, не понял? При чём тут присвоение значений? Я про то, что надо перебрать имеющиеся поля одной таблицы на предмет наличия/отсутствия в другой таблице. Совершенно солидарен: без запроса на добавление добавить новое поле никак не получится. ![]() Не знаю, не замечал. Хотя чаще юзаю AdoQuery. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
flomaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 28.12.2007 Где: СПб Репутация: нет Всего: нет |
Данкинг, промашка с адресом "вышла".
да... вкурил, что там в цикле, озадачился еще больше. Отказался от использования и Table, и Query в пользу Dataset (заменяет их обоих). Это сообщение отредактировал(а) flomaster - 16.6.2009, 23:17 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |