Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.032 c
3-1094361702
Гаврилов В.А.
2004-09-05 09:21
2004.10.03
Работа с Microsoft Access


1-1095430417
Nils
2004-09-17 18:13
2004.10.03
Глюк с Exel2000 в D7


1-1095326364
_PG_
2004-09-16 13:19
2004.10.03
Можно ли изменить ФОНТ заголовка окна?


14-1095147454
Starter
2004-09-14 11:37
2004.10.03
StarCraft Expansion


14-1095008063
jack128
2004-09-12 20:54
2004.10.03
Б-деревья





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский