Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Сравнение полей в таблицах БД Access и добав. нов. |
Автор: ADAM83 15.6.2009, 15:03 |
Здравствуйте! У меня такой вопрос: есть 2 БД в Access, кот. содержит по одному таблицу (поля таблицы 1 БД: id, Name1) (поля таблицы 2 БД: id, Name2), здесь БД не пустые! Теперь, как можно программным путем сравнить эти 2 БД, точнее структуру этих баз, и к первой БД добавить новые поля с данными из второй БД (примерно так: id, Name1, Name2), так чтоб данные первой БД не стерлись после модификации? Спасибо заранее! |
Автор: Keeper89 15.6.2009, 15:19 |
Прежде всего надо определиться с источником и преемником в базах данных. Далее можно проверять содержимое полей, например, в цикле, сравнивая содержимое источника с преемником. А источник не сотрется никак, если вы трогать его не будете ![]() |
Автор: ADAM83 15.6.2009, 15:24 | ||||
Keeper89,
хорошо, я понял что данные сами по себе не сотрутся! ![]()
как теперь организовать сравнение полей между БД? |
Автор: Romikgy 15.6.2009, 16:19 |
запросом видать можно сравнить (точнее найти отличия и показать одинаковый) только индексы заюзать для быстроты работы +добавление полей юзать alter )) |
Автор: flomaster 16.6.2009, 00:58 |
Если требуется получить две одинаковые таблицы, то зачем сравнивать? Удалить неполную таблицу, и вставить целиком полную. Это же не Оракл и млрд записей. Если уперлось искать отсутствующие поля: Отправляем одинаковый запрос к обеим базам DataSet1.CommandText:="Select * From Table"; //К первой БД DataSet2.CommandText:="Select * From Table"; //Ко второй БД ...Open; Дальше просматриваем список полей, сравниваем названия. И находим отсутствующие. Если шла речь о сравнении в цикле значений полей - это глупость. |
Автор: Keeper89 16.6.2009, 01:14 |
Найти недостающие поля во второй гораздо вычитанием (1 запросом) , как сказал Romikgy, и добавлением к преемнику недостающих данных, а не удалением ВСЕЙ таблицы и вставки новой. И не в миллиарде записей дело. |
Автор: ADAM83 16.6.2009, 13:31 | ||||
![]() в переменную (массив) структурного типа сливаю всю инфу с первой таблицы, далее заменяю первую таблицу со второй, и в новую таблицу обратно заливаю инфу с массива. При этом у меня вторая таблица уже пустая.
![]() Наверно мой вопрос некорректно звучал, мне нужно было изменить структуру первой БД на основании структурой второй БД (как бы слить в одну).
С этим моя проблема решена. Спасибо всем кто откликнулся! |
Автор: Данкинг 16.6.2009, 15:48 |
ADAM83, зачем там какие-то временные файлы? ![]() |
Автор: Данкинг 16.6.2009, 22:54 |
В чём ошибка, не понял? При чём тут присвоение значений? Я про то, что надо перебрать имеющиеся поля одной таблицы на предмет наличия/отсутствия в другой таблице. Совершенно солидарен: без запроса на добавление добавить новое поле никак не получится. ![]() Не знаю, не замечал. Хотя чаще юзаю AdoQuery. |
Автор: flomaster 16.6.2009, 23:15 |
Данкинг, промашка с адресом "вышла". да... вкурил, что там в цикле, озадачился еще больше. Отказался от использования и Table, и Query в пользу Dataset (заменяет их обоих). |