Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

refresh в ибдатасет [D7, IB6.x]


Страницы:   1 2

stud ©   (2004-08-25 15:28:00) 

набор получаю с помощью хранимой процедурой, возможно ли в такой ситуации использовать метод refresh?


Vemer   (2004-09-08 21:23:00) [1]

Ха, наступил на те-же грабли.. при попытке refresh датасета посылают далеко и хорошо..


stud   (2004-09-08 15:04:00) [2]

и всетаки как работать с рефреш при использовании хранимых процедур? не хочет оно обновляться!!


Zacho   (2004-08-26 20:05:00) [3]


> Vemer ©   (26.08.04 19:45) [21]

Да мало ли зачем. Например, для редактирования нужно выполнить несколько запросов, и/или запрос в отдельной транзакции.


Vemer   (2004-08-26 19:45:00) [4]

To Stud - А зачем IBSQL - ведь IBSDataset редактируемый набор. А если он висит на R/O транзакции - IBQuery ИМХО хватит.


Vemer   (2004-08-26 19:42:00) [5]

To -Sem-
Не путайте открытие/закрытие трензакции и датасета. Для Read Commited транзакции достаточно переоткрыть датасет. Саму тр-ю дергать не надо.


Zacho   (2004-08-26 11:56:00) [6]

-SeM-   (26.08.04 11:45) [15]
Чего ради ??? Не путай read committed и snapshot
Про IL очень подробно написано здесь: http//www.ibase.ru/devinfo/ibtrans.htm


stud   (2004-08-26 11:54:00) [7]

Repeatable Read - воспроизводимое (или повторяемое) чтение. Транзакция видит только те данные, которые существовали на момент ее старта.


stud   (2004-08-26 11:52:00) [8]


> -SeM-   (26.08.04 11:45) [15]

read commited  - читает подтвержденные транзакции. к моменту рефреш изменяющая транзакция уже подтверждена и все можно читать.
то что ты описал немного другие параметры должны быть.


-SeM-   (2004-08-26 11:49:00) [9]


> те изменения, которые произошли после первого открытия.

Вернее так:
те изменения других транзакций, которые произошли после первого открытия.
Свои видны сразу


-SeM-   (2004-08-26 11:45:00) [10]

Zacho ©   (26.08.04 11:33) [14]
Что такое транзакция? Это снимок согласно параметрам. И то что она read commited означает, что она берет те записи, которые были подтверджены при открытиитранзакции. Закрой ее и открой вновь и только тогда увидишь те изменения, которые произошли после первого открытия.


Zacho   (2004-08-26 11:33:00) [11]

-SeM-   (26.08.04 11:10) [13]
Все равно должно работать, ибо читающая транзакция - read commited.


-SeM-   (2004-08-26 11:10:00) [12]

stud ©   (26.08.04 10:20) [11]


> ibsql - работает в другой транзакции


Ты сам себе в ответил - они пользуются разными транзакциями


Zacho   (2004-08-26 10:42:00) [13]

Или все-таки пишущая транзакция не коммитится, или с запросом в RefreshSQL что-то не в порядке.


stud   (2004-08-26 10:20:00) [14]

1. действительно выполняется
2. изменения вносятся в текущую запись через ibsql, после чего выполняется refresh
параметры транзакции в рамках которой выполняется refresh
read
read_committed
rec_version
nowait
ibsql - работает в другой транзакции, которая нормально комитится.
после переоткрытия набора - все изменения видны


Zacho   (2004-08-26 10:06:00) [15]

Refresh должен нормально работать, неважно с ХП или нет.
Так что проверь:
1. Ты уверен, что RefreshSQL действительно выполняется ?
2. Ты уверен, что данные действительно меняются ? Может у тебя UpdateSQL не выполняется, а не Refresh.


stud   (2004-08-26 09:37:00) [16]


> Кстати, самым простым будет просто написать в RefreshSQL
> Select * from Myproc where ID=:ID,

так оно и есть на самом деле, только рефреша не происходит.

> Vemer ©   (25.08.04 19:00) [6]

это конечно универсальный способ. но перетаскивать постоянно весь набор не есть хорошо, хотя в моем случае и не смертельно.
хочется просто разобраться какая специфика этих методов при работе с ХП, или они вообще в данном случае не применимы.


Evgeny V   (2004-08-26 08:14:00) [17]

Кстати, самым простым будет просто написать в RefreshSQL Select * from Myproc where ID=:ID, правда тогда хранимая процедура будет выбирать все записи, а уже из выборки мы возьмем только то что надо


Evgeny V   (2004-08-26 07:25:00) [18]

Не пробовал, но интересно порассуждать. Что бы рефрешить запись нам надо знать ее ID. Тогда если передавать в хранимую процедуру параметром ID записи и там соответственно его обрабатывать, вытаскивать только одну запись, то в принципе можно. Надо только что бы процедура анализировала параметр ID, если он задан, то искать по одной ветке, где делается скажем select * from table where id=:ParamId, если Id например задан 0 или NULL( как сказать процедуре, что надо все записи, вариантов может быть несколько, на ваше усмотрение), выполнять просто  select * from table, в упрощенном варианте наверное так. В этом случае не потребуется переоткрывать весь датасет.


Vemer   (2004-08-25 19:00:00) [19]

Как вариант:
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);

Рефрешит с сохранением позиции курсора..


stud   (2004-08-25 17:11:00) [20]

проблемы такие, что запись не обновляется


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо