powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / InGrid
33 сообщений из 33, показаны все 2 страниц
InGrid
    #36072785
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помоготе плиз!
Использую для инкрементного поиска по гриду класс InGrid, прост в использовании. Но все было ок!, когда записей в таблице было 10-15 тыс, сейчас их 22 тыс. и поиск стал тормозить.
Подскажите как можно модифицировать этот класс, что-бы ускорить поиск.
...
Рейтинг: 0 / 0
InGrid
    #36073101
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глянул мельком. Мне кажетсяв этой модификации класса отключен поиск по индексу (SEEK). По индексу поиск должен быть значительно быстрее. Попробуйте прикрутить SEEK, оригинальный класс лежал в решениях на Foxclub'е.
...
Рейтинг: 0 / 0
InGrid
    #36074408
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DagГлянул мельком. Мне кажетсяв этой модификации класса отключен поиск по индексу (SEEK). По индексу поиск должен быть значительно быстрее. Попробуйте прикрутить SEEK, оригинальный класс лежал в решениях на Foxclub'е.
Seek в этом класе не используеться, это я сам пытался, но не знаю как заменить LOCATE cSearchFor $ cSearchIn на SEEK.
...
Рейтинг: 0 / 0
InGrid
    #36074473
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдрал из работающего приложения. Попробуй разобраться.
...
Рейтинг: 0 / 0
InGrid
    #36074479
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag,
спасибо попробую
...
Рейтинг: 0 / 0
InGrid
    #36074528
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag,
требует base.vcx
...
Рейтинг: 0 / 0
InGrid
    #36074604
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базовых классах нет ничего интересного. Просто копия с фокспрошных. Сбрасываю программный код.
...
Рейтинг: 0 / 0
InGrid
    #36074607
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
InGrid
    #36074821
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag,
Все хорошо, но если есть поле ОАО "ЕКЛМН" и я не помню ОАО, ООО, ЗАО, ЧП, я набираю просто ЕКЛМН, поиск уже не производиться, и это есть не хорошо.
...
Рейтинг: 0 / 0
InGrid
    #36075334
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, есть такой недостаток. В этих случаях у меня есть колонка краткого наименования - ЕКЛМН ОАО.
Если нужен поиск с произвольного места - то теряем скорость. Нет совершенства в этом мире.
...
Рейтинг: 0 / 0
InGrid
    #36075403
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag,
Спасибо
...
Рейтинг: 0 / 0
InGrid
    #36076786
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел в нете для VB такую вещь, помогите пожалуйста переделать под фокс для грида
авторСовет 59. Быстрый поиск строки в Combo Box

Для быстрого поиска нужной строки в списке, в частности в элементе управления Combo Box, можно использовать функцию API SendMessage() (вариант для 16-разрядных приложений), обеспечивающую более эффективное выполнение программы, чем аналогичный код на VB. Для этого можно, например, прибегнуть к процедуре CBFindString:

Declare Function SendMessage Lib "User" _
(ByVal hWnd As Integer, ByVal wMsg As Integer, _
ByVal wParam As Integer, lParam As Any) As Long

Sub CBFindString(ctlEdit As Control, sSearch As String)
Dim lPos As Long
Const CB_FINDSTRING = &H40C
lPos = SendMessage(ctlEdit.hWnd, CB_FINDSTRING, 0, ByVal sSearch)
If lPos >=0 Then ctlEdit.ListIndex = lPos
End Sub
...
Рейтинг: 0 / 0
InGrid
    #36076857
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RickitikiНашел в нете для VB такую вещь, помогите пожалуйста переделать под фокс для гридаЕрундой занимаетесь. Хотите прикрутить собаке пятую ногу. В фоксе в контролах не надо ничего искать. Искать надо в данных, то есть в таблицах/курсорах. Тем более, что контролы в фоксе совершенно не виндовые и им невозможно послать сообщение.
...
Рейтинг: 0 / 0
InGrid
    #36076932
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov.,
Спасибо. просто не знаю как выбраться с ситуации.
Может ищу не в том направлении.
Задача: Есть таблица заказчиков (порядка 20 тис. записей), находиться она на сервере. Если человек работает на сервере то никаких проблем, но есть еще 5 рабочих мест, и вот на этих рабочих местах поиск тормозит. Думал сначала создавать локальную копию таблицы, но проблема в обновлении таблицы (редактирование, удаление и добавление записей).
...
Рейтинг: 0 / 0
InGrid
    #36076990
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторно проблема в обновлении таблицы (редактирование, удаление и добавление записей).

смотрим в сторону курсорадаптера
и построителя условий запроса.
...
Рейтинг: 0 / 0
InGrid
    #36077274
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,
создал КАД, запустил, все хорошо, запустил на второй машине - отлично. на первой машине меняю значения. На второй машине, значения старые, хотя таблица обновилась.
Че делать?
...
Рейтинг: 0 / 0
InGrid
    #36077289
Rickitikiпрошелмимо,
создал КАД, запустил, все хорошо, запустил на второй машине - отлично. на первой машине меняю значения. На второй машине, значения старые, хотя таблица обновилась.
Че делать?Обновлять второй машине. Если, конечно, второй машине нужны свежайшие данные.
...
Рейтинг: 0 / 0
InGrid
    #36077314
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
как узнать когда обновлять, через час, 2, минуту, секунды? постоянно тоже не хочется.
...
Рейтинг: 0 / 0
InGrid
    #36077331
Rickitikiпроходящий.,
как узнать когда обновлять, через час, 2, минуту, секунды? постоянно тоже не хочется.А этот вопрос должен решаться на стадии проектирования как часть проблемы синхронизации работы многих пользователей при заданном бизнесом времени свежести данных.
...
Рейтинг: 0 / 0
InGrid
    #36077335
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 машина заносит клиента, вторая ищет такого клиента-его нет, и начинает заносить второй раз того же клиента, таблица выростет в десятки раз (дубляжи). как дать програмно понять что исходная таблица изменилась и сделать апдейт.
...
Рейтинг: 0 / 0
InGrid
    #36077350
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.Rickitikiпроходящий.,
как узнать когда обновлять, через час, 2, минуту, секунды? постоянно тоже не хочется.А этот вопрос должен решаться на стадии проектирования как часть проблемы синхронизации работы многих пользователей при заданном бизнесом времени свежести данных.

Данные могут изменяться каждую минуту, а на второй день - ни разу (может не изменяться месяцами), все зависит от клиентов, новый, старый.
Может есть че почитать по этому поводу? Или дельный совет.
...
Рейтинг: 0 / 0
InGrid
    #36077504
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧе делать?

авторкак дать програмно понять что

если второй сидит до тех пор пока уже кто-то внес данные,
то при попытке сохранить изменения ему нужно покричать,
что пока он сидел - данные уже обновлены другим пользователем
и спросить что нужно сделать, то-ли откатиться до изменений
другого пользователя, то-ли заменить данные внессенные им значениями
...
Рейтинг: 0 / 0
InGrid
    #36077513
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкак узнать когда обновлять

определенным образом организовать хранение данных,
либо пользоваться серверами, которые имеют
интегрированные в них средства проверки версионности(актуальности)
...
Рейтинг: 0 / 0
InGrid
    #36077522
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,
кричать с одного этажа на другой, проблема
...
Рейтинг: 0 / 0
InGrid
    #36077633
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Rickitiki кричать с одного этажа на другой, проблема

Жгешь напалмом! Кричать нужно через программу. Например завести таблицу, в которой выставлять флаги об необходимости обновления для параллельных компов и проверяить ее по таймеру-при необходимости обновляться.
...
Рейтинг: 0 / 0
InGrid
    #36077709
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag,
как раз работаю над этим. тока к чему привязываться пока не могу понять. время изменения? Подскажите параметры.
...
Рейтинг: 0 / 0
InGrid
    #36077712
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы, вариант как кричать

Код: 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.
lparameters tlRefreshAlways
* tlRefreshAlways = .t.
* производит обновление без сравнения .cDocRevision > .cLockRevision
with this
	local lcAllertMessage
	text to lcAllertMessage noshow textmerge pretext  7 
		Другим пользователем закрыт доступ к документу '<<.cDocName>>'.
		Выйти из режима редактирования?
	endtext
	if !.SetDocLock( 2 ) and MESSAGEBOX(lcAllertMessage, 68 ,'Внимание')= 6  ;
		and type("this.parent")="O" and pemstatus(this.Parent, "release",  5 )
			this.parent.Release()
	endif
	if tlRefreshAlways or (.cDocRevision > .cLockRevision)
		* кто-то изменил документ,
		* нужно сделать на клиенте данные актуальными
		.ShowWaitMsg()
		local lcSqlCmd
		lcSqlCmd = .cSelectRecordsSqlCmd
		if !empty(lcSqlCmd)
			local lcTempAlias
			lcTempAlias = sys( 2015 )
			if l_sqlexec(, lcSqlCmd, lcTempAlias)> 0 
				* получили назад курсор
				this.UpdateLocalCursor(lcTempAlias)
				if vartype(.oSourceRecordsControl)='O' and pemstatus(.oSourceRecordsControl,'tt', 5 )
					.oSourceRecordsControl.refresh()
				endif
			endif
		endif
		.CleareWaitMsg()
	endif
endwith
...
Рейтинг: 0 / 0
InGrid
    #36078210
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не срабатывает .AfterCursorUpdate в чем причина. Хочу записать в таблицу datetime()
...
Рейтинг: 0 / 0
InGrid
    #36078247
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAfterCursorUpdate

а где он должен сработать?
покажите нам что и где Вы пытаетесь записать,
что придумали.
...
Рейтинг: 0 / 0
InGrid
    #36078287
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимоавтор

а где он должен сработать?
покажите нам что и где Вы пытаетесь записать,
что придумали.
создал таблицу с полем DT
создал мастером клас КАД, в методе Aftecursorupdate написал repl поле - datetime
открыл VFP 1
создал КАД
browse таблиц
открыл VFP 1
создал КАД
browse таблиц
в VFP 1 изменяю данные поля в КАД - именяются данные в основной таблице
перехожу в VFP 2 основная таблица изменилась, КАД - нет
в таблице update данные не поменялись
...
Рейтинг: 0 / 0
InGrid
    #36078336
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв методе Aftecursorupdate

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

методом тыка пытаетесь взять курсорадаптер?
где и что читаете?


перед тем чтобы что-то делать, посоветуйтесь вначале.
а вот для затравки, может натолкне на некую мысль.
+ ниже ветку классы наискосок для прояснения в мозгу принципа
построения фрейма с использованием кад
Код: 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.
create cursor tt (id i autoinc, cvalue c( 10 ), uuu i null)
local i
for i= 1  to  100 
	insert into tt (cvalue) values (ltrim(str(i)))
endfor

local loMyCad
loMyCad = createobject('mycad')
with loMyCad
	.SelectCmdSet('1=1')
	select mycursor
	update mycursor set cvalue=cvalue, ;
	                    uuu=null
	if tableupdate(.t.,.t.,"mycursor")
		select * from tt
	else
		local lArr[ 1 ]
		aerror(lArr)
		messagebox('не шмогла tableupdate  '+lArr[ 2 ])
	endif
endwith




DEFINE CLASS mycad AS CursorAdapter

	BufferModeOverride =  5 
	DataSourceType = "Native"
	WhereType =  4 
	ConflictCheckType =  1 
	Alias = "mycursor"
	KeyFieldList = "Id"
	Tables = "tt"
	Name = "mycad"
	UpdatableFieldList = "cvalue, uuu"
	UpdateNameList = "Id tt.Id, cvalue tt.cvalue, uuu tt.uuu"
	ConversionFunc = "uuu checkUUU"
	
	procedure SelectCmdSet
		lparameters tcWhere
		text to this.SelectCmd noshow textmerge pretext  15 
			select *
				from <<this.Tables>>
					where <<tcWhere>>
		endtext
		if this.cursorfill()
			return .t.
		else
			messagebox('не шмогла cursorfill')
		endif
enddefine

procedure checkUUU
	lparameters ttt
	return id+ 10 
endproc
...
Рейтинг: 0 / 0
InGrid
    #36078384
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
авторнаписал repl поле - datetime

гы, по науке, эту обязанность нужно возложить на контейнер БД,
создав триггер на изменение значения записи.
...
Рейтинг: 0 / 0
InGrid
    #36079359
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,

вот, создавал по статье Юрия Шутенко
Код: 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.
**************************************************
*-- Class:        cad_zam (d:\bred\adapter\zam_cadapters.vcx)
*-- ParentClass:  dataenvironment
*-- BaseClass:    dataenvironment
*-- Time Stamp:   07/08/09 10:08:14 AM
*
DEFINE CLASS cad_zam AS dataenvironment


	Tag = "E:\00\BASES_ND\ZAM.DBF"
	DataSource = .NULL.
	DataSourceType = "Native"
	Name = "cad_zam"


	ADD OBJECT ca_zam AS cursoradapter WITH ;
		Height =  22 , ;
		Width =  23 , ;
		UseDeDataSource = .T., ;
		SelectCmd = "select * from ZAM", ;
		CursorSchema = "KOD_ZAM N(6, 0), NAZVA_ZAM C(150), KOGO_ZAM C(150), ADRESA C(150), PASPORT C(50), KOMU_ZAM C(150), ZAM C(150), TIP_ZAM N(1, 0), NOM_DOG C(20), DATE_DOG D, STATUT M, RAH C(25), MFO C(6), BANK C(150), IPN C(12), POD_SVID C(9), TEL C(50), KRATKO C(50), BUH C(50), PLATNIKPDV N(1, 0), DOG_E N(1, 0), AVTOR C(50), KOGDA T", ;
		Alias = "a_ca_zam", ;
		Flags =  0 , ;
		KeyFieldList = "KOD_ZAM", ;
		Tables = "ZAM", ;
		UpdatableFieldList = "KOD_ZAM, NAZVA_ZAM, KOGO_ZAM, ADRESA, PASPORT, KOMU_ZAM, ZAM, TIP_ZAM, NOM_DOG, DATE_DOG, STATUT, RAH, MFO, BANK, IPN, POD_SVID, TEL, KRATKO, BUH, PLATNIKPDV, DOG_E, AVTOR, KOGDA", ;
		UpdateNameList = "KOD_ZAM ZAM.KOD_ZAM, NAZVA_ZAM ZAM.NAZVA_ZAM, KOGO_ZAM ZAM.KOGO_ZAM, ADRESA ZAM.ADRESA, PASPORT ZAM.PASPORT, KOMU_ZAM ZAM.KOMU_ZAM, ZAM ZAM.ZAM, TIP_ZAM ZAM.TIP_ZAM, NOM_DOG ZAM.NOM_DOG, DATE_DOG ZAM.DATE_DOG, STATUT ZAM.STATUT, RAH ZAM.RAH, MFO ZAM.MFO, BANK ZAM.BANK, IPN ZAM.IPN, POD_SVID ZAM.POD_SVID, TEL ZAM.TEL, KRATKO ZAM.KRATKO, BUH ZAM.BUH, PLATNIKPDV ZAM.PLATNIKPDV, DOG_E ZAM.DOG_E, AVTOR ZAM.AVTOR, KOGDA ZAM.KOGDA", ;
		Name = "ca_zam"


	PROCEDURE BeforeOpenTables
		*** Select connection code: DO NOT REMOVE

		local lcDBC
		lcDBC = 'zam'
		if used(lcDBC)
			SELECT(lcDBC)
		else
			USE 'E:\00\BASES_ND\ZAM.DBF' IN  0  ALIAS zam SHARED 
		endif
		*** End of Select connection code: DO NOT REMOVE
	ENDPROC


	PROCEDURE ca_zam.BeforeCursorUpdate
		LPARAMETERS nRows, lForce
		IF lForce = .T.
			IF DATETIME()>update_table.upd_time
				this.CursorRefresh()
			ENDIF 
		ENDIF 
	ENDPROC


	PROCEDURE ca_zam.AfterCursorUpdate
		LPARAMETERS nRows, lTableUpdateResult, cErrorArray
		IF lTableUpdateResult = .T.
			REPLACE upd_time WITH DATETIME() IN update_table
		ENDIF 
	ENDPROC


	PROCEDURE ca_zam.AfterUpdate
		LPARAMETERS cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd, lResult
	ENDPROC


	PROCEDURE ca_zam.Init
		*** Setup code: DO NOT REMOVE
		local llReturn
		do case
			case not pemstatus(This, '__VFPSetup',  5 )
				This.AddProperty('__VFPSetup',  0 )
			case This.__VFPSetup =  1 
				This.__VFPSetup =  2 
			case This.__VFPSetup =  2 
				This.__VFPSetup =  0 
				return
		endcase
		set multilocks on
		llReturn = dodefault()
		*** End of Setup code: DO NOT REMOVE

		*** Setup code: DO NOT REMOVE
		if This.__VFPSetup =  1 
			This.__VFPSetup =  2 
		endif
		return llReturn
		*** End of Setup code: DO NOT REMOVE
	ENDPROC


	PROCEDURE ca_zam.AutoOpen
		*** Setup code: DO NOT REMOVE
		if not pemstatus(This, '__VFPSetup',  5 )
			This.AddProperty('__VFPSetup',  1 )
			This.Init()
		endif
		*** End of Setup code: DO NOT REMOVE
	ENDPROC


ENDDEFINE
*
*-- EndDefine: cad_zam
**************************************************
я понял, что не туда вставил replace, какой метод в КАД отвечает за обновление исходной таблицы?
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / InGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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