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


                Рейтинг@Mail.ru
                [ Script execution time: 0,0351 ]   [ 15 queries used ]   [ Generated: 26.05.24, 20:44 GMT ]