powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / next ID
19 сообщений из 19, страница 1 из 1
next ID
    #32314320
Bolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бывалые, помогите.
есть таблица с ИД'ом и запрос, который делает приращение этого ИД'а.
а когда таблица не содержит ни одной записи я пытаюсь добавить оную появляется ругань: "Invalid variant type conversion".

а вот что у меня написано: "select MAX( ID) +1 as NEXT_ID from SPR_CLIENTS".

что не правильно?????

буду признателен за помощь.
...
Рейтинг: 0 / 0
next ID
    #32314441
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй генераторы и не парься
...
Рейтинг: 0 / 0
next ID
    #32314466
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ec-но. У тебя в табле ЕЩЕ ничего нет, а ты УЖЕ пытаешься с ним оперировать.
srf2000 прав.
...
Рейтинг: 0 / 0
next ID
    #32314613
Bolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
во-во.....
так поскажите как написать запрос, чтобы он умел проверить есть ли записи или нет, и по надобности или добавил единицу, или создал первую....
...
Рейтинг: 0 / 0
next ID
    #32315128
Gatorr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эээх мать моя
так делать низя !
нада книжки умные читать !!!
нада сделать так
делаем генератор
CREATE GENERATOR NAME_OF_GENERATOR;

а потом
триггер

CREATE TRIGGER ACCESS_LEVELS_BI FOR NAME_OF_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(NAME_OF_GENERATOR,1);
END

т.к. для генерации примари ключей НАДА ЮЗАТЬ ТОЛЬКО ТАК !!!!!
и никак иначе!
...
Рейтинг: 0 / 0
next ID
    #32315275
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для создания автоинкрементного поля для ID и триггера воспользкуйся IBExpert или каким аналогом.
...
Рейтинг: 0 / 0
next ID
    #32315519
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри на генераторы + триггеры.

Для FireBird 1.5 есть решение твоего вопроса, но так пользоваться не советую!!!!!!!

select MAX(COALESCE(ID,0)) +1 as NEXT_ID from SPR_CLIENTS

С уважением, Denis Uskov
...
Рейтинг: 0 / 0
next ID
    #32324739
julija
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mozet kto - nibud' znaet Kak mozno sdelat' s4et4ik dlja ID s pomosju generatora no bez trigera???

Zaraneje spasibo.
...
Рейтинг: 0 / 0
next ID
    #32324754
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юля, если Вы так хотите то, о чем просите, то можно предположить, что Вы знаете, как создать генератор.
Предположим, Ваш генератор называется Gen_Julia. Тогда запрос должен выглядеть так:

'SELECT GEN_ID(Gen_Julia',1) FROM RDB$DATABASE'

Удачи.
...
Рейтинг: 0 / 0
next ID
    #32324882
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лёлик

Бывалые, помогите.
есть таблица с ИД'ом и запрос, который делает приращение этого ИД'а.
а когда таблица не содержит ни одной записи я пытаюсь добавить оную появляется ругань: "Invalid variant type conversion".

а вот что у меня написано: "select MAX( ID) +1 as NEXT_ID from SPR_CLIENTS".

что не правильно?????

буду признателен за помощь.


Вариант
MyDataSet.SQL.Text := 'select MAX( ID) as NEXT_ID from SPR_CLIENTS';
MyDataSet.Open;
Result:= MyDataSet.Fields[0].AsInteger + 1;

У меня работало!
...
Рейтинг: 0 / 0
next ID
    #32324915
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для многопользовательского режима - один единственный вариант - использование генераторов для ИК
...
Рейтинг: 0 / 0
next ID
    #32324919
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, неизвестно, что у него за вариант, а во-вторых, для многопользовательского варианта нужна генерация уникального для всех пользователей ID. Вариант решения (без генераторов):

C:\Program Files\Borland\Delphi7\Demos\Db

Там заведена специальная таблица с одной - единственной записью, которую клиенты блокируют на очень короткое время, читают из нее значение очередного ID, инкрементируют ее и тут же разблокируют. Гемор, зато задача решена для всяких там Access etc
...
Рейтинг: 0 / 0
next ID
    #32324926
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема форума - Interbase, отсюда мой совет. А название поля - ID - натолкнуло меня на мысль о искусственном ключе. Для этого варианта - генераторы - правильное решение.

Также select MAX( ID) +1 as NEXT_ID from SPR_CLIENTS однозначно отдаст NULL, так как MAX(ID) для пустой таблицы - NULL,
а NULL + <что угодно> ---> NULL
...
Рейтинг: 0 / 0
next ID
    #32324931
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты попробуй
MyDataSet.SQL.Text := 'select MAX( ID) as NEXT_ID from SPR_CLIENTS';
MyDataSet.Open;
Result:= MyDataSet.Fields[0].AsInteger + 1;
...
Рейтинг: 0 / 0
next ID
    #32324941
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
речь шла о SELECT(для IB) - неужели не NULL???
...
Рейтинг: 0 / 0
next ID
    #32324956
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да Null, Null, но хочет Болек получать очередное значение ID, и все в одном запросе, и без анализа на Null, и, возможно, без многопользовательского режима. Ну так вот и решение было в соответствии с вопросом.
...
Рейтинг: 0 / 0
next ID
    #32324960
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Да Null, Null, но хочет Болек получать очередное значение ID, и все в одном >запросе, и без анализа на Null, и, возможно, без многопользовательского >режима. Ну так вот и решение было в соответствии с вопросом.

И опять же - если это IB - то все это - генератор,
а запрос SELECT GEN_ID(<Имя генератора>, <Приращение>) FROM RDB$DATABASE

????
...
Рейтинг: 0 / 0
next ID
    #32324963
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, только генераторы. Теперь уж иначе никак.
...
Рейтинг: 0 / 0
next ID
    #32324967
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я начал сомневаться
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / next ID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]