powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема при добавлении записи в дочернюю форму.
4 сообщений из 4, страница 1 из 1
Проблема при добавлении записи в дочернюю форму.
    #36609620
crimcol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте!
Есть форма. в Data Enviroment добавлены две связанных таблицы. В первой, например, фирмы машин, во второй модели.
Путем перетаскивания таблиц на форму создаются два грида, естественно они уже связанны.

Вопрос в том, что нужны основные кнопки: Add, Edit, Del, как для родительской таблицы так и для дочерней. Знаю что при Relation связи добавлять запись в дочернюю таблицу нельзя. При Append Blank для второй таблицы вылетает ошибка Сannot write to the record because it is use. При команде Insert - Record is not locked.

Дайте пример как и что надо сделать, чтоб выполнялись Add, Edit, Del действия, для двух таблиц и не нарушится ли функциональность если к второй таблице связать третью?

Так же создавал форму через Form Wizard все работает, но мне нужны два грида. Если ставить ещё один грид для первой таблицы, то по кнопке Add (на форме созданной конструктором), создать запись для дочереней таблицы уже нельзя...
Как это все делается? можно ли заменить Relation чем либо другим..?
FoxPro 8.0
...
Рейтинг: 0 / 0
Проблема при добавлении записи в дочернюю форму.
    #36609750
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crimcol
Имеется Grid1 и Grid2. Grid1 отражает ведущую таблицу-обьекты расхода,Grid2 отражает
ведомую таблицу материалов
Relation между этими таблицами не используется,а для отражения реляционной зависимости
используется PROCEDURE grid1.AfterRowColChange и PROCEDURE grid2.Refresh.
Все операции корректировки возможны,как в Grid1 так и в Grid2


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
PROCEDURE grid1.Init
		THIS.RecordSource=''

		SELECT NAIM,ID_RAS FROM SP_RAS WHERE ID_OTD=OTPP ORDER BY  1  INTO CURSOR CPOL

		THIS.RecordSource='CPOL'

		This.parent.Grid2.RECORDSOURCE=''
			SELECT SCET,naim_t2,ed_izm,cena,R_OST.KOL,R_OST.ID_KOL,R_OST.ID_OST FROM R_OST INNER JOIN OST ON OST.ID_OST=R_OST.ID_OST AND R_OST.ID_ZAT= 1  ;
				INTO CURSOR VZ_OST
		This.parent.Grid2.RECORDSOURCE='VZ_OST'

		PUBLIC RAS_ID
		RAS_ID= 0   
		THIS.SetAll("dynamicbackcolor", ;  
		  "IIF(CPOL.ID_RAS=RAS_ID, RGB(128,255,128), RGB(255,255,255))", "Column")
	ENDPROC

	PROCEDURE grid1.AfterRowColChange
		LPARAMETERS nColIndex
		This.parent.Grid2.Column2.Header1.Caption='Расходованы материалы на:'+CHR( 13 )+RTRIM(CPOL.naim)
		This.parent.Grid2.Refresh
		RAS_ID=CPOL.ID_RAS
		THIS.REFRESH
	ENDPROC




	PROCEDURE grid2.Refresh
		This.RecordSource=''
			SELECT OST.SCET,OST.naim_t2,OST.ed_izm,OST.cena,CR.KOL,CR.ID_KOL,CR.ID_OST FROM ;
			(SELECT KOL,ID_OST,ID_KOL FROM R_OST WHERE R_OST.ID_ZAT=CPOL.ID_RAS ) CR ;
			 INNER JOIN OST ON OST.ID_OST=CR.ID_OST ;
				ORDER BY ID_KOL INTO CURSOR VZ_OST READWRITE
		This.RecordSource='VZ_OST'
	ENDPROC


	PROCEDURE grid2.Init
		THIS.ADDPROPERTY("WYB", 0 )
	ENDPROC


	PROCEDURE grid2.RightClick
		LOCAL WYB,OST_ID
		WYB=THIS.WYB
		IF WYB= 0 
			DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW(),MCOL()

			DEFINE BAR  1  OF shortcut PROMPT "\<Вставить"

			IF NOT EOF()
				DEFINE BAR  2  OF shortcut PROMPT "\<Удалить"
			ENDIF


			IF WYB> 0 
				DEFINE BAR  3  OF shortcut PROMPT "\<Отменить"
			ENDIF


			ON SELECTION BAR  1  OF shortcut WYB= 1 
			IF NOT EOF()
				ON SELECTION BAR  2  OF shortcut WYB= 2 
			ENDIF


			IF WYB> 0 
				ON SELECTION BAR  3  OF shortcut WYB= 3 
			ENDIF


			IF WYB= 0 
				ACTIVATE POPUP shortcut
			ELSE
				ACTIVATE POPUP shortcut BAR WYB
			ENDIF
		ENDIF

		DO CASE
			CASE WYB= 1 
					DO FORM P_OST.scx TO OST_ID
					IF M.OST_ID> 0 
						SELECT R_OST
						APPEND BLANK
						REPLACE ID_OST WITH M.OST_ID,ID_ZAT WITH CPOL.ID_RAS,KOL WITH CSLD.KOL2
						UPDATE OST SET KOL1=KOL,KOL2= 0  WHERE ID_OST = M.OST_ID
						This.Column5.Text1.OST=CSLD.KOL2
												KOL_ID=ID_KOL
						THIS.Refresh
						SELECT VZ_OST
						LOCATE FOR ID_KOL=M.KOL_ID
					ENDIF &&RAS_ID> 0 
			CASE WYB= 2 
				OST_ID=VZ_OST.ID_OST
				KOLK=VZ_OST.KOL
				DELETE FROM R_OST WHERE R_OST.ID_KOL=VZ_OST.ID_KOL 
				UPDATE OST SET KOL1=KOL1-KOLK,KOL2=KOL2+KOLK WHERE ID_OST=M.OST_ID
				THIS.Refresh
		ENDCASE
		THIS.WYB= 0 
	ENDPROC

...
Рейтинг: 0 / 0
Проблема при добавлении записи в дочернюю форму.
    #36609760
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LUCIAN,
В таблице отражаемой с помощью Grid2 изменения делаются так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	PROCEDURE text1.Valid
		LOCAL KOL_ID,KOLK,OST_ID
		LOCAL ARRAY AOST( 1 , 3 ),KOLS( 1 )
		KOL_ID=VZ_OST.ID_KOL
		OST_ID=VZ_OST.ID_OST
		SELECT KOL FROM R_OST WHERE ID_KOL=M.KOL_ID INTO ARRAY KOLS
		SELECT KOL,KOL1,KOL2 FROM OST  WHERE ID_OST=M.OST_ID INTO ARRAY AOST
		IF THIS.VALUE > (AOST( 1 , 3 )+KOLS( 1 ))
			RETURN .F.
		ENDIF
		UPDATE R_OST SET KOL = THIS.VALUE WHERE ID_KOL = M.KOL_ID
		UPDATE OST SET KOL1 = AOST( 1 , 2 )-KOLS( 1 )+THIS.Value,KOL2=AOST( 1 , 3 )+KOLS( 1 )-THIS.VALUE WHERE OST.ID_OST=M.OST_ID
	ENDPROC
...
Рейтинг: 0 / 0
Проблема при добавлении записи в дочернюю форму.
    #36609776
crimcol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LUCIAN, спасибо за пример как можно заменить связь Relation

только что выяснил у себя в чем была проблема..
во второй таблице есть Primery Key, который устанавливался по умолчанию из моей функции autokey():
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
*Функция задает AutoInc в таблицу tbl, поле - fld, начально
*  значение - start, шаг - stp
FUNCTION autokey
PARAMETERS tbl,fld,start,stp
	SELECT  777 
	USE &tbl AGAIN
	CALCULATE MAX(&fld) TO x
	use
	IF x= 0 
		RETURN start
	ENDIF
RETURN x( 1 )+stp

Изменил содержание функции на такое:

Код: plaintext
1.
2.
3.
4.
FUNCTION autokey
PARAMETERS tbl,fld,start,stp
	DIMENSION x( 1 )
	SELECT MAX(&fld) FROM &tbl INTO ARRAY x
RETURN x( 1 )+stp

теперь ошибка не выскакивает. Спокойно пользуюсь Append Blank или Insert Into.
надеюсь, больше сюрпризов у меня не будет)) на самом деле очень долго искал решение проблемы

Расскажите почему была ошибка при использовании первого варианта
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема при добавлении записи в дочернюю форму.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]