Как сделать автоинкремент поля | |
---|---|
SlyFox Автор Сообщений: 3 Дата регистрации: 21.12.2004 |
Многоуважаемый ALL!
Есть проблема следующего плана. В таблице 1 есть некоторое поле id. Нужно сделать его автоинкрементное заполнение. Написал хранимую процедурку типа auto_fill() и поцепил ее как "значение по умолчанию". Если при этом добавляется пустая строка - процедура отрабатывает и заполняет поле (как и должно быть ). Но! В коде нужно выполнить следующую последовательность действий: select <талица 1> append from <таблица 2> (созданной по шаблону таблицы 1) Само собой разумеется, что при этом значение поля id таблицы 1 заполняется значением из таблицы 2 и "значение по умолчанию" не отрабатывает. Значение поля id остается нулевым, что, собственно, совсем не то, что нужно! Так вот, как сделать, чтобы инкремент производился средствами базы данных, а не приложения в любом случае! |
Re: Как сделать автоинкремент поля | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Так не добавляй ID из второй таблицы и все сработает.
|
Re: Как сделать автоинкремент поля | |
---|---|
krosh Сообщений: 478 Откуда: Нижний Новгород Дата регистрации: 24.01.2002 |
SlyFox писал(а):
Цитата: наверное триггер должен срабатывать всегда |
Re: Как сделать автоинкремент поля | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Перечисли поля, которые надо добавлять в команде
APPEND FROM FIELDS Field1, Field2, Field3, ... FROM table2 Смысл в том, чтобы в этом списке не было ключевого поля Ну, и вариант, предложенный krosh. В дополнении к DEFAULT прописать RULE для поля (оно выполняется после DEFAULT). Если значение ключевого поля пустое - принудительный вызов функции генерации ключа и REPLACE. Что-то вроде:
Правда, RULE выполняются вообще при любой модификации записи. Если контроль нужен только при вставке, то вместо RULE - сделай вызов этой функции в триггере на INSERT ------------------ |
Re: Как сделать автоинкремент поля | |
---|---|
SlyFox Автор Сообщений: 3 Дата регистрации: 21.12.2004 |
А как должен выглядеть тригер?
Например: Select max(id) from table1 into array temparray repla id with temparray(1)+1 --- не работает |
Re: Как сделать автоинкремент поля | |
---|---|
SlyFox Автор Сообщений: 3 Дата регистрации: 21.12.2004 |
Это понятно. Если копаться в коде - то можно и инкремент, собственно, туда всунуть. Задача состоит именно в том, чтобы не нарушая существующей модели (слишком большой кусок проекта придется перелопачивать) создать дополнительную возможность инкрементации ключевого поля...
|
Re: Как сделать автоинкремент поля | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Если у тебя VFP8, то вместо твоей функции автоинкремента используй поля типа Integer-AutoIncrement. Они как раз и делают то, что ты хочешь. Их в принципе нельзя редактировать. А с собственной функцией просто нет другого пути кроме анализа введенного значения в момент вставки.
------------------ |
© 2000-2024 Fox Club  |