![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка записей, есть вопрос
Tornado © (2005-02-07 10:03:00)задача такая: нужно вставить в таблицу А данные из других таблиц (другой БД), но в таблице А имеется поле для связи с другими таблицами, допустим поле "ID". Я составил такой запрос:
SQL.Add('INSERT INTO tbl_Main (Dlina_uch, Kabel, Us_uchastok)');
SQL.Add('SELECT tbl_Frames.FrameLength AS Dlina_uch, tbl_Frames.TypeName AS Kabel, tbl_CableParams.CableName AS Us_uchastok');
SQL.Add('FROM tbl_Frames, tbl_CableParams IN "D:\IRKPRO.mdb" WHERE tbl_Frames.CableName = tbl_CableParams.CableName');
хотелось бы еще в таблицу tbl_Main вставить в поле "ID" определенный номер, допустим "10". Спасибо
msguns (2005-02-07 11:55:00) [1]Если надо "слить" однотипные данные из разных БД, имеющих иерархическую структуру информации (основые и подчиненные элементы), то, ИМХО, не обойтись без таблиц перекодировки ID.
Дело в том, что ID мастер-таблиц в БД независимы друг от друга и, ессно, могут повторяться. Чтобы избежать конфликтов, надо в "Репликационной БД" (промежуточной) создать спец.таблицу переидентификации, где помимо ID (автоинкремент) надо еще предусмотреть поле OLDID. В эту таблицу сначала загоняются все записи мастер-таблиц основной и добавочной БД, в результате чего получаем сквозной ID. Далее с помощью простых запросов "перегоняем" деталы, связывая с мастер-записями по OLDID, и в качестве нового связующего поля берем значение нового ID.
Но это в простом случае, если в БД нет логически дублированных объектов. Если есть, то алгоритм репликации существенно усложняется. В частности, надо определить логические ключи объектов и "шаманить" с ними.
Tornado (2005-02-07 11:38:00) [2]у меня во вторую таблицу данные заносятся из другой БД, как и в первом посте, "залитая первая" - это уже в моей БД, (хотя по началу в нее тоже заливаются данные из бд irkpro.mdb), а "незалитая вторая" - из другой бд (irkpro.mdb), как выудить необходимые данные из irkpro.mdb да потом заполнить поле id во втрой целевой таблице значениями соответствующими id таблицы "залитой первой (destination)" :))
Johnmen (2005-02-07 11:19:00) [3]Для заливки во вторую целевую (destination) тбл делаешь селект из двух таблиц:
1 - залитая первая (destination), 2 - незалитая вторая (source).
Tornado (2005-02-07 11:06:00) [4]>> Потом переливаешь во вторую, соединяя первую с той, из которой заливаем.
если чесно то не очень понял, в первую слили данные, а дальше во втроую как? чтобы для записи в первой таблице ID был такой же во второй таблице, там же несколько записей с таким ID должны быть....блин запутался я чего то :)
Johnmen (2005-02-07 10:54:00) [5]Сначала переливаешь в первую таблицу. (справочник)
Потом переливаешь во вторую, соединяя первую с той, из которой заливаем.
Tornado (2005-02-07 10:45:00) [6]спасибо, только теперь другой вопрос :)
в главную таблицу можно вставить записи просто так если в этой таблице поле ID автоикрементное то оно заполняется само, но есть другая таблица в которую также вставляются записи из других таблиц, данные в таблицах идентичны, т.е.:
Таблица А (с автоинкрементом ID)
ID FieldA FieldB
1 ddd ttt
2 www rrr
3 ссс иии
4 yyy uuu
Таблица В (вот в нее надо занести теже значения поля ID что и в таблице А):
ID FieldA FieldB
1 ddd ttt
1 ddd ttt
2 www rrr
2 www rrr
3 ccc иии
3 ссс иии
4 yyy uuu
4 yyy uuu
т.е. эти две талицы А и В должны быть соеденины по принципу "один-ко-многим"
4
Johnmen (2005-02-07 10:17:00) [7]
INSERT INTO tbl_Main (ID, Dlina_uch, Kabel, Us_uchastok)
SELECT 10, tbl_Frames.FrameLength, ...
...