Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обновление курсорадаптера / 21 сообщений из 21, страница 1 из 1
04.05.2010, 12:03
    #36610630
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
Добрый день!

Подскажите пожалуйста решение вот такой проблемы.
Есть в Оракле табличка. Я для нее написала тригер на ключевое поле (что бы присваивалось уникальное значение).
В Fox 9 - для нее создается курсорадаптер. И при дабавлении новой записи - заполняю все поля, кроме ключевого поля и даю команду TABLEUPDATE(0). Итого - в Оракле - все красиво. А в FOX в курсорадаптере - вместо уникального ключа пустое место. как обновить курсорадаптер, что бы он соответствовал текущему значению полей(конечно интересует ключевое поле) в табличке Оракла?
Пробовала разные варианты - но не помогло. Может кто сталкивался с подобным?
...
Рейтинг: 0 / 0
04.05.2010, 12:14
    #36610670
Обновление курсорадаптера
_Margo_,
разные - это какие?
...
Рейтинг: 0 / 0
04.05.2010, 12:19
    #36610681
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_Добрый день!

Подскажите пожалуйста решение вот такой проблемы.
Есть в Оракле табличка. Я для нее написала тригер на ключевое поле (что бы присваивалось уникальное значение).
В Fox 9 - для нее создается курсорадаптер. И при дабавлении новой записи - заполняю все поля, кроме ключевого поля и даю команду TABLEUPDATE(0). Итого - в Оракле - все красиво. А в FOX в курсорадаптере - вместо уникального ключа пустое место. как обновить курсорадаптер, что бы он соответствовал текущему значению полей(конечно интересует ключевое поле) в табличке Оракла?
Пробовала разные варианты - но не помогло. Может кто сталкивался с подобным?

неправильное решение, но простое:
1.курсоррефреш всего апосля

правильное:
либо настройка рефрешфилдс с дополнительным полем - уникальным идентификатором

либо tableupdate(.f., ....) в цикле по всем потроганным записям в курсоре
и ручной возврат добавленного значения посредством простого запроса к серверу
и получением последнего значения айди после отработки события вставки новой записи.
...
Рейтинг: 0 / 0
04.05.2010, 12:38
    #36610737
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
прошелмимо,

Вопрос по поводу правильного решения:
Вы подразумеваете что нужно заполнить свойство InsertCmdRefreshKeyFieldList ?
Но тогда все равно нужно будет делать после вставки записи .CursorRefresh? Или я не правильно поняла?
...
Рейтинг: 0 / 0
04.05.2010, 13:05
    #36610828
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_прошелмимо,

Вопрос по поводу правильного решения:
Вы подразумеваете что нужно заполнить свойство InsertCmdRefreshKeyFieldList ?
Но тогда все равно нужно будет делать после вставки записи .CursorRefresh? Или я не правильно поняла?

нет, есть такое понятие как авторефреш,
который происходит при правильном заполнении
некоторых свойств и использовании
дополнительного финта ушами в виде явно указанного
дополнительного уникального индефикатора.
...
Рейтинг: 0 / 0
04.05.2010, 13:25
    #36610887
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_,
Обновление курсорадаптера для БД VFP делаю в Grid.refrefresh так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
IF THIS.OBNOW
	LOCAL NZ
	NZ=RECNO("MBP")
[color=green]	This.RecordSource=""
	ThisForm.DataENVIRONMENT.MBP.CURSORFILL()
	This.RecordSource="MBP"
[/color]	KZ=RECCOUNT("MBP")
	IF MIN(NZ,KZ)> 0 
		GO MIN(NZ,KZ)
	ENDIF	
ELSE
	DODEFAULT()
ENDIF	
THIS.OBNOW=.T.
...
Рейтинг: 0 / 0
04.05.2010, 14:36
    #36611047
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
прошелмимо,

а можно уточнить какие именно (!) свойства нужно заполнить для того, что бы авторефреш зарботал?
...
Рейтинг: 0 / 0
04.05.2010, 14:39
    #36611054
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_прошелмимо,

а можно уточнить какие именно (!) свойства нужно заполнить для того, что бы авторефреш зарботал?

Вы готовы создать в табличке поле с дополнительным идентификатором?
и генерить вначале этот идентификатор на клиенте перед сохранением изменений?
...
Рейтинг: 0 / 0
04.05.2010, 14:50
    #36611074
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
вот тут просто дискуссия на тему,
но там координально неправильная задача создания кучи
вместо создания каскадных объектов
http://forum.foxclub.ru/read.php?29,277528,277962#msg-277962

вот прочитать на эту тему
http://forum.foxclub.ru/read.php?29,184077,195690#msg-195690

а вот классика жанра про авторефреш
http://forum.foxclub.ru/read.php?29,144340,144340#msg-144340
...
Рейтинг: 0 / 0
04.05.2010, 14:54
    #36611088
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
прошелмимо,

А для чего это нужно? Я что-то не пойму.
В табличке Оракла все отлично, зачем дополнительное поле?
Мне только его получить нужно. и если есть такое понятие как авторефреш, то очень хотелось бы научиться им пользоваться. Я пробовола заполнять свойство InsertCmdRefreshKeyFieldList, но не помогло. Что еще нужно заполнить?
...
Рейтинг: 0 / 0
04.05.2010, 14:55
    #36611092
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
относительно себя:

у меня универсальная библиотека с классом,
который себе взад возвращает айди добавленных записей вот так
(это особый метод у класса, который зовется в особом месте при
сохранении изменений в буфере и при добавлении новых записей тупо
дергает взад айди после вставки каждой новой записи)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with this

	if !empty(.keyFieldList) ;
	   and empty(.InsertCmdRefreshKeyFieldList) ;
	   and empty(.getKeyValue()) and .typeKeyField ="N" 
		
		Local lcSqlCmd
		Text to lcSqlCmd NOSHOW TEXTMERGE PRETEXT  15 
			select id=IDENT_CURRENT('[<<.tables>>]')
		EndText
		If oServer.sqlexec( lcSqlCmd, "tmp_lastId", set("Datasession"))> 0 
			replace (.keyFieldList) with tmp_lastId.id in (.Alias)
			use in select("tmp_lastId")
		EndIf
			  
	EndIf
	
endwith

можете заморочиться с авторерфрешем, но сразу взвешивайте накладные расходы,
так как там .... и я Вам код показывать пока не стану, видите у меня там заглушечка.
...
Рейтинг: 0 / 0
04.05.2010, 14:59
    #36611097
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_ но не помогло. Что еще нужно заполнить?

я ж предупреждал,
читайте классику жанра.

нужна явно уникальная ссылка "до того как",
поэтому пользуют доп.избыточное поле,
про которое я писал.
если Вы готовы на оные жертвы, то
вновь смотрим пример, Вы увидите, что вначале явно созд-ся запись с явным уник.идентиф-м,
а за тем уже кад, после пропихивания на сервер такой записи
по оному идентиф-ры рефрешит другие записи, в т.ч. и ключи.

может все-же дергать руками взад результат(значение) последнего
положенного в табличку счетчика?
...
Рейтинг: 0 / 0
04.05.2010, 15:14
    #36611132
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_,

Почему не используете метод CA CURSORFILL() ?
...
Рейтинг: 0 / 0
04.05.2010, 15:17
    #36611140
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
LUCIAN_Margo_,

Почему не используете метод CA CURSORFILL() ?

потому, что это глупо

во-первых есть курсоррефреш

а во-вторых глупо рефрешить весь курсор после вставки
к примеру только одной записи
...
Рейтинг: 0 / 0
04.05.2010, 15:19
    #36611144
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
LUCIAN,

Обновлять весь курсорадаптор не есть хорошо. Во-первых это не правильно. Просто, но не правильно. Пока табличка маленькая - еще ничего, но они имеют свойство расти. и если при вставке каждой строки обновлять курсор, а не текущую строку...
...
Рейтинг: 0 / 0
04.05.2010, 15:30
    #36611165
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
прошелмимо,

Прочла классику жанра. Честно, понятно не все.
Хорошо - нужно дополнительное поле.
Только в примере http://forum.foxclub.ru/read.php?29,144340,144340#msg-144340 - там при создании таблицы это поле объявлено как: f3 timestamp
В Оракле - Data Type для него ставить каким ???
...
Рейтинг: 0 / 0
04.05.2010, 15:52
    #36611200
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_прошелмимо,

Прочла классику жанра. Честно, понятно не все.
Хорошо - нужно дополнительное поле.
Только в примере http://forum.foxclub.ru/read.php?29,144340,144340#msg-144340 - там при создании таблицы это поле объявлено как: f3 timestamp
В Оракле - Data Type для него ставить каким ???

таймстамп - это просто так в примере

обычно используют
генерируемый на клиенте идентификатор,
применительно к MsSql это uniqueidentifier
автор
A column or local variable of uniqueidentifier data type can be initialized to a value in the following ways:

By using the NEWID function.


By converting from a string constant in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, in which each x is a hexadecimal digit in the range 0-9 or a-f. For example, 6F9619FF-8B86-D011-B42D-00C04FC964FF is a valid uniqueidentifier value.


что делать в Оракл я не знаю,
я с ним не работал никогда.
...
Рейтинг: 0 / 0
04.05.2010, 15:59
    #36611211
_Margo_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
прошелмимо,

Если генерить на клиенте еще один идентификатор (кроме уже автоматом создающегося в Оракле) - тогда не понятно зачем вообще на Оракле городить этот ID. Получается какое-то дублирование работы.
я и создала тригер в Оракле только потому что там ID уникальный создать просто, и не нужно изобретать велосипед, как например если это делать в Fox.
наверное придется плюнуть на простоту Оракла, и сочинять на фоксе уникальник ручками.
...
Рейтинг: 0 / 0
04.05.2010, 16:09
    #36611237
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_прошелмимо,

Если генерить на клиенте еще один идентификатор (кроме уже автоматом создающегося в Оракле) - тогда не понятно зачем вообще на Оракле городить этот ID. Получается какое-то дублирование работы.
я и создала тригер в Оракле только потому что там ID уникальный создать просто, и не нужно изобретать велосипед, как например если это делать в Fox.
наверное придется плюнуть на простоту Оракла, и сочинять на фоксе уникальник ручками.

ну не знаю, Вам решать.

версия счетчика + избыт.UID применима в распределенных БД.
...
Рейтинг: 0 / 0
04.05.2010, 18:00
    #36611475
Ffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
Можно в курсорадаптере иметь всего одну запись и ее рефрешить.
...
Рейтинг: 0 / 0
04.05.2010, 20:46
    #36611685
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление курсорадаптера
_Margo_Я пробовола заполнять свойство InsertCmdRefreshKeyFieldList, но не помогло. Что еще нужно заполнить?
Нужно два свойства заполнить

InsertCmdRefreshFieldList - список полей, значение которых будет обновлено после Insert
InsertCmdRefreshKeyFieldList - поле, или набор НЕ ключевых полей также однозначно идентифицирующих запись, по которым и будет осуществлен поиск новой записи

Следует отметить, что в этих свойствах указываются не имена полей таблицы собственно сервера, а соответствующие им имена полей курсора, полученного на стороне клиента.

Здесь смысл в том, что, как правило, большинство справочников имеют 2 идентификатора записи.

Первый - это суррогатный ключ, который как-то генерится внутри системы и используется для организации ссылочной целостности

Второй - это "естесственный ключ". Поле или набор полей, по которым пользователь визуально будет идентифицировать запись.

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


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