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

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

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

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

Типа так?:

Код: 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
02.10.2018, 14:29
    #39711698
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX 19_19 вопрос с поддержкой оператора RETURNING
Konstantin-78Типа так?:

Нет. Немного не так. Любые значения возвращаются через Fields. И запрос с RETURNING
рассматривается не как select, а как execute procedure.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.10.2018, 14:40
    #39711713
Konstantin-78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX 19_19 вопрос с поддержкой оператора RETURNING
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
02.10.2018, 14:45
    #39711716
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX 19_19 вопрос с поддержкой оператора RETURNING
Konstantin-78Вы имели в виду вот так?

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

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

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

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

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

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

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

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

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


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

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

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


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