Автор
|
Тема: Стратегический вопрос...
|
Jimmy |
опубликован 10-02-2001 05:42 MSK
Есть в базе две связанные таблицы. Нужно вставить новые значения. В главной таблице primary key инкрементируется. Как узнать новое значение primary key, чтобы вставить его в foreign key второй таблицы? Как вообще подобные штуки оптимально делаются? По возможности не привязываясь к MFC, но можно и привязаться накрайняк... Спасибо всем!
|
lamo
|
опубликован 10-02-2001 11:10 MSK
это должно решаться на уровне ДБ сервера. есть такие вещи - отображения, хранимые процедуры, тригера и т.д. такие понятия присутствуют в любом нормальном 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
ОЧЕНЬ большое спасибо. А если не поддерживаются триггера? Просто тут такая ситуация, что есть уже база в Acess, сделанная кем-то и для чего-то, а нужно просто добавлять в нее некоторые данные, которые время от времени считываются из файла. Еще раз thanks |
Dimitriev V G
|
опубликован 11-02-2001 10:55 MSK
Задача решается очень просто. 1. Добавляешь запись в главную таблицу. Так как Primary Key автоматически инкрементируется, то после добавления он будет иметь максимальное значение. 2. Получаешь это максимальное значение. 3. Используешь его как Foreign Key при добавлении записи в связанную таблицу. P.S.: Всего 3 SQL запроса. Вариант конечно не самый быстрый, но работающий. |
Jimmy
|
опубликован 12-02-2001 12:28 MSK
Я так и сделал сначала. Просто, такой метод попахивает глюками, как мне кажется, хотя при испытаниях все нормально фунциклировало. Thanks |
ol69
|
опубликован 12-02-2001 17:30 MSK
Для акцеса можна лучше использовать промежуточною таблицу, для хранения уникальних значений ключевых полей.
|
Dimitriev V G
|
опубликован 12-02-2001 17:31 MSK
При том подходе, который я предложил глюки могут возникнуть лишь в том случае, если у тебя реализована сетевая работа. Эсли же у тебя БД локальная (т.к. ты используешь Access, то я думаю так оно и есть) то все пройдет без проблем. А если у тебя сетевая БД то нужно использовать транзакции. |