powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX 19_19 вопрос с поддержкой оператора RETURNING
25 сообщений из 40, страница 1 из 2
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711653
Konstantin-78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток, такой вопрос:

У меня DELPHI 10.2, ibx19,19, ни как не найду информацию о поддержке IBX оператора RETURNING.
Я его хочу использовать в IBQuery (после вставки строки), ну как тут уже писали, предыдущие версии его не поддерживали.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711655
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕМНИП, такого предиката в InterBase нет. Следовательно, в IBX он без допиливания не поддерживается.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711658
Konstantin-78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

Значит без внутренней процедуры не обойтись?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711661
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin-78,

а тупо попробовать?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711673
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мне кажется, что если тупо засунуть INSERT RETURNING в обычный TIBQuery или TIBDataset и сделать Open, то всё заработает само.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711677
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЧто-то мне кажется
Наверное еще никого это простая мысль не посещала. :)
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711680
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЧто-то мне кажется, что если тупо засунуть INSERT RETURNING в обычный TIBQuery или TIBDataset и сделать Open, то всё заработает само.
Прикинь, оно и работает.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711695
Konstantin-78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияПрикинь, оно и работает.

Типа так?:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var
  q: integer;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text := 'insert into Tab (ID, STR) values (GEN_ID(GN, 1), :STR) returning ID';
IBQuery1.Params[0].AsString := 'qwe';
IBQuery1.Open;
IBTransaction1.CommitRetaining;
q := IBQuery1.ParamByName('ID').Value;
end;



с ошибкой на " q := IBQuery1.ParamByName('ID').Value; "
'IBQuery1: List index out of bounds (0)'.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711698
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin-78Типа так?:

Нет. Немного не так. Любые значения возвращаются через Fields. И запрос с RETURNING
рассматривается не как select, а как execute procedure.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711713
Konstantin-78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНет. Немного не так. Любые значения возвращаются через Fields. И запрос с RETURNING
рассматривается не как select, а как execute procedure.


Вы имели в виду вот так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var
  q: integer;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text := 'insert into Tab (ID, STR) values (GEN_ID(GN, 1), :STR) returning ID';
IBQuery1.Params[0].AsString := 'qwe1';
IBQuery1.ExecSQL;
IBTransaction1.CommitRetaining;
q := IBQuery1.Fields[0].AsInteger;
end;
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711716
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin-78Вы имели в виду вот так?

За такой код я бы отрывал руки с запретом на профессию, но в целом таки да, как-то так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711717
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin-78,

только что проверил - работает:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  IBSQL1 : TIBSQL;
...
begin
...
  IBSQL1.SQL.Text := 'insert into t (name) values (''Вася'') returning id';
  IBSQL1.ExecQuery;
  id := IBSQL1.FieldByName('id').AsInteger;
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711728
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin-78,

Запомни простую истину: никогда, накогда не используй CommitRetaining/RollbackRetaining.
Иначе два варианта:
1. Ты сменишь профессию, а твоё поделие придется переделывать другому;
2. Тебе самому придется всё переделывать со временем.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711732
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockKonstantin-78,

Запомни простую истину: никогда, накогда не используй CommitRetaining/RollbackRetaining.
Иначе два варианта:
1. Ты сменишь профессию, а твоё поделие придется переделывать другому;
2. Тебе самому придется всё переделывать со временем.
Прямо вот так "никогда"? Может, тогда сразу расскажешь, как редактировать данные в ibx датасете, чтобы он не закрывался по каждому коммиту/роллбэку?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711754
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияYuRockKonstantin-78,

Запомни простую истину: никогда, накогда не используй CommitRetaining/RollbackRetaining.
Иначе два варианта:
1. Ты сменишь профессию, а твоё поделие придется переделывать другому;
2. Тебе самому придется всё переделывать со временем.
Прямо вот так "никогда"? Может, тогда сразу расскажешь, как редактировать данные в ibx датасете, чтобы он не закрывался по каждому коммиту/роллбэку?
Использовать датасеты, которые поддерживают 2 транзакции.
Читающая длинная, пишущая - короткая.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711769
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияМожет, тогда сразу расскажешь, как редактировать данные в ibx датасете, чтобы он не закрывался по каждому коммиту/роллбэку?
Ты имеешь ввиду - редактировать гриды "в гриде"? Зачем это вообще надо? Если уж надо - делаешь форму редактирования запись, после редактирования - стартуешь пишущую транзакцию, делаешь инсерт/апдейт, commit, refresh датасета, всё.

Либо использовать датасеты с двумя транзакциями, как сказал ужа wadman. Но, имхо, это нужно чаще всего для редактирования гридов в гридах, что я считаю уродством.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711770
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А датасет должен быть открыт в read-only транзакции, ессно.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711772
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanКотовасияпропущено...

Прямо вот так "никогда"? Может, тогда сразу расскажешь, как редактировать данные в ibx датасете, чтобы он не закрывался по каждому коммиту/роллбэку?
Использовать датасеты, которые поддерживают 2 транзакции.
Читающая длинная, пишущая - короткая.
Т.е., не использовать датасеты ibx. Или использовать их после допиливания.

А чем плоха длинная "пишущая" транзакция "стандартного" датасета ibx, которая 99,999% времени ничего не пишет, кроме короткого быстрого post с последующим немедленным CommitRetaining? Расскажи, пожалуйста.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711776
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockА датасет должен быть открыт в read-only транзакции, ессно.Почему "естественно"?
Ну вот если в этой транзакции данные не модифицируются - в чем проблема?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711797
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияYuRockА датасет должен быть открыт в read-only транзакции, ессно.Почему "естественно"?
Ну вот если в этой транзакции данные не модифицируются - в чем проблема?

В этой - не модифицируются. В других - вполне себе (у других пользователей). Получаешь накопление ненужных версий записи.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711803
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterКотовасияпропущено...
Почему "естественно"?
Ну вот если в этой транзакции данные не модифицируются - в чем проблема?

В этой - не модифицируются. В других - вполне себе (у других пользователей). Получаешь накопление ненужных версий записи.
После CommitRetaining начнут копиться версии?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711833
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияDarkMasterпропущено...


В этой - не модифицируются. В других - вполне себе (у других пользователей). Получаешь накопление ненужных версий записи.
После CommitRetaining начнут копиться версии?
Да, kdv пишет, что такое может случиться, в общем случае следует избегать Retaining, но для датасетов ibx вариантов нет, или допиливать или изменения в отдельной транзакции делать, ручками; или таки c Retainig - но учитывать ситуацию и понимать.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711874
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin-78IBTransaction1.CommitRetaining;
вот зачем такую стыдобу писать?
Мало того, CommitRetaining, так он еще между открытием запроса и получением значения. Кто вас такому научил?
Выполнил insert, получил данные, сделал commit, если надо. CommitRetaining для insert/update/delete ни к селу, ни к городу.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711886
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е., не использовать датасеты ibx. Или использовать их после допиливания.

Со стандартными компонентами IBX приходится использовать in-memory-dataset (например, TRXMemoryData или что-нибудь посвежей) и его подключать к гриду. В этом случае:
1. Обеспечивается независимость от качества соединения с БД (данные не исчезнут при дисконнекте)
2. При добавлении / изменении / удалении записи не требуется переоткрывать весь датасет
3. По факту получается не очень много дополнительного кода.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711893
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

да ну нафиг, уж лучше старые фибы.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX 19_19 вопрос с поддержкой оператора RETURNING
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]