Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отображение в таблице изменений сделаных в связаном гриде / 18 сообщений из 18, страница 1 из 1
30.03.2007, 12:27
    #34427102
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Запутался в трёх соснах.
Есть грид, к нему привязана таблица MyTab (fld CHAR(75)):
ThisForm.Grid1.RecordSource='MyTab'
Редактирую запись в гриде (набираю текст в поле fld), нажимаю сохранить (передача данных из таблицы MS SQL), при этом смотрю значение поля fld, оказывается оно пустое, хотя в гриде для этой записи есть текст. Если сделать:
SELECT MyTab
BROWSE
данные появляются.
Как это обяснить? Где собака зарыта?
Большое спасибо!
...
Рейтинг: 0 / 0
30.03.2007, 12:42
    #34427162
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
а что происходит

при нажатии Сохранить??

код покажите

и как Вы и чего привязываете

у Вас РВ??
...
Рейтинг: 0 / 0
30.03.2007, 12:48
    #34427192
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Привязываю:
WITH ThisFormSet.Form1.Grid1
ThisFormSet.Form1.Grid1.RecordSource = ''

.RecordSource = 'tab_Mb'
.Column1.ControlSource = 'tab_Mb.br'
.Column2.ControlSource = 'tab_Mb.mb'
.Column2.SetFocus
ENDWITH

При редактировании записи в гриде запоминаю номер строки:
SELECT _Mb
STORE RECNO() ThisFormSet.nRec

Сохраняю:
DECLARE uX(2)

SELECT * FROM tab_Mb WHERE RECNO()=ThisFormSet.nRec INTO CURSOR CurTmpSav
STORE br TO uX(1)
STORE tab_Mb.mb TO uX(2)

nR = SQLEXEC(_Screen.nCon_DCEX,'UPDATE spr_nmb SET mb=?uX(2) WHERE br=?uX(2)')
...
Рейтинг: 0 / 0
30.03.2007, 12:55
    #34427225
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Редактируется поле tab_Mb.mb, проблемма иммено в нём, данные не отображаются. Отображаются только после BROWSE или когда по завершению ввода текста в ячейку грида нажать ENTER, тогда всё попадает нормально
...
Рейтинг: 0 / 0
30.03.2007, 13:06
    #34427267
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
если у Вас 8 или 9 версия лисы, то
поиграйтесь с этим примером

это КурсорАдаптер

поиском прочитайте зачем это нужно
...
Рейтинг: 0 / 0
30.03.2007, 13:11
    #34427292
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде

У как все запущено !!!
Зачем такие сложности ?
для чего эти запоминания номера записи , отборки в курсоры и потом в массивы ?
в общем-то достаточно просто

nR = SQLEXEC(_Screen.nCon_DCEX,'UPDATE spr_nmb SET mb=?tab_Mb.mb WHERE br=?tab_Mb.br')

Кстати в приведенном коде есть нестыковки
В гриде источник
.RecordSource = 'tab_Mb'
...
Запоминаете recno вы
SELECT _Mb
STORE RECNO() ThisFormSet.nRec
...
nR = SQLEXEC(_Screen.nCon_DCEX,'UPDATE spr_nmb SET mb=?uX(2) WHERE br=?uX(2) ')
Тут непонятно - почему и там и там uX(2) ?


Гораздо проще построить Remote View или если у вас VFP 8-9 использовать CursorAdapter.
Но если все-таки хотите сделать по своему, уточните - где какой код у вас "вызывается", т.е. в каких методах и каких объектов.
...
Рейтинг: 0 / 0
30.03.2007, 13:20
    #34427333
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
2 -=AlexiS=-

видели бы Вы бубны,
когда народ пытается продернуть
локал после отработки ХП

понакурятся травы ...
...
Рейтинг: 0 / 0
30.03.2007, 16:12
    #34428009
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
В методе InteractiveChange обекта Grid1.Column2.Text1 написал следующий текст:
cX1=This.Value
cX2=tab_mb.mb
WAIT This.Value+CHR(13)+tab_mb.mb WINDOW NOWAIT
когда в этом обьекту пишу текст, переменная cX1 отображает этот текст, а - cX2 нет.
Я думал что данные сразу при вводе в text грида попадают в связаную таблицу, оказывается в моём случае это не так. Подскажите в какой момент вводимые в грид данные появляются в таблице? Знаю что если сделать BROWSE этой таблице, то данные появляются. Какой тут принцып работы?
Болшьшое спасибо!
...
Рейтинг: 0 / 0
30.03.2007, 16:19
    #34428032
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Они там появляются сразу после выхода из текстбокса. Так как выхода еще не было, то ничего и не меняется.
...
Рейтинг: 0 / 0
30.03.2007, 16:21
    #34428038
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Код: 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.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.Show
RETURN


DEFINE CLASS form1 AS form


	Top =  0 
	Left =  0 
	Height =  250 
	Width =  481 
	DoCreate = .T.
	Caption = "Form1"
	Name = "Form1"


	ADD OBJECT grid1 AS grid WITH ;
		ColumnCount =  3 , ;
		Height =  200 , ;
		Left =  24 , ;
		Top =  24 , ;
		Width =  276 , ;
		Name = "Grid1", ;
		Column1.Name = "Column1", ;
		Column2.Name = "Column2", ;
		Column3.Name = "Column3"


	ADD OBJECT form1.grid1.column1.header1 AS header WITH ;
		Caption = "Header1", ;
		Name = "Header1"


	ADD OBJECT form1.grid1.column1.text1 AS textbox WITH ;
		BorderStyle =  0 , ;
		Margin =  0 , ;
		ForeColor = RGB( 0 , 0 , 0 ), ;
		BackColor = RGB( 255 , 255 , 255 ), ;
		Name = "Text1"


	ADD OBJECT form1.grid1.column2.header1 AS header WITH ;
		Caption = "Header1", ;
		Name = "Header1"


	ADD OBJECT form1.grid1.column2.text1 AS textbox WITH ;
		BorderStyle =  0 , ;
		Margin =  0 , ;
		ForeColor = RGB( 0 , 0 , 0 ), ;
		BackColor = RGB( 255 , 255 , 255 ), ;
		Name = "Text1"


	ADD OBJECT form1.grid1.column3.header1 AS header WITH ;
		Caption = "Header1", ;
		Name = "Header1"


	ADD OBJECT form1.grid1.column3.text1 AS textbox WITH ;
		BorderStyle =  0 , ;
		Margin =  0 , ;
		ForeColor = RGB( 0 , 0 , 0 ), ;
		BackColor = RGB( 255 , 255 , 255 ), ;
		Name = "Text1"


	ADD OBJECT text1 AS textbox WITH ;
		ControlSource = "tt.t", ;
		Height =  23 , ;
		Left =  348 , ;
		Top =  48 , ;
		Width =  100 , ;
		Name = "Text1"


	ADD OBJECT text2 AS textbox WITH ;
		ControlSource = "tt.s", ;
		Height =  23 , ;
		Left =  348 , ;
		Top =  84 , ;
		Width =  100 , ;
		Name = "Text2"


	ADD OBJECT text3 AS textbox WITH ;
		ControlSource = "tt.p", ;
		Height =  23 , ;
		Left =  348 , ;
		Top =  132 , ;
		Width =  100 , ;
		Name = "Text3"


	PROCEDURE Load
		create cursor tt (t i, s i, p i)

		insert into tt values ( 1 , 2 , 3 )
		insert into tt values ( 2 , 3 , 4 )
		insert into tt values ( 3 , 5 , 6 )

		select tt
		go top
	ENDPROC


	PROCEDURE grid1.AfterRowColChange
		LPARAMETERS nColIndex
		thisform.text1.refresh()
		thisform.text2.refresh()
		thisform.text3.refresh()
	ENDPROC


ENDDEFINE
...
Рейтинг: 0 / 0
30.03.2007, 16:24
    #34428045
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
после того как вы этот самый ввод завершите.
ну никак ни в InteractiveChange .
Изменения пойдут после Valid .
...
Рейтинг: 0 / 0
30.03.2007, 16:46
    #34428134
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Окончание ввода наступает тогда, когда text грида теряет фокус, так?
У меня на форме кроме грида ничего нет, данные на сервер я передаю по нажатию на пункт меню:
ON SELECTION PAD pad11 OF MaineMenu oFrm1.SavClmn()

Метод oFrm1.SavClmn() следующий (по совету -=AlexiS=- я его переписал, большое спасибо):
nR = SQLEXEC(_Screen.nCon_DCEX,'UPDATE spr_nmb SET mb=?tab_mb.mb WHERE cex=?oFrm.cCex AND br=?tab_mb.br')

Получается text грида фокус не теряет и введённые данные не попадают в tab_mb. Может написать:
KEYBOARD{TAB}
nR = SQLEXEC(_Screen.nCon_DCEX,'UPDATE spr_nmb SET mb=?tab_mb.mb WHERE cex=?oFrm.cCex AND br=?tab_mb.br')

но так тоже не работает. Как тут быть?
...
Рейтинг: 0 / 0
30.03.2007, 16:50
    #34428146
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
2 shanton

Вы что решили придумать новый велосипед???

есть курсорадаптер
там Вы можете установить
2 типа буферизации (по строке или на всю таблицу)

и не нужно отслеживать никаких нащатий и событий,
лиса за Вас все сделает

ну в самом-то деле,
перестаньте себя и лису мичить
...
Рейтинг: 0 / 0
30.03.2007, 16:54
    #34428162
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
а если фокс не 9-ый? У меня правда 9-ый, но с курсорадаптером пока не дружу, будет время постараюсь освоить. Счас время поджимает... Застрял на пустом месте...
...
Рейтинг: 0 / 0
30.03.2007, 17:03
    #34428195
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
ну неужто плясать
с бубном на пустом месте есть время,
а заняться изучением принципа работы курсорадаптера нет???

а удалять и вставлять также руками будете??
...
Рейтинг: 0 / 0
30.03.2007, 17:10
    #34428225
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Если это пункт меню , то потеря фокуса не происходит.
И это правильно - иначе как пользоваться например меню "Правка".
Вообще-тото правильно бы было перенести все на форму- создать кнопки Добавить/Удалить /Сохранить и там обрабатывать.
И прислушайтесь наконец к советам- пользуйтесь CA , как для начинающего - это проше и быстрее.
Поищите по форуму - много раз обсуждалось,
...
Рейтинг: 0 / 0
30.03.2007, 17:35
    #34428320
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Прежде чем брать данные с таблицы, в которую я с грида их внёс, я этот грид:
ThisForm.Grid1.RecordSource=''
а дальше:
nR = SQLEXEC(_Screen.nCon_DCEX,'UPDATE spr_nmb SET mb=?tab_mb.mb WHERE cex=?oFrm.cCex AND br=?tab_mb.br')
и всё нормально. Извените шо морочил голову.
Спасибо за комплемент:
авторИ прислушайтесь наконец к советам- пользуйтесь CA , как для начинающего - это проше и быстрее
Четыры года уже как начинающий. Да... как научился так и работаю...
Но всё равно спасибо, когда-то надо начинать правильно писать!
...
Рейтинг: 0 / 0
30.03.2007, 17:40
    #34428335
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение в таблице изменений сделаных в связаном гриде
Для завершения ввода в Grid помогает "передергивание" указателя записи

Код: plaintext
1.
2.
select tab_Mb
GO Recno()

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


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