Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ODBC и получение значение первичного индекса у только что добавленной записи  (Прочитано 6862 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« : 23-10-2008 14:04 » 

Как, используя ODBC, можно узнать значение первичного ключа у только что добавленной записи?

Вот, например, в MySQL, мы сначала выполняем запрос, вставляющий данные, а потом с помощью mysql_insert_id() узнаем что же мы таки вставили.

В Firebird, я так понял, что сначала мы обращаемся к генератору с помощью ibase_gen_id() и получаем из него уникальное значение, которое потом и вставляем, вместе со всеми остальными данными.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 23-10-2008 15:19 » 

Dracul, так ты вставляешь значение сам или что? Какая СУБД?

P.S.: ODBC не мешает выполнить родной sql-код...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 23-10-2008 15:47 » 

теоретически должно работать и на майсулке и на птице.... просто не охото писать под две бд все интерфейсы... вот и нашол, что ODBC вроде как работает со всеми... ты работаешь через нее, а она, в зависемости от натроек, сама уже к БД обращаеться...

значение я сам не вставляю, оно должно генерироваться само, и быть уникальным... коненчо можно было бы и чтонить самому генерить, например на основе времени, но не охото ключи огромных размеров иметь(((
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 23-10-2008 17:49 » new

Dracul, выполнить встроенную процедуру, которая добавит запись и сама при помощи GEN_ID(mygenerator,1) присвоит полю ID и вернёт значение

Код:
CREATE PROCEDURE MyInsert(
  параметр1 тип,
  параметр2 тип,
  параметр3 тип
    )
RETURNS (
    retID BIGINT
    )
AS
begin
   retID=GEN_ID(mygenerator,1);

   INSERT INTO MyTable (поле1,поле2,поле3,ID) VALUES (:параметр1,:параметр2,:параметр3,:retID);

   suspend;
end

ну а ежели известно, что после вставки записи никто не вмешается и не вставит ещё, то управление ID можно предоставить триггеру вставки, а значение генератора получить как

Код:
CREATE PROCEDURE GetMyGeneratorInsert
RETURNS (
    retID BIGINT
    )
AS
begin
   retID=GEN_ID(mygenerator,0);
   suspend;
end
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines