Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.16.76.223] |
|
Сообщ.
#1
,
|
|
|
Есть в базе две связанные таблицы. Нужно вставить новые значения. В главной таблице primary key инкрементируется. Как узнать новое значение primary key, чтобы вставить его в foreign key второй таблицы? Как вообще подобные штуки оптимально делаются? По возможности не привязываясь к MFC, но можно и привязаться накрайняк... Спасибо всем!
|
Сообщ.
#2
,
|
|
|
это должно решаться на уровне ДБ сервера.
есть такие вещи - отображения, хранимые процедуры, тригера и т.д. такие понятия присутствуют в любом нормальном 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. |
Сообщ.
#3
,
|
|
|
ОЧЕНЬ большое спасибо. А если не поддерживаются триггера? Просто тут такая ситуация, что есть уже база в Acess, сделанная кем-то и для чего-то, а нужно просто добавлять в нее некоторые данные, которые время от времени считываются из файла. Еще раз thanks
|
Сообщ.
#4
,
|
|
|
Задача решается очень просто.
1. Добавляешь запись в главную таблицу. Так как Primary Key автоматически инкрементируется, то после добавления он будет иметь максимальное значение. 2. Получаешь это максимальное значение. 3. Используешь его как Foreign Key при добавлении записи в связанную таблицу. P.S.: Всего 3 SQL запроса. Вариант конечно не самый быстрый, но работающий. |
Сообщ.
#5
,
|
|
|
Я так и сделал сначала. Просто, такой метод попахивает глюками, как мне кажется, хотя при испытаниях все нормально фунциклировало. Thanks
|
Сообщ.
#6
,
|
|
|
Для акцеса можна лучше использовать
промежуточною таблицу, для хранения уникальних значений ключевых полей. |
Сообщ.
#7
,
|
|
|
При том подходе, который я предложил глюки могут возникнуть лишь в том случае, если у тебя реализована сетевая работа. Эсли же у тебя БД локальная (т.к. ты используешь Access, то я думаю так оно и есть) то все пройдет без проблем. А если у тебя сетевая БД то нужно использовать транзакции.
|