powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX 19_19 вопрос с поддержкой оператора RETURNING
40 сообщений из 40, показаны все 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
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711894
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЗапомни простую истину: никогда, накогда не используй CommitRetaining/RollbackRetaining.


Я нашёл одно полезное свойство CommitRetaining: если при решении задачи требуется обработать множество строк (например, финансовые операции) и для каждой операции требуется закоммитить транзакцию, то с CommitRetaining запросы с параметрами будут выполнены быстрее, поскольку не будет каждый раз заново выполняться операция PREPARE. Если база находится на отдельном компьютере, а скорость соединения не особо быстрая, то ускорение может быть в несколько раз.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711897
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияА чем плоха длинная "пишущая" транзакция "стандартного" датасета ibx, которая 99,999% времени ничего не пишет, кроме короткого быстрого post с последующим немедленным CommitRetaining? Расскажи, пожалуйста.
Тем, что эта пишущая транзакция сборке мусора будет очень мешать. Если она будет открыта несколько дней (и ничего не делать при этом, как ты говоришь - висеть себе и всё) - то эти несколько дней не будет сборки мусора.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711900
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerс CommitRetaining запросы с параметрами будут выполнены быстрее, поскольку не будет каждый
раз заново выполняться операция PREPARE.

Если твои компоненты доступа распрепарируют запрос при коммите, это их проблемы. Обычно
препарированный запрос способен нормально жить аж до дисконнекта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711901
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerЯ нашёл одно полезное свойство CommitRetaining: если при решении задачи требуется обработать множество строк (например, финансовые операции) и для каждой операции требуется закоммитить транзакцию, то с CommitRetaining запросы с параметрами будут выполнены быстрее, поскольку не будет каждый раз заново выполняться операция PREPARE
Разве Prepare делается для каждой транзакции? Не очень верю.

Я использую CommitRetaining в одном месте: для мониторинга доступности базы. RORC-транзакции делаю CommitRetaining по таймеру.
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711907
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияDmSer,

да ну нафиг, уж лучше старые фибы.

Конечно они лучше, тем более сейчас они вроде халявные :)
Но вот встанет у меня задача переделать один мой проект (там пара-тройка сотен тыщ строк кода) под Линукс - опаньки, а там есть для Лазаруса допиленный IBX, т.е. задачу можно будет решить за ограниченное время, учитывая, что в проекте не менее тысячи различных запросов к БД.
А с фибами будет всё намного сложнее.


Кстати, никто проверял, в последних версиях Delphi под Линукс компоненты IBX случайно с Firebird не умеют работать?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711909
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockРазве Prepare делается для каждой транзакции? Не очень верю.

Увы, в IBX оно так!
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711911
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerУвы, в IBX оно так! Тынц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ISC_STATUS isc_dsql_prepare(
 ISC_STATUS *status_vector,
 isc_tr_handle *trans_handle,
 isc_stmt_handle *stmt_handle,
 unsigned short length,
 char *statement,
 unsigned short dialect,
 XSQLDA *xsqlda);


При чем здесь IBX?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711925
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_DmSerУвы, в IBX оно так! Тынц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ISC_STATUS isc_dsql_prepare(
 ISC_STATUS *status_vector,
 isc_tr_handle *trans_handle,
 isc_stmt_handle *stmt_handle,
 unsigned short length,
 char *statement,
 unsigned short dialect,
 XSQLDA *xsqlda);


При чем здесь IBX?

Прочитал статью по ссылке, просмотрел функцию isc_dsql_prepare, насладился жёлтой подсветкой. Всё понравилось. А делать-то с этим теперь что?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711938
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_При чем здесь IBX?

Ты не поверишь, но запрос не ограничен рамками транзакции в которой его препарировали.
Выполняться он способен и в любой другой. Хоть это и влечёт за собой забавные спецэффекты
на динамических метаданных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711940
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerА делать-то с этим теперь что?Проблема не в IBX, а в API Interbase. Стейтментов вне транзакции не существует
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711943
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovзапрос не ограничен рамками транзакции в которой его препарировали.Интересный функционал. Он где-то документирован или просто "так работает"?
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711945
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Стейтментов вне транзакции не существует

Это ты зря так думаешь:
Код: sql
1.
2.
3.
4.
isc_dsql_allocate_statement(
   ISC_STATUS *status_vector,
   isc_db_handle *db_handle,
   isc_stmt_handle *stmt_handle);


Где здесь транзакция?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711955
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГде здесь транзакция?Это аллок.

При создании объекта память тоже как-бы принадлежит всему процессу, но объект доступен только по месту создания. А если кто-то полезет по сырому указателю к этому объекту, то ССЗБ
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39711967
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Он где-то документирован или просто "так работает"?

API guideAfter a statement is prepared, it is available for execution as many times
as necessary during the current session .
Ну и то, что в execute требуется хэндл транзакции как бы тоже намекает. Там, где запросы
привязаны к транзакции, такого не допускают.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX 19_19 вопрос с поддержкой оператора RETURNING
    #39712048
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно писал проект на апи. Создавали и сразу препарировал запрос один раз, в одной транзакции. А затем использую этот хэндл запроса с другими транзакциями. Месяцами работает.
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX 19_19 вопрос с поддержкой оператора RETURNING
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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