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

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

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

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

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

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

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

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

нет, есть такое понятие как авторефреш,
который происходит при правильном заполнении
некоторых свойств и использовании
дополнительного финта ушами в виде явно указанного
дополнительного уникального индефикатора.
...
Рейтинг: 0 / 0
Обновление курсорадаптера
    #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
Обновление курсорадаптера
    #36611047
_Margo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,

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

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

Вы готовы создать в табличке поле с дополнительным идентификатором?
и генерить вначале этот идентификатор на клиенте перед сохранением изменений?
...
Рейтинг: 0 / 0
Обновление курсорадаптера
    #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
Обновление курсорадаптера
    #36611088
_Margo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,

А для чего это нужно? Я что-то не пойму.
В табличке Оракла все отлично, зачем дополнительное поле?
Мне только его получить нужно. и если есть такое понятие как авторефреш, то очень хотелось бы научиться им пользоваться. Я пробовола заполнять свойство InsertCmdRefreshKeyFieldList, но не помогло. Что еще нужно заполнить?
...
Рейтинг: 0 / 0
Обновление курсорадаптера
    #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
Обновление курсорадаптера
    #36611097
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Margo_ но не помогло. Что еще нужно заполнить?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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