powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сброс состояния записи с группы со всех записей у курсора курсорадаптера с табличн.буфериз
3 сообщений из 3, страница 1 из 1
Сброс состояния записи с группы со всех записей у курсора курсорадаптера с табличн.буфериз
    #35518180
имеем курсорадаптер

заливаем записи в него курсорфиллом
с каким-то условием ...

далее добавляю в него
(неважно откуда и как) однозначно существующие на сервере записи
(для того чтобы не делать филл или рефреш)

для того чтобы в последующем не полетело сохранение на сервер
нужно сбросить флдстейт в 11111111

делает ли кто-то так?

предполагаю
скан по записям и вызов в цикле setFldState

есть ли еще более простой способ скинуть состояние измененности
записей у курсора с табличной буфериз-ей?
...
Рейтинг: 0 / 0
Сброс состояния записи с группы со всех записей у курсора курсорадаптера с табличн.буфериз
    #35518523
работает через cursorattach
через cursorsetprop("SendUpdates",.f., .Alias), sedFldState номер не проходит

Код: 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.
close databases all

local lcConnString, lnConnection, ;
	loMyCAD as CursorAdapter, ;
	laErrors[ 1 ]

text to lcConnString noshow pretext  15 
	Driver=SQL Native Client;
	SERVER=...;
	DATABASE=....;
	uid=sa;
	pwd=as;
endtext	

lnConnection = sqlstringconnect(lcConnString)
if lnConnection<= 0 
   messagebox('не подцепился')
   return 
endif

text to lcSqlCmd noshow pretext  7 
	if object_id('tempdb..#t') is not null drop table #t
	create table #t ( id int, bigDate datetime, nnn int, timestamp datetime )
	insert into #t 
			values ( 1 , getdate(),  0 , getdate())
	insert into #t 
			values ( 2 , getdate(),  0 , getdate())
endtext
if sqlexec(lnConnection, lcSqlCmd)< 0 
	messagebox('не создал табличку')
    return 
endif 

loMyCAD = createobject('CursorAdapter')
with loMyCAD
	.Alias              = 'MyAlias'
	.DataSourceType     = 'ODBC'
	.DataSource         = lnConnection
	.SelectCmd          = "select * from #t"
	.Tables             = 't'
	.BufferModeOverride =  5 
	.cursorschema       = "id i, bigDate d(8,0), nnn i, timestamp t"
	.keyFieldList	= 'Id'
	.UpdatableFieldList = 'bigDate, nnn, timestamp'
	.updateNameList     = 'Id t.id, bigDate t.bigDate, nnn t.nnn, timestamp t.bigDate'
	if .CursorFill(!empty(.cursorschema),.f.)
		select * ;
			from (.alias) ;
			into cursor tt readwrite 
		append blank 
		append blank 
		append blank 
		.cursorattach("tt")
		set multilocks on
		cursorsetprop("Buffering", 5 )
		tableupdate(.t., .f.)
		.cursorrefresh()
		browse
		go top
		replace nnn with  1 
		tableupdate(.t., .f.)
		.cursorrefresh()
		browse
	else
		aerror(laErrors)
		messagebox(laErrors[ 2 ])
	endif .CursorFill(.t.)
endwith


трейс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if object_id('tempdb..#t') is not null drop table #t
create table #t ( id int, bigDate datetime, nnn int, timestamp datetime )
insert into #t 
values ( 1 , getdate(),  0 , getdate())
insert into #t 
values ( 2 , getdate(),  0 , getdate())
go
select * from #t
go
exec sp_executesql N'UPDATE t SET nnn=@P1  WHERE id=@P2  AND nnn=@P3 ',N'@P1 float,@P2 int,@P3 int', 1 , 1 , 0 
go
...
Рейтинг: 0 / 0
Сброс состояния записи с группы со всех записей у курсора курсорадаптера с табличн.буфериз
    #35518717
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
setFldState() - сбрасывает признак модификации буфера поля и это поле исключается из списка обновляемых полей при формировании инструкции UPDATE-SQL или INSERT-SQL.

Но эта функция не сбрасывает признак модификации буфера записи. Т.е. функция GetNextModified() покажет, что у этой записи буфер изменялся.

Единственный способ сбросить буфер - это его сбросить на самом деле. Через TableUpdate().

Однако если предварительно через setFldState() сбросить флаги модификации для всех полей, то TableUpdate() физически ничего на сервере не отправит.

Значит, надо сначала через setFldState() сбросить флаги модификации для всех полей, а потом через TableUpdate() сбросить флаг модификации записи.

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


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