Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Синхронизация наборов данных.   Найти похожие ветки 

 
VLAD-MAL   (2004-05-25 13:12) [0]

Извиняюсь, кого отвлек в ветке Interbase/Firebird... Этот вопрос касается вообще работе с базами данных в Delphi. И так:

Исходные данные:

1. На форме/фрейме в DBGrid отображается набор данных (используется TpFIBDataSet, но это неважно).

2. Вызывается для добавления/редактирования специальная форма, которая в отдельной транзакции выполняет добавление/редактирование, результат (в т.ч. новый ID записи при добавлении) возвращается в базовую форму.

3. При успешном обновлении выполняется Refresh текущей записи(с параметрами транзакций проблем нет: write, nowait, rec_version, read_committed; более того, возможна работа в той же самой транзакции). Все отображается ОК.

Вопрос: как в исходном наборе данных получить доступ к записи, не измененной, а добавленной во "внешней" процедуре?

Дополнительно:
----------------
- Набор данных может быть достаточно велик, поэтому вызов метода FullRefresh нежелателен;
- CachedUpdates = False.

---------------------------
Подскажите!

Спасибо.


 
Курдль ©   (2004-05-25 13:19) [1]

Принимать из вызываемой функции (которая открывает "спец. форму") параметры введенной записи и делать исходному НД append.


 
Соловьев ©   (2004-05-25 13:20) [2]


> Набор данных может быть достаточно велик, поэтому вызов
> метода FullRefresh нежелателен;

Как раз так и надо. Ну или Close, Open;
Исходный набор данных должен читать данные в транзакции:
read, nowait, rec_version, read_committed;


 
Соловьев ©   (2004-05-25 13:23) [3]


> [1] Курдль ©   (25.05.04 13:19)

действительно :) я пошел не вту степь :)


 
VLAD-MAL   (2004-05-25 13:35) [4]

1.
Принимать из вызываемой функции (которая открывает "спец. форму") параметры введенной записи и делать исходному НД append.

Ох, нельзя. На форме юзер вводит разные данные, которые д.б. введены в "исходный" НД, а потом - в "дополнительный". Именно в таком порядке. Поэтому, если был успешный Insert, а затем еще один Insert в другом НД (но той же транзакции), но неуспешный -> RollBack, то в исходном НД будет отображается фиктивная запись.

2.
Спасибо. Как я сам не догадался?


 
Johnmen ©   (2004-05-25 13:36) [5]

>Курдль ©   (25.05.04 13:19) [1]

Не пройдет.

>VLAD-MAL

См. Соловьев ©   (25.05.04 13:20) [2]


 
Курдль ©   (2004-05-25 13:44) [6]


> VLAD-MAL   (25.05.04 13:35) [4]
> Ох, нельзя. На форме юзер вводит разные данные, которые
> д.б. введены в "исходный" НД, а потом - в "дополнительный".
> Именно в таком порядке. Поэтому, если был успешный Insert,
> а затем еще один Insert в другом НД (но той же транзакции),
> но неуспешный -> RollBack, то в исходном НД будет отображается
> фиктивная запись.

Транзакции-шманзакции... А что, вызываемая функция не способна определить, успешна ли цепочка Insert-ов, или нет? Если успешна - пусть добавляет куда хочет и в какой угодно последователльности!

> Johnmen ©   (25.05.04 13:36) [5]
> >Курдль ©   (25.05.04 13:19) [1]
>
> Не пройдет.

Что не пройдет?
Не пройдет, если только в "специально обученной форме" применялся тот же ДатаСэт, что и в вызывающей. А кто же так делает?


 
VLAD-MAL   (2004-05-25 13:45) [7]

Спасибо - это я Соловьеву, только забыл смайлик добавить.

Короче - все просто: все делаем в том же набре данных, но на другой форме. В AfterUpdate. Если при повторном Insert случается ексцепшн, то не только Rillback, но и Delete фиктивной записи. При Update, естественно, Refresh вместо Delete.

--------------------
Спасибо за компанию.


 
Johnmen ©   (2004-05-25 13:49) [8]

>Курдль ©   (25.05.04 13:44) [6]
>Не пройдет, если только в "специально обученной форме"
>применялся тот же ДатаСэт, что и в вызывающей. А кто же так
>делает?

Не пройдет именно в том случае, кот.описан автором. Т.е. НЕ применялся тот же ДатаСэт


 
VLAD-MAL   (2004-05-25 16:01) [9]

Извините, не удержался: тут один чел предложил решение, полностью отвечающее первоначально поставленным условиям (правда, только для компонента TpFIBDataSet) использовать метод CacheInsert.

Может, кому интересно будет.


 
Johnmen ©   (2004-05-25 18:21) [10]

>VLAD-MAL  

Сколько ж у тебя ников... :)))

>(25.05.04 16:01) [9]

Что будет c содержимым буфера под CacheInsert, если DoRefresh ?
У меня нет однозначного ответа...



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
14-1086152367
Романов Р.В.
2004-06-02 08:59
2004.06.20
Поделитесь что хорошее произошло у Вас в последнее время


3-1085659592
dimm22
2004-05-27 16:06
2004.06.20
Подключаюсь к БД Access+Excel с помощью Microsoft.Jet.OLEDB.4.0


8-1081323310
X-Disa
2004-04-07 11:35
2004.06.20
Canvas 3D


6-1082989601
Style
2004-04-26 18:26
2004.06.20
Как програмно узнать сетевое имя рабочей группы для 9x, NT?


6-1083091682
Kme
2004-04-27 22:48
2004.06.20
Как узнать размер файла перед скачиванием