Доброго времени суток. Такой вопрос.
Можно ли при использовании Unitable в работе с Postgresql получать значение автоинкрементного поля с помощью с unitable.lasinsertid ? я попробовал оно возвращает 0.
или лучше стоит использовать uniquery для добавления записей?
unitable lastinsertid
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: unitable lastinsertid
Здравствуйте.
Спасибо за Ваше сообщение, мы воспроизвели проблему с LastInsertId и занимаемся её изучением. Мы сообщим Вам, когда у нас появятся какие-либо результаты.
Для автоматического заполнения полей в PostgreSQL сервере обычно используют последовательности
http://www.postgresql.org/docs/9.1/stat ... uence.html
или псевдо-тип serial
http://www.postgresql.org/docs/9.1/stat ... YPE-SERIAL .
Если Вам необходимо, чтобы при вставке новой записи в dataset поля заполнялись автоматически, Вы можете сделать это одним из следующих способов:
1) если Вы используете serial тип, или в качестве значения по умолчанию для поля выбрана последовательность, то Вам достаточно установить свойство TUniTable.Options.DefaultValues в True, например:
2) если значение по умолчанию для поля не является последовательностью или не задано, Вы можете явно указать имя последовательности (в свойстве TUniTable.SpecificOptions.Values['PostgreSQL.KeySequence']) и имя поля (в свойстве TUniTable.KeyFields), например:
Если же Вам необходимо напрямую обратиться к последовательности, чтобы получить её текущее значение или изменить его, Вы можете использовать специальные PostgreSQL команды http://www.postgresql.org/docs/9.1/stat ... uence.html .
Спасибо за Ваше сообщение, мы воспроизвели проблему с LastInsertId и занимаемся её изучением. Мы сообщим Вам, когда у нас появятся какие-либо результаты.
Для автоматического заполнения полей в PostgreSQL сервере обычно используют последовательности
http://www.postgresql.org/docs/9.1/stat ... uence.html
или псевдо-тип serial
http://www.postgresql.org/docs/9.1/stat ... YPE-SERIAL .
Если Вам необходимо, чтобы при вставке новой записи в dataset поля заполнялись автоматически, Вы можете сделать это одним из следующих способов:
1) если Вы используете serial тип, или в качестве значения по умолчанию для поля выбрана последовательность, то Вам достаточно установить свойство TUniTable.Options.DefaultValues в True, например:
Код: Выделить всё
UniTable1.Options.DefaultValues := True;
Код: Выделить всё
UniTable1.KeyFields := 'id';
UniTable1.SpecificOptions.Values['PostgreSQL.KeySequence'] := 'table1_id_seq';
-
- Сообщения: 34
- Зарегистрирован: Чт 05 июл 2012 05:21
- Откуда: Новосибирск
- Контактная информация:
Re: unitable lastinsertid
попробовал так
при добавление записи через
в таблице появлияется строчка с кодом 10 но если сделать
то этой строчке присваивается номер 11, тоесть получается записи начинают проскакивать через одну
Код: Выделить всё
Uniquery1.Options.DefaultValues := True;
Код: Выделить всё
uniquery1.append;
Код: Выделить всё
uniquery1.post
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: unitable lastinsertid
Такое поведение возникает в следующих ситуациях:
- вы используете оба вышеуказанных способа автоматического заполнения полей;
- вы создали триггер, который при вставке записи заполняет поле с помощью последовательности, и при этом используете один из вышеуказанных способов автоматического заполнения полей.
- вы используете оба вышеуказанных способа автоматического заполнения полей;
- вы создали триггер, который при вставке записи заполняет поле с помощью последовательности, и при этом используете один из вышеуказанных способов автоматического заполнения полей.
-
- Devart Team
- Сообщения: 51
- Зарегистрирован: Пн 28 янв 2013 11:54
Re: unitable lastinsertid
Здравствуйте.
Мы исправили проблему с LastInsertId. Исправление будет доступно в следующей версии UniDAC.
Примечание: Для PostgreSQL свойство LastInsertId возвращает не значение автоинкрементного поля - это свойство возвращает OID для последней вставленной записи, если таблица создана с опцией WITH OIDS. Детальную информацию о OIDs вы можете прочесть в документации PostgreSQL http://www.postgresql.org/docs/9.2/stat ... e-oid.html
Мы исправили проблему с LastInsertId. Исправление будет доступно в следующей версии UniDAC.
Примечание: Для PostgreSQL свойство LastInsertId возвращает не значение автоинкрементного поля - это свойство возвращает OID для последней вставленной записи, если таблица создана с опцией WITH OIDS. Детальную информацию о OIDs вы можете прочесть в документации PostgreSQL http://www.postgresql.org/docs/9.2/stat ... e-oid.html