Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Внизrefresh в ибдатасет Найти похожие ветки
← →
stud © (2004-08-25 15:28) [0]набор получаю с помощью хранимой процедурой, возможно ли в такой ситуации использовать метод refresh?
← →
}{ander © (2004-08-25 15:38) [1]Использовать для чего?
← →
stud © (2004-08-25 15:39) [2]а для чего обычно используют refresh???? обновления текущей записи
← →
}{ander © (2004-08-25 15:44) [3]
Refetches data from the database to update a dataset’s view of data.
procedure Refresh;
Description
Call Refresh to ensure that an application has the latest data from a database. For example, when an application turns off filtering for a dataset, it should immediately call Refresh to display all records in the dataset, not just those that used to meet the filter condition.
Ты хочешь использовать его для обновления, или модификации? Если для обновления, тогда какие проблемы?
← →
Rule © (2004-08-25 16:39) [4]}{ander © (25.08.04 15:44) [3]
Действительно, помоему ничего от этого не менятеся
← →
stud © (2004-08-25 17:11) [5]проблемы такие, что запись не обновляется
← →
Vemer © (2004-08-25 19:00) [6]Как вариант:
Procedure Refresh_MyDataset(My_Int:Varuant);
Begin
My_Dataset.Close;
My_Dataset.Open;
My_Dataset.Locate("Dataset_IDField",My_Int,[]);
End;
Использование:Refresh_MyDataset(Dataset_IDField.Value);
Рефрешит с сохранением позиции курсора..
← →
Evgeny V © (2004-08-26 07:25) [7]Не пробовал, но интересно порассуждать. Что бы рефрешить запись нам надо знать ее ID. Тогда если передавать в хранимую процедуру параметром ID записи и там соответственно его обрабатывать, вытаскивать только одну запись, то в принципе можно. Надо только что бы процедура анализировала параметр ID, если он задан, то искать по одной ветке, где делается скажем select * from table where id=:ParamId, если Id например задан 0 или NULL( как сказать процедуре, что надо все записи, вариантов может быть несколько, на ваше усмотрение), выполнять просто select * from table, в упрощенном варианте наверное так. В этом случае не потребуется переоткрывать весь датасет.
← →
Evgeny V © (2004-08-26 08:14) [8]Кстати, самым простым будет просто написать в RefreshSQL Select * from Myproc where ID=:ID, правда тогда хранимая процедура будет выбирать все записи, а уже из выборки мы возьмем только то что надо
← →
stud © (2004-08-26 09:37) [9]
> Кстати, самым простым будет просто написать в RefreshSQL
> Select * from Myproc where ID=:ID,
так оно и есть на самом деле, только рефреша не происходит.
> Vemer © (25.08.04 19:00) [6]
это конечно универсальный способ. но перетаскивать постоянно весь набор не есть хорошо, хотя в моем случае и не смертельно.
хочется просто разобраться какая специфика этих методов при работе с ХП, или они вообще в данном случае не применимы.
← →
Zacho © (2004-08-26 10:06) [10]Refresh должен нормально работать, неважно с ХП или нет.
Так что проверь:
1. Ты уверен, что RefreshSQL действительно выполняется ?
2. Ты уверен, что данные действительно меняются ? Может у тебя UpdateSQL не выполняется, а не Refresh.
← →
stud © (2004-08-26 10:20) [11]1. действительно выполняется
2. изменения вносятся в текущую запись через ibsql, после чего выполняется refresh
параметры транзакции в рамках которой выполняется refresh
read
read_committed
rec_version
nowait
ibsql - работает в другой транзакции, которая нормально комитится.
после переоткрытия набора - все изменения видны
← →
Zacho © (2004-08-26 10:42) [12]Или все-таки пишущая транзакция не коммитится, или с запросом в RefreshSQL что-то не в порядке.
← →
-SeM- (2004-08-26 11:10) [13]stud © (26.08.04 10:20) [11]
> ibsql - работает в другой транзакции
Ты сам себе в ответил - они пользуются разными транзакциями
← →
Zacho © (2004-08-26 11:33) [14]-SeM- (26.08.04 11:10) [13]
Все равно должно работать, ибо читающая транзакция - read commited.
← →
-SeM- (2004-08-26 11:45) [15]Zacho © (26.08.04 11:33) [14]
Что такое транзакция? Это снимок согласно параметрам. И то что она read commited означает, что она берет те записи, которые были подтверджены при открытии транзакции. Закрой ее и открой вновь и только тогда увидишь те изменения, которые произошли после первого открытия.
← →
-SeM- (2004-08-26 11:49) [16]
> те изменения, которые произошли после первого открытия.
Вернее так:
те изменения других транзакций, которые произошли после первого открытия.
Свои видны сразу
← →
stud © (2004-08-26 11:52) [17]
> -SeM- (26.08.04 11:45) [15]
read commited - читает подтвержденные транзакции. к моменту рефреш изменяющая транзакция уже подтверждена и все можно читать.
то что ты описал немного другие параметры должны быть.
← →
stud © (2004-08-26 11:54) [18]Repeatable Read - воспроизводимое (или повторяемое) чтение. Транзакция видит только те данные, которые существовали на момент ее старта.
← →
Zacho © (2004-08-26 11:56) [19]-SeM- (26.08.04 11:45) [15]
Чего ради ??? Не путай read committed и snapshot
Про IL очень подробно написано здесь: http//www.ibase.ru/devinfo/ibtrans.htm
← →
Vemer © (2004-08-26 19:42) [20]To -Sem-
Не путайте открытие/закрытие трензакции и датасета. Для Read Commited транзакции достаточно переоткрыть датасет. Саму тр-ю дергать не надо.
← →
Vemer © (2004-08-26 19:45) [21]To Stud - А зачем IBSQL - ведь IBSDataset редактируемый набор. А если он висит на R/O транзакции - IBQuery ИМХО хватит.
← →
Zacho © (2004-08-26 20:05) [22]
> Vemer © (26.08.04 19:45) [21]
Да мало ли зачем. Например, для редактирования нужно выполнить несколько запросов, и/или запрос в отдельной транзакции.
← →
stud © (2004-09-08 15:04) [23]и всетаки как работать с рефреш при использовании хранимых процедур? не хочет оно обновляться!!
← →
Vemer © (2004-09-08 21:23) [24]Ха, наступил на те-же грабли.. при попытке refresh датасета посылают далеко и хорошо..
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.039 c