WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Стратегический вопрос...

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Стратегический вопрос...
Jimmy опубликован 10-02-2001 05:42 MSK   Click Here to See the Profile for Jimmy   Click Here to Email Jimmy  
Есть в базе две связанные таблицы. Нужно вставить новые значения. В главной таблице primary key инкрементируется. Как узнать новое значение primary key, чтобы вставить его в foreign key второй таблицы? Как вообще подобные штуки оптимально делаются? По возможности не привязываясь к MFC, но можно и привязаться накрайняк... Спасибо всем!
lamo опубликован 10-02-2001 11:10 MSK     Click Here to See the Profile for lamo  Click Here to Email lamo     
это должно решаться на уровне ДБ сервера.
есть такие вещи - отображения, хранимые
процедуры, тригера и т.д. такие понятия
присутствуют в любом нормальном sql сервере.

такой отстой как mysql или postgresql не в счет.
дальше акцесса они не ушли.

тебе в данном случае нужен тригер.

пример для pl/sql (oracle):
CREATE OR REPLACE TRIGGER table1_before_insert
BEFORE INSERT ON TABLE1
FOR EACH ROW
BEGIN
-- делаеш что надо. новое значение записи
-- со всеми праймари кеями и проч. во
-- встроенной переменной :NEW
END ;

в MS SQL (tsql) например тригера есть только на определенное
действие - на удаление, добавление, апдейт.
перед_ и после_ действия - такого нет.


зы: тригера ессно автоматом срабатывают ...
явно вызывать ты их не будеш. ну и ессно не
будеш зависеть ни от каких MFC.

Jimmy опубликован 11-02-2001 03:11 MSK     Click Here to See the Profile for Jimmy  Click Here to Email Jimmy     
ОЧЕНЬ большое спасибо. А если не поддерживаются триггера? Просто тут такая ситуация, что есть уже база в Acess, сделанная кем-то и для чего-то, а нужно просто добавлять в нее некоторые данные, которые время от времени считываются из файла. Еще раз thanks
Dimitriev V G опубликован 11-02-2001 10:55 MSK     Click Here to See the Profile for Dimitriev V G  Click Here to Email Dimitriev V G     
Задача решается очень просто.
1. Добавляешь запись в главную таблицу. Так как Primary Key автоматически инкрементируется, то после добавления он будет иметь максимальное значение.
2. Получаешь это максимальное значение.
3. Используешь его как Foreign Key при добавлении записи в связанную таблицу.
P.S.: Всего 3 SQL запроса. Вариант конечно не самый быстрый, но работающий.
Jimmy опубликован 12-02-2001 12:28 MSK     Click Here to See the Profile for Jimmy  Click Here to Email Jimmy     
Я так и сделал сначала. Просто, такой метод попахивает глюками, как мне кажется, хотя при испытаниях все нормально фунциклировало. Thanks
ol69 опубликован 12-02-2001 17:30 MSK     Click Here to See the Profile for ol69  Click Here to Email ol69     
Для акцеса можна лучше использовать
промежуточною таблицу, для хранения
уникальних значений ключевых полей.
Dimitriev V G опубликован 12-02-2001 17:31 MSK     Click Here to See the Profile for Dimitriev V G  Click Here to Email Dimitriev V G     
При том подходе, который я предложил глюки могут возникнуть лишь в том случае, если у тебя реализована сетевая работа. Эсли же у тебя БД локальная (т.к. ты используешь Access, то я думаю так оно и есть) то все пройдет без проблем. А если у тебя сетевая БД то нужно использовать транзакции.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.