28 июля 2023

Новый способ получения OUTPUT-значения после DML операции MS SQL Server в FireDAC Delphi 12

    Так получилось, что с периодичностью в два года я пишу о получении в программе значения первичного ключа, который сгенерирован СУБД при добавлении в таблицу новой строки. В 2019-м я писал об этом для UniDAC, потом в 2021-м для FireDAC. Разработчики Delphi 12 предоставили повод написать об этом и в 2023-м. В FireDAC для MS SQL Server, по аналогии с PostgreSQL и Firebird/InterBase, добавлена возможность получения OUTPUT-значения после DML операции с помощью параметров.
    В FireDAC Delphi 12 для MS SQL Server добавили поддержку экранированного фигурными скобками псевдопараметра "INTO". Теперь у FireDAC для MS SQL Server тоже есть два способа получения значений после DML операции. Первый – с использованием метода Open и полей TFDQuery:
q := TFDQuery.Create(nil);
q.Connection := dbMS;
q.SQL.Text := 'insert into test(t) output INSERTED.ID values (''test'')';
q.Open;
Writeln(q.Fields[0].FieldName, ' ', q.Fields[0].AsString);
Второй – с использованием метода ExecSQL/Execute и параметров TFDQuery:
q := TFDQuery.Create(nil);
q.Connection := dbMS;
q.SQL.Text := 'insert into test(t) output INSERTED.ID {into :id} values (''test'')';
q.Params[0].ParamType := ptOutput;
q.Params[0].DataType  := ftInteger;
q.ExecSQL;
Writeln(q.Params[0].Name, ' ', q.Params[0].AsString);

5 комментариев:

  1. Анонимный29 июля, 2023 10:02

    Чорны кашак, у тебя инсайдерские связи с разрабами из Embarcadero?)

    ОтветитьУдалить
    Ответы
    1. Нет, информация получена из "открытых источников". К сожаленью, Embarcadero меня никогда не замечала :( Даже во времена моей активной деятельности на благо сообщества Delphi. Я бы тогда мог себя назвать "евангелистом Delphi". Хотя я им являюсь и сейчас :) Единственный из лиц приближенных к авторам Delphi с кем я когда-то общался - это был Сергей Орлик из московского Borland. Но это было очень давно, задолго до Embarcadero.

      Удалить
    2. Не замечала? Даже за DelphiPlus не наградили пожизненной лицензией на Delphi? Тебе надо было у них на MVP подаваться )))

      Удалить
    3. Embarcadero одна из самых жадных контор - они ничего не дадут. К тому же последние годы продвижение Delphi на российском рынке их не очень интересовало. Вся их реклама у нас - это 2-3 нудных русскоязычных вебинаров в год. А после санкций за развязанную войну мы им тем более не нужны

      Удалить
  2. >мы им тем более не нужны

    Ну это не совсем правда. Уже с начала 2023 года уже можно официально лицензии покупать или продлять, просто это не афишировалось. А еще если оформляешь бесплатную годовую версию, то звонит менеджер, интересуется целями, конторой, возможностями приобретения полной лицензии...

    ОтветитьУдалить