Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Уникальное значение первичного ключа
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток уважаемые знатоки! У меня такая проблема: Использую СУБД PostgreSQL а приложение пытаюсь сделать на Delphi. У первичного ключа (ID) таблицы (Table) тип данных - автоинкрементный (serial). При добавлении новой записи из приложения, написанного на Delphi, поле ID пустое, хотя должно формироваться значение, и при попытке сохранить добавленную запись говорит что в ID нет значения. В InterBase такую проблему я решал созданием генератора и хранимой процедуры. При добавлении новой записи (событие OnNewRecord) вызывал хранимую процедуру, которая нормально ставила уникальное значение в ID. В PostgreSQL генераторов не нашел. Как быть? Может быть есть какие-нибудь еще варианты? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 12:00 |
|
||
|
Уникальное значение первичного ключа
|
|||
|---|---|---|---|
|
#18+
MerkoIvanДоброго времени суток уважаемые знатоки! У меня такая проблема: Использую СУБД PostgreSQL а приложение пытаюсь сделать на Delphi. У первичного ключа (ID) таблицы (Table) тип данных - автоинкрементный (serial). При добавлении новой записи из приложения, написанного на Delphi, поле ID пустое, хотя должно формироваться значение, и при попытке сохранить добавленную запись говорит что в ID нет значения. SERIAL это фиктивный тип данных. Когда pg видит поле типа SERIAL, он создает вместо него поле типа Int4, автоматом создает Sequence вида TABLENAME || "_Kod_Seq". И прописывает Default Value вида NextVal(TABLENAME || "_Kod_Seq"). Для начала проверьте, так ли это и получается ли добавить запись с валидным значением ключа из какого-нибудь PgAdmin. Если из PgAdmin у вас получается добавить, а из Delphi нет, значит INSERT, который идет из Delphi несет в себе значение ключа: INSERT INTO TABLENAME (ID, ...) VALUES (0, ...) Для Pg это нормальная ситуация, что пользователь перебивает Default Value. В таком разе, смотрите как у вас натравлены insert'ы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 12:21 |
|
||
|
Уникальное значение первичного ключа
|
|||
|---|---|---|---|
|
#18+
Sequences MerkoIvanПри добавлении новой записи из приложения, написанного на Delphi, поле ID пустое, хотя должно формироваться значение, и при попытке сохранить добавленную запись говорит что в ID нет значения. Это потому, что вы явно не указываете, что ID вставлять не надо. То есть если таблица такая: tab1 (id, col1,col2,col3), то insert должен быть insert into tab1 (col1,col2,col3) values (val1, val2, val3); , без упоминания id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 12:22 |
|
||
|
Уникальное значение первичного ключа
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю и помню, проблема в дельфях. При добавлении новой строки, уникальное значение будет получено на сервере, уже после отсылки инсерта с клиента. А дельфи еще до отсылки проверяет заполнение обязательных полей и, видя, что поле не заполнено, тупо ругается, не задумываясь, что оно заполнится по умолчанию (кстати, интересно было бы попробовать - сделать поле NOT NULL, но со значением по умолчанию и посмотреть, как поведет себя дельфи, при попытке вставить туда пустое значение). Кстати, подумалось, возможно при отсутствии значения, дельфи генерит что-то вроде Код: plaintext Код: plaintext А аналог генераторов - сиквенсы (sequence). Если создается поле типа serial, то реально оно является полем типа int4 и при этом создается объект sequence, а в значение по умолчанию ставится вычисление nextval('<тут имя сиквенса>'::regclass) PS. Для справки: Сиквенсы могут жить и самостоятельно. Это полноправный объект, который можно создать для своих целей (получения уникальных значений), не обязательно привязывая их к конкретной таблице. Собственно, они и не привязываются к таблице. Только условно, вышеобозначенным значением на DEFAULT поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 12:26 |
|
||
|
Уникальное значение первичного ключа
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за помощь. Проблему решил следующим способом, может кому пригодится: DM.QPODR.InsertRecord([nil, nil, Edit1.text, Edit2.Text]); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 09:30 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34610207&tid=2004242]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 351ms |

| 0 / 0 |
