Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизКак получить только что добавленную запись Найти похожие ветки
← →
ded_di (2002-09-12 15:26) [0]Пишу
FIBTmpQuery.SQL.Add("insert into sheetaccounts (aaccount, paccount) values (?aaccount, ?paccount)");
FIBTmpQuery.ParamByName("aaccount").AsString:=ActiveCombo.Text;
FIBTmpQuery.ParamByName("paccount").AsString:=PassiveCombo.Text;
FIBTmpQuery.ExecQuery;
Триггером автоматически добавляется id. Как мне получить его значение? Спасибо.
← →
oss (2002-09-12 15:31) [1]наверно какой-то квери или тайблу сделать refresh
← →
Prooksius (2002-09-12 15:37) [2]Триггером никак. Сделай ХП, которая будет возвращать id, которое ты будешь подставлять в нужный параметр в FIBTmpQuery и, следовательно, будешь его знать.
Или делай такой запрос:
select gen_id(<generator_name>, 1) from rdb$database
который будет возвращать твой id.
← →
gek (2002-09-12 15:37) [3]Наверно сделать триггер после вставки
← →
SaS13 (2002-09-12 15:45) [4]А может просто взять максимум по id... если другие пользователи не добавляют параллельно.
← →
Prooksius (2002-09-12 15:48) [5]>>SaS13 © (12.09.02 15:45)
А вдруг добавляют? Потенциальный источник ошибок - зачем?
← →
oss (2002-09-12 15:51) [6]2 gek и что триггер делать будет ?
2 ded_di,
1.Prooksius дело говорит, сделай процедуру, куда будешь передвать все что надо добавить,
а она будет возвращать тете ид.
2.сразу после ExecQuery;, делай select max(id) from table :)
← →
Max Zyuzin (2002-09-12 15:54) [7]>ded_di © (12.09.02 15:26)
А в чем проблемма... закрывай и открывай заново тот компонент, который у тебя отображает данные (Query, Table).
← →
Prooksius (2002-09-12 15:55) [8]2 Max Zyuzin © (12.09.02 15:54)
А как тогда по-вашему на эту новую строчку спозиционироваться?
← →
ded_di (2002-09-12 15:59) [9]Ладно, всем спасибо.
Меня наверное устроит вариант
select gen_id(<generator_name>, 0) from rdb$database
но ведь если другой пользователь успел в это время добавить еще одну запись, то это будет неверно? Или значение генератора отображается в рамках транзакции?
← →
Max Zyuzin (2002-09-12 16:01) [10]Встречный вопрос - а как вы увидите эту новую строчку вообще? Елси не делать переоткрытие таблицы? Лучше ИМХО настроить RefreshSQL у IBDataSet если конечно для отображения пользуетесь именно им.
← →
Max Zyuzin (2002-09-12 16:02) [11]ded_di © (12.09.02 15:59)
Какими компонентами пользуетесь для отображения данных?
← →
ded_di (2002-09-12 16:02) [12]Никакие данные вообще не отображаются
← →
Prooksius (2002-09-12 16:10) [13]2 ded_di © (12.09.02 15:59)
Не так!!!
select gen_id(<generator_name>, 0) from rdb$database
Надо так
select gen_id(<generator_name>, 1) from rdb$database
Ты не понял. Я имел в виду следующее:
Достать id с помощью этого запроса, заполнить параметры FIBTmpQuery, куда добавить параметром еще и поле id.
Выполнить FIBTmpQuery и позиционироваться на строчку с id, которое уже имеешь.
2 Max Zyuzin © (12.09.02 16:01)
Абсолютно согласен!
← →
ded_di (2002-09-12 16:17) [14]2 Prooksius © (12.09.02 16:10)
Спасибо, я понял. Но объясните плз я прав в своем варианте говоря но ведь если другой пользователь успел в это время добавить еще одну запись, то это будет неверно?
← →
Max Zyuzin (2002-09-12 16:20) [15]>ded_di © (12.09.02 16:17)
Да такое вполне может произойти.
← →
Max Zyuzin (2002-09-12 16:22) [16]Генератор на то и генератор, что он вне транзакций.
← →
Johnmen (2002-09-12 16:24) [17]На мой взгляд самый простой и прозрачный вариант :
Создается ХП с вх./вых.параметрами, куда загоняется insert.
Параметры инсерта - входные пар-ры ХП, выходной пар-р - значение генератора.
Теперь работаем с TIBStoredProc.
:-))))
← →
Prooksius (2002-09-12 16:25) [18]2 ded_di © (12.09.02 16:17)
Неправ.
Генераторы не зависят от транзакций. Как только IB встретил gen_id(<gen_name>, n), генератор просто увеличивается на n.
Другими словами, если ты открыл транзакцию, потом сделал
select gen_id(<generator_name>, 1) from rdb$database,
и получил, например 25,
далее кто-то другой в другой транзакции (на другом компе) сделал такой же запрос, то он получит 26.
Поэтому ты должен получить id сначала, всего один раз и далее работать с этим id.
← →
Max Zyuzin (2002-09-12 16:33) [19]>Prooksius © (12.09.02 16:25)
Тогда придется отказаться от триггеров.
Лучше воспользоваться советом Johnmen © (12.09.02 16:24)
← →
ded_di (2002-09-12 16:35) [20]Я все понял. Еще раз спасибо всем.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c