Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Вниз

Firebird + FIBPlus методы работы с составным документом   Найти похожие ветки 

 
RDA   (2006-10-12 18:07) [0]

Как правильно обработать составной документ (мастер и деталь одновременно создаються и редактируються). Я делаю так но пара моментов в коде мне не очень нравиться, может кто подскажет более правильный способ?

Код - http://rapidshare.de/files/36464288/Test2.rar


 
Johnmen ©   (2006-10-12 18:08) [1]

Какчать вряд ли кто-то будет. Ты лучше на пальцах объясни. Для начала...


 
ANB ©   (2006-10-12 18:25) [2]

2 подхода :
1) связать мастер и детал
2) ручками заполнять по событиям параметры и переоткрывать наборы данных.

второй способ геморройнее, но надежнее (хотя обычно эта повышенная надежность идет от незнания всех тонкостей первого способа).


 
RDA   (2006-10-13 11:05) [3]

to Johnmen
Значит так. Для примера две таблицы
Мастер
CREATE TABLE DOCTITLE (
   DT_ID DINTEGER NOT NULL,
   DT_NOMER DINTEGER NOT NULL,
   DT_DATE DDATE DEFAULT CURRENT_DATE NOT NULL,
   DT_NAME DVARCHAR050 DEFAULT "Документ №");
Деталь
CREATE TABLE DOCBODY (
   DB_ID DINTEGER NOT NULL,
   DB_NAME DVARCHAR050 DEFAULT "Товар №",
   DB_SUMA DFLOAT DEFAULT "0" NOT NULL,
   DT_ID DINTEGER NOT NULL);

Документ типа счет/накладная
Работа идет в контексте двух транзакций:
Read {read nowait rec_version read_committed}
Update {write nowait concurrency}

Настройки плюсов (TpFIBDataSet).
Мастер:
AutoCommit = True;
Деталь:
AutoCommit = False;
CachedUpdates = True;

Запрос на выборку документов:
SELECT
   DT_ID,
   DT_NOMER,
   DT_DATE,
   DT_NAME,
   (SELECT SUM(DB_SUMA) FROM DOCBODY WHERE DOCBODY.DT_ID = DOCTITLE.DT_ID) AS DT_SUMA
FROM
   DOCTITLE
ORDER BY
   DT_NOMER

При сохранении нового/измененного документа

tbDocTitle.Post;
tbDocBody.ApplyUpdToBase;
if tbDocBody.UpdateTransaction.Active = True then
 tbDocBody.UpdateTransaction.Commit;
tbDocTitle.ReopenLocate("DT_ID");

Остальная логика тривиальна.

Хотелось бы узнать какие есть иные способы. Желатьно чтобы использовались DBAware компоненты в формах дабы не городить огород. Вроде бы можно реализовать с использованием ClientDataSet - но техники данной реализации не знаю.


 
Johnmen ©   (2006-10-13 11:36) [4]


> RDA


Методика едина:
1. стартуем транзакцию
2. изменяем/вставляем в Мастерную таблицу
3. изменяем/вставляем в Детальную таблицу
4. подтверждаем/откатываем транзакцию

Никаких автокоммитов не допускаем...


 
iva ©   (2006-10-13 12:04) [5]

возможно тебе поможет вот это http://www.devrace.com/ru/fibplus/articles/1163.php, но там еще есть продолжение (несколько частей)


 
iva ©   (2006-10-13 12:11) [6]

и еще, для TpFIBDataSet.DetailConditions обрати внимание на dcForceOpen и dcWiteEndMasterScroll, на префикс "MAS_" в insert, update запросах.


 
RDA   (2006-10-13 14:34) [7]

Johnmen

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


 
atruhin ©   (2006-10-13 14:39) [8]

write
wait - в зависимости от логики
rec_version
read_committed


 
Zacho ©   (2006-10-13 17:29) [9]

RDA   (13.10.06 14:34) [7]

Читай http://www.ibase.ru/devinfo/ibtrans.htm



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

Форум: "Базы";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
15-1165211854
DmitriyR
2006-12-04 08:57
2006.12.24
умер диск с Delphi 6


15-1164896633
Mozart
2006-11-30 17:23
2006.12.24
Посоветуйте хостинг...


3-1160633869
svt
2006-10-12 10:17
2006.12.24
Подскажите пожайлусата как правильно и рационально


15-1165102666
Petr V. Abramov
2006-12-03 02:37
2006.12.24
на правах рекламы


2-1165164911
FIL-23
2006-12-03 19:55
2006.12.24
вывод только части информации из dbcombox :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский