Найдено 2 результата

visualtech
Пт 19 янв 2018 07:08
Форум: PostgreSQL Data Access Components
Тема: pgDac есть вопросы
Ответы: 3
Просмотры: 14870

Re: pgDac есть вопросы

Пример функции, делает вставку в таблицу baseuser, возвращает первичный ключ baseuser_id через выходной параметр out_baseuser_id. Я бы хотел вызов такой функции вставить в InsertSQL набора данных. Как-то можно приспособить, чтобы выходной параметр out_baseuser_id сам подставлялся в набор данных после выполнения вставки записи?

Код: Выделить всё

CREATE OR REPLACE FUNCTION public.f_baseuser_ins (
  iarh boolean,
  iregdata date,
  isfam varchar,
  isimja varchar,
  isotch varchar,
  ibrig integer,
  out out_baseuser_id bigint
)
RETURNS bigint AS
$body$
DECLARE
    iuserfio VARCHAR(100);
BEGIN
  IF iarh IS NULL THEN 
    iarh := FALSE;
  END IF;
  
  iuserfio := isfam || ' ' || isimja;
  
  IF isotch <> '' THEN 
    iuserfio := iuserfio || ' ' || isotch; 
  END IF;
  
  
  INSERT INTO baseuser 
  (
    userfio,
    arh,
    regdata,
    sfam,
    simja,
    sotch,
    brig
  )
    VALUES
    (iuserfio,
     iarh,
     iregdata,
     isfam,
     isimja,
     isotch,
     ibrig
  )RETURNING baseuser_id INTO out_baseuser_id;
  
  RETURN;
END;
visualtech
Вт 16 янв 2018 06:44
Форум: PostgreSQL Data Access Components
Тема: pgDac есть вопросы
Ответы: 3
Просмотры: 14870

pgDac есть вопросы

Здравствуйте.
Я выбираю компоненты для Postgres+Lazarus, заказчики хотят переехать с FireBird на Postgres, на данный момент для работы с FireBird использую собственный форк IBX, переделанный по типу FIBPlus. Ищу компоненты с подобным функционалом для Postgres чтобы на клиенте было минимум изменений. Есть вопросы по pgDac.
У меня сейчас механизм на FireBird работает следующим образом:
1. Генерацию первичных ключей я задаю на стороне сервера. В Insert запросах использую выражение Returning для возврата первичного ключа, таким образом ключ генерится на сервере и автоматически подставляется в набор данных в момент выполнения метода Post, никаких генераторов на клиенте указывать не нужно. Получив первичный ключ автоматически срабатывает refresh текущей записи по первичному ключу.
Можно ли с pgDac работать так-же, используя генерацию первичного ключа на стороне сервера и через выражение returning в insert запросе подставлять его в набор данных?

2 Все то-же самое, но в Insert запросе используется хранимая процедура, которая после вставки возвращает первичный ключ и он подставляется в набор данных.

3. Я пробовал использовать SQLdb из состава лазарус, но подтверждение транзакции после вставки, редактирования, удаления данных закрывает все наборы данных, SELECT по новой открывать надо.
Как с этим обстоят дела в pgDac?