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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2014, 09:55   #1
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
Восклицание Обновление данных

Доброго времени суток программисты. Нужна ваша помощь, т.к застрял на одном месте в программе из-за плохого знания sql запросов и ADO технологии. Сейчас подробно напишу, что именно я не могу понять:

У меня есть 2 базы данных(идентичные, все имена таблиц и полей совпадают, только название самих БД разное).
Главная БД = ДляОО.accdr (В ней есть заполненные таблицы)
Вторая БД = Главная.mdb (в ней нету никаких данных, таблицы чистые)
Через программу я переношу данные из таблиц,которые находится в БД ДляОО.accdr в БД Главная.mdb.

Но теперь самое главное. Я все данные перенес из ДляОО.accdr в Главная.mdb, но мне скинули другой вариант БД ДляОО.accdr - там несколько значений других(Например средняя зп рабочего и количество рабочих).

Если я перенесу данные снова из одной бд в другую, то в главной у меня будет две строки данных. А мне нужно,чтобы данные,которые я первый раз перенес - обновились.

Многие говорят,что через Update нужно делать запросы и использовать UpdateSQL.

Помогите пожалуйста
HelloExp вне форума Ответить с цитированием
Старый 10.04.2014, 11:50   #2
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Пробуй что то вроде этого
Код:
UPDATE TableA A
    INNER JOIN TableB B
    ON A.ID = B.ID
SET A.Name = B.Name
Konstantin_ua вне форума Ответить с цитированием
Старый 10.04.2014, 12:48   #3
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

Смотри в чем еще может быть проблема, я описал для двух таблиц , на самом деле их может быть много - т.е как тогда идет обновление данных?
HelloExp вне форума Ответить с цитированием
Старый 10.04.2014, 14:52   #4
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от HelloExp Посмотреть сообщение
Смотри в чем еще может быть проблема, я описал для двух таблиц , на самом деле их может быть много - т.е как тогда идет обновление данных?
Тут уже не знаю, не профессионал, может как то так
Код:
 ADOQuery1.SQL.Add(' (UPDATE TableA A
                        +' INNER JOIN TableB B
                        +'  ON A.ID = B.ID
                        +' SET A.Name = B.Name')
                        +' UNION ALL
                        +' (UPDATE TableA A
                        +' INNER JOIN TableC C
                        +'  ON A.ID = C.ID
                        +' SET A.Name = C.Name');
Konstantin_ua вне форума Ответить с цитированием
Старый 11.04.2014, 09:51   #5
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

Блин, неправильно написал в предыдущем посте. У меня не несколько таблиц, а несколько БД
Сейчас приведу пример

Главная.mdb - пока что чистые таблицы.

ДляОО.accdr - имеет несколько таблиц(но это не важно,главное пока что для одной какой-нибудь сделать)
Таблица_0_Ответственный_за_Эссад
Наименование ОО ФИО Телефон email
Асбестовский политехникум Иванов И.И 333-33-33 n@gmail.ru


Данные перенеслись в Главная.mdb - теперь там есть одна запись


Далее удаляем БД из которые уже перенесли данные и переносим вторую Бд с именем ДляОО.accdr в этой бд имеется так же много таблиц(они в каждой БД одинаковые)
Таблица_0_Ответственный_за_Эссад
Наименование ОО ФИО Телефон email
Богдановичский политехникум Петров П.П 444-44-44 g@gmail.ru


Все данные перенеслись, теперь в Главная.mdb в таблице Таблица_0_Ответственный_за_Эссад имеется 2 записи

Наименование ОО ФИО Телефон email
Асбестовский политехникум Иванов И.И 333-33-33 n@gmail.ru
Богдановичский политехникум Петров П.П 444-44-44 g@gmail.ru


Теперь мне прислали измененную БД ДляОО.accdr
Наименование ОО ФИО Телефон email
Асбестовский политехникум Иванов И.В 333-55-66 n@gmail.ru


Вот теперь мне нужно обновить данные именно по этому Образовательному организации. Чтобы получилось в Главная.mdb

Наименование ОО ФИО Телефон email
Асбестовский политехникум Иванов И.В 333-55-66 n@gmail.ru
Богдановичский политехникум Петров П.П 444-44-44 g@gmail.ru


Сейчас у меня программа просто добавит еще одну запись, т.к там только перенос существует пока что.
HelloExp вне форума Ответить с цитированием
Старый 11.04.2014, 09:57   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В таблице должен быть какой-то ключ, однозначно идентифицирующий каждую запись. Если такового нет, то полный швах. Если есть - записи найденные по ключу обновлять UPDATE-ом, не найденные - добавлять INSERT-ом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.04.2014, 10:41   #7
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

Хм...Смотри, в таблице Таблица_0_Ответственный_за_Эссад в поле у меня идет выборка из таблицы Перечень_ОО. Просто может я не понимаю как именно сделать ключ, но добавил новое поле , назвал его Ключ - тип данных счетчик. Т.е для каждоый таблицы нужно делать ключ? Если да, то как делать ключ для поля, где идет выборка?

Последний раз редактировалось HelloExp; 11.04.2014 в 10:45.
HelloExp вне форума Ответить с цитированием
Старый 11.04.2014, 10:54   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ключи должны быть и в таблице-источнике и в таблице-приемнике. И не обязательно это суррогатный ключ. С суррогатным, кстати, в данном случае могут быть проблемы. Идея в чем - по ключу из таблицы-источника ищется запись в таблице-приемнике и выполняются соответствующее действие в зависимости от результата поиска. Ключевое поле не обязательно одно. Примерно так

Код:
UPDATE TableOut INNER JOIN (TableIn  ON TableIn.Key1=TableOut.Key1) 
  SET TableOut.Field1=TableIn.Field1,TableOut.Field2=TableIn.Field2

INSERT INTO TableOut
  SELECT I.* FROM TableIn I WHERE NOT EXISTS(SELECT * FROM TableOut O WHERE O.Key1=I.Key1)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление данных -=Andriushka=- Visual C++ 0 04.11.2013 16:56
Обновление данных в БД. Slavdholl PHP 3 29.04.2011 17:38
Обновление списка данных без потери данных в переменных VaBank БД в Delphi 13 03.06.2009 10:47
обновление данных AnGrig БД в Delphi 3 14.10.2007 13:08
Обновление данных в БД EdNovice БД в Delphi 4 26.06.2007 14:35