|
|
|
next ID
|
|||
|---|---|---|---|
|
#18+
Бывалые, помогите. есть таблица с ИД'ом и запрос, который делает приращение этого ИД'а. а когда таблица не содержит ни одной записи я пытаюсь добавить оную появляется ругань: "Invalid variant type conversion". а вот что у меня написано: "select MAX( ID) +1 as NEXT_ID from SPR_CLIENTS". что не правильно????? буду признателен за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 09:03 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
используй генераторы и не парься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 10:38 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Ec-но. У тебя в табле ЕЩЕ ничего нет, а ты УЖЕ пытаешься с ним оперировать. srf2000 прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 10:59 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
во-во..... так поскажите как написать запрос, чтобы он умел проверить есть ли записи или нет, и по надобности или добавил единицу, или создал первую.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 12:26 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
эээх мать моя так делать низя ! нада книжки умные читать !!! нада сделать так делаем генератор 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 т.к. для генерации примари ключей НАДА ЮЗАТЬ ТОЛЬКО ТАК !!!!! и никак иначе! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 17:07 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Для создания автоинкрементного поля для ID и триггера воспользкуйся IBExpert или каким аналогом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 18:23 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Смотри на генераторы + триггеры. Для FireBird 1.5 есть решение твоего вопроса, но так пользоваться не советую!!!!!!! select MAX(COALESCE(ID,0)) +1 as NEXT_ID from SPR_CLIENTS С уважением, Denis Uskov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2003, 07:03 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Mozet kto - nibud' znaet Kak mozno sdelat' s4et4ik dlja ID s pomosju generatora no bez trigera??? Zaraneje spasibo. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 15:54 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Юля, если Вы так хотите то, о чем просите, то можно предположить, что Вы знаете, как создать генератор. Предположим, Ваш генератор называется Gen_Julia. Тогда запрос должен выглядеть так: 'SELECT GEN_ID(Gen_Julia',1) FROM RDB$DATABASE' Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 16:01 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
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; У меня работало! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 16:42 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Для многопользовательского режима - один единственный вариант - использование генераторов для ИК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:01 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Во-первых, неизвестно, что у него за вариант, а во-вторых, для многопользовательского варианта нужна генерация уникального для всех пользователей ID. Вариант решения (без генераторов): C:\Program Files\Borland\Delphi7\Demos\Db Там заведена специальная таблица с одной - единственной записью, которую клиенты блокируют на очень короткое время, читают из нее значение очередного ID, инкрементируют ее и тут же разблокируют. Гемор, зато задача решена для всяких там Access etc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:06 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Тема форума - Interbase, отсюда мой совет. А название поля - ID - натолкнуло меня на мысль о искусственном ключе. Для этого варианта - генераторы - правильное решение. Также select MAX( ID) +1 as NEXT_ID from SPR_CLIENTS однозначно отдаст NULL, так как MAX(ID) для пустой таблицы - NULL, а NULL + <что угодно> ---> NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:12 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
А ты попробуй MyDataSet.SQL.Text := 'select MAX( ID) as NEXT_ID from SPR_CLIENTS'; MyDataSet.Open; Result:= MyDataSet.Fields[0].AsInteger + 1; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:14 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
речь шла о SELECT(для IB) - неужели не NULL??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:19 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
Да Null, Null, но хочет Болек получать очередное значение ID, и все в одном запросе, и без анализа на Null, и, возможно, без многопользовательского режима. Ну так вот и решение было в соответствии с вопросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:26 |
|
||
|
next ID
|
|||
|---|---|---|---|
|
#18+
>Да Null, Null, но хочет Болек получать очередное значение ID, и все в одном >запросе, и без анализа на Null, и, возможно, без многопользовательского >режима. Ну так вот и решение было в соответствии с вопросом. И опять же - если это IB - то все это - генератор, а запрос SELECT GEN_ID(<Имя генератора>, <Приращение>) FROM RDB$DATABASE ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2003, 17:29 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32315275&tid=1579654]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 490ms |

| 0 / 0 |
