powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как ускорить работы с работой с DBF по сети
25 сообщений из 65, страница 1 из 3
Как ускорить работы с работой с DBF по сети
    #39037464
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большой приложение, в котором работают одновременно до 10 пользователей. Это что-то типа "псевдосетевой" версии. Быстро работает только на том компьютере на котором эти DBF расположены, на остальным компах раз в 10 наверное медленней работает.
Таблиц в принципе много, но рабочая таблица всего одна и она динамически создаётся каждый день новая, то бишь на каждый день своя DBF, количество записей не более 1000, сама по себе запись не большая.

Вот из процедуры создания можно увидеть структуру:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Procedure Create_Zakaz
Parameters NaimTable
Create Table &NaimTable ([kod] [int], [DataZak] [Datetime], [Nomer] [int], [KodV] [int], [tip] [logical], ;
	[Adres1] [varchar](100), [statZ] [logical], [kodD] [int], [kodzakb] [int], [schet] [varchar](35), ;
	[Tel] [varchar](11), [karta] [varchar](6), [kodD2] [int], [otkaz] [logical], [PrOtkaz] [varchar](50), ;
	[blok] [int], [sz1] [Numeric](7), [sz2] [Numeric](7), [sz3] [Numeric](7), [sp1] [Numeric](6), ;
	[sp2] [Numeric](6), [sp3] [Numeric](6), [k1] [Numeric](7,2), [k2] [Numeric](7,2), [k3] [Numeric](7,2), ;
	[SSMS] [logical])
Use
Endproc



Сама программа представляет из себя форма, на ней Grid, в котором всё крутится в реальном времени со своими программными блокировками. Куда копать и что делать не знаю.
P.S. Программе уже лет 5 наверное или около тога и пользователи в принципе уже привыкли к тормозам, но думаю может быть знатоки смогут помочь мне в ускорении работы приложения, если что отвечу на все вопросы, но весь код программы выкладывать это конечно очень много...
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037481
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тормозит что? Перемещение по гриду?

Во время перемещения есть обращения к другим таблицам? Как именно прописано?
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037490
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТормозит что? Перемещение по гриду?

Во время перемещения есть обращения к другим таблицам? Как именно прописано?

Тормозит всё и перемещение и изменение
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037492
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Событие AfterRowColChange

Код: sql
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.
Lparameters nColIndex
nW=Iif(Sysmetric(1)=800,1,(Sysmetric(21)-7)/793)
**********************************************************************************
With Thisform
	mDataJ=Ctod(.lDataJ.Caption)
	mD1=Left(Dtoc(mDataJ),10)
	NameDate='-'+Right(mD1,2)+'.'+Right(Left(mD1,5),2)+'.'+Left(mD1,2)
	NaimTable=gcDPS+'\'+'Zakaz'+NameDate+'.Dbf'
	mkod=qZakaz.kod
	Update &NaimTable Set BLOK=0 Where BLOK=mkodid
	Update &NaimTable Set BLOK=mkodid Where kod=mkod And BLOK=0
	.tk1.Value=qZakaz.k1
	.tk2.Value=qZakaz.k2
	.tk3.Value=qZakaz.k3
	.tsz1.Value=qZakaz.sz1
	.tsz2.Value=qZakaz.sz2
	.tsz3.Value=qZakaz.sz3
	.tsp1.Value=qZakaz.sp1
	.tsp2.Value=qZakaz.sp2
	.tsp3.Value=qZakaz.sp3
	.tDis1.Value = qZakaz.kodd
	.tDis2.Value = qZakaz.kodd2
	.tZakB.Value = qZakaz.kodzakb
	.tKarta.Value = Allt(qZakaz.karta)
	.tSchet.Value = Allt(qZakaz.schet)
	.tNomerT.Value = qZakaz.Tel
	.tVod.Value = qZakaz.kodv
	.tVod.Enabled = Iif(qZakaz.statz=.T. And qZakaz.otkaz=.F.,.F.,.T.)
	.cK.Enabled = .T.
	.cSMS.Enabled = Iif(qZakaz.SSms=.T.,.F.,.T.)
	.cSMS.Caption = Iif(qZakaz.SSms=.T.,'Уже отправили','Отправить SMS клиенту')
	mDatNtN=mDataJ-Iif(Dow(mDataJ)=1,8,Dow(mDataJ))+2    && Начало недели
	Select balans From saldo Where kodv=qZakaz.kodv And datann=mDatNtN Into Cursor TestB
	If Reccount('TestB')>0
		If balans<0
			Thisform.tVod.BackColor = Rgb(255,0,0)
		Else
			Thisform.tVod.BackColor = Rgb(0,255,0)
		Endif
	Endif
*	Select qZakaz
*	Locate For kod=mkod
*	If Found()
*	Endif
Endwith
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037496
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё большая процедура на LostFocus 6 колонки Grida из поля Text:

Код: sql
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.
mDataJ=Ctod(Thisform.lDataJ.Caption)
mD1=Left(Dtoc(mDataJ),10)
NameDate='-'+Right(mD1,2)+'.'+Right(Left(mD1,5),2)+'.'+Left(mD1,2)
NaimTable=gcDPS+'\'+'Zakaz'+NameDate+'.Dbf'
mAdresK=Allt(This.Value)
Store '' To mNomerK
**********************************************************************************
If qZakaz.statz=.F. And qZakaz.otkaz=.F.
	mkod=kod
	Select Adres1, BLOK From &NaimTable Where kod=mkod Into Cursor qZakazProv
	If mAdresK==Allt(qZakazProv.Adres1)
	Else
		If qZakazProv.BLOK<>0 And qZakazProv.BLOK<>mkodid
			Messagebox('Данный заказ заблокирован диспетчером - '+Allt(Str(qZakazProv.BLOK)),32,'Оповещение')
			Update qZakaz Set Adres1=qZakazProv.Adres1 Where kod=mkod
		Else
			Update &NaimTable Set Adres1=mAdresK, kodd2=mkodid Where kod=mkod And BLOK=mkodid
			If Len(mAdresK)>=10
				Do While Len(mAdresK)>0
					If Len(mNomerK)=0
						If Inlist(Left(mAdresK,1),'7','9')
							mNomerK=Left(mAdresK,1)
						Endif
						If Left(mAdresK,1)='8'
							mNomerK='7'
						Endif
					Else
						If Inlist(Left(mAdresK,1),'0','1','2','3','4','5','6','7','8','9')
							mNomerK=mNomerK+Left(mAdresK,1)
						Else
							If Len(mNomerK)<7
								mNomerK=''
							Endif
						Endif
					Endif
					mAdresK=Right(mAdresK,Len(mAdresK)-1)
				Enddo
				If Len(mNomerK)=11
					mNomerK=Right(mNomerK,10)
				Endif
				If Len(mNomerK)=10
					Update qZakaz Set Tel=mNomerK Where kod=mkod
					Thisform.tNomerT.Value=mNomerK
					Update &NaimTable Set Tel=mNomerK, kodd2=mkodid Where kod=mkod And BLOK=mkodid
					mOpredel = ReadFileIni(gcDPL+"\Raion.ini","Admin","Opredel")
					If Isnull(mOpredel)
						WriteFileIni(gcDPL+"\Raion.ini","Admin","Opredel","0")
						mOpredel=ReadFileIni(gcDPL+"\Raion.ini","Admin","Opredel")
					Endif
					If mOpredel="1"
						Select qZakaz
						Locate For kod=mkod
						Thisform.cOpredel.Click
					Endif
				Endif
			Else
				If Len(Thisform.tNomerT.Value)<>0
					answer=Messagebox('Стереть номер телефона, привязанный к заказу ???',36,'Вопрос')
					If answer=6
						Update qZakaz Set Tel='' Where kod=mkod
						Update &NaimTable Set Tel='', kodd2=mkodid Where kod=mkod And BLOK=mkodid
						Thisform.tNomerT.Value=''
						mNomerK=''
					Endif
				Endif
			Endif
		Endif
		Sele qZakaz
		Locate For kod=mkod
	Endif
Endif
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037500
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сомневаешься что конкретно выполняется в твоем коде, то можешь профилирофщиком посмотреть:
настраиваешь исходники на рабочую базу, запускаешь свою форму, затем меню Tools-Debugger там меню Tools-Coverage Logging задаешь файл куда лог писать.
Затем возвращаешься на форму и делаешь действия на которых тормозит.
Переключаешься в дебагер и отжимаешь кнопку писания лога на тулбаре (или просто все закрой)
Дальше смотришь лог, первая цифра сколько времени выполнялась строка кода, дальше где эта строка, последняя цифра уровень вложенности.

Есть какая-то софтина для более удобного просмотра лога, только не помню как запустить, не пользуюсь.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037521
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESСобытие AfterRowColChange
...
Ты уверен что весь этот код надо выполнять при каждом переходе на другую клетку?

Это зачем:
Код: sql
1.
2.
	NaimTable=gcDPS+'\'+'Zakaz'+NameDate+'.Dbf'
	Update &NaimTable ...


Используй алиасы, т.е. при открытии
Код: sql
1.
2.
sele 0
use (gcDPS+'\'+'Zakaz'+NameDate+'.Dbf') alias Zakaz


а в коде
Код: sql
1.
Update Zakaz ...


и тебе точно надо всю таблицу апдейтить или достаточно текущую строку? Если текущую, то изучай REPLACE
Если надо всю - проверь что есть индекс по полю BLOK

Тут может быть тормоз
Код: sql
1.
	Select balans From saldo Where kodv=qZakaz.kodv And datann=mDatNtN Into Cursor TestB


Размеры таблицы saldo какой? Если от 100 строк то тоже индексы надо делать.

В целом как-то коряво все спроектировано. Не надо столько сложных действий в AfterRowColChange() пихать.

Это выкинь
Код: sql
1.
2.
Select qZakaz
Locate For kod=mkod


сделай индекс и используй IndexSeek()
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037578
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Dima T]AngelOKESСобытие AfterRowColChange
...
Ты уверен что весь этот код надо выполнять при каждом переходе на другую клетку?

Это зачем:
Код: sql
1.
2.
	NaimTable=gcDPS+'\'+'Zakaz'+NameDate+'.Dbf'
	Update &NaimTable ...


Используй алиасы, т.е. при открытии
Код: sql
1.
2.
sele 0
use (gcDPS+'\'+'Zakaz'+NameDate+'.Dbf') alias Zakaz



Не удобно переключать с одной таблицы на другую
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037581
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что я не так делаю?

Код: sql
1.
2.
3.
		If Used(NaimTable2)=.F.
			Use &NaimTable In 0 Shared Alias Zakaz
		Endif



Программа не может найти этот алиас...
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037585
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо
Код: sql
1.
If !Used('Zakaz')



Если в процессе работы постоянно открываются разные таблицы ZakazXXXX то оставь как было. На производительность это не сильно влияет.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037601
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TС индексами разбирайся. Запросы посмотри как отрабатывают. SYS(3054) показывает какие индексы используются в запросе.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39037988
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
не хотелось бы использовать индексы, хотя таблица saldo содержит свыше 1000 записей
и самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее
пробовал делать центром любой другой компьютер, то тогда ускорялся именно он, может я что-то не использую в коде или наоброт использую то что именно по сети тормозит?
А на счёт индексов я всё таки думаю, что тормозили бы все, если бы была проблема только в индексах.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038001
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее
Предоставь возможность доступа Dima T к main компьютеру и хотя бы одному клиентскому и будет тебе счастье
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038005
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее
Предоставь возможность доступа Dima T к main компьютеру и хотя бы одному клиентскому и будет тебе счастье
И думаю было бы уместно /но вовсе не обязательно/ после помощи Dima T его поблагодарить и рассказать
в назидание другим про "грабли"
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038011
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESDima T,
не хотелось бы использовать индексы, хотя таблица saldo содержит свыше 1000 записей
Оптимизатор запросов работает только с помощью индексов.
Вот один из твоих тормозов
Код: sql
1.
Select balans From saldo Where kodv=qZakaz.kodv And datann=mDatNtN Into Cursor TestB


Без индексов каждый раз происходит полный скан таблицы, т.е. даже если тебе нужна только одна строка - читается (качается по сети) вся таблица, затем выбирается нужная запись. При наличии индекса - из индекса выбираются координаты нужных записей и читаются только эти записи.
попробуй создать индекс
Код: sql
1.
2.
sele saldo
index on kodv tag kodv


и посмотри как будет работать.

В идеале надо такой индекс
Код: sql
1.
index on str(kodv,9) + ttoc(datann, 1) tag kd


дальше так
Код: sql
1.
2.
3.
4.
5.
6.
7.
If IndexSeek(str(qZakaz.kodv,9) + ttoc(mDatNtN, 1), .T., 'saldo', 'kd')
	If saldo.balans<0
		Thisform.tVod.BackColor = Rgb(255,0,0)
	Else
		Thisform.tVod.BackColor = Rgb(0,255,0)
	Endif
Endif



Боятся индексов не надо. Надо просто разобраться как ими пользоваться и как обслуживать (плановая переиндексация, контроль снятия задачи пользователем и т.д.).
AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее
пробовал делать центром любой другой компьютер, то тогда ускорялся именно он, может я что-то не использую в коде или наоброт использую то что именно по сети тормозит?
А на счёт индексов я всё таки думаю, что тормозили бы все, если бы была проблема только в индексах.
Это особенность работы виндовса:
Если файл открывает один пользователь, то файл кэшируется на его стороне. Тормозить не будет даже по сети. Чтение идет даже не с диска, а из кэша своего виндовса.
Когда файл открывает второй (третий и т.д.) пользователь - включается контроль блокировок и скорость чтения резко падает. По сети 100 МБит скорость чтения от силы 10-20. Можешь глянуть размер saldo.dbf и прикинуть сколько времени надо на его чтение. Скорость ~1 Мбайт в секунду.
Если файл расположен на том же компе - работает чуть быстрее, но опять же не со скоростью чтения с винта, а 3-5 Мбайт в секунду.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038013
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее
Предоставь возможность доступа Dima T к main компьютеру и хотя бы одному клиентскому и будет тебе счастье
И думаю было бы уместно /но вовсе не обязательно/ после помощи Dima T его поблагодарить и рассказать
в назидание другим про "грабли"

Поблагодарить я всегда рад, я благодарю и Dima T и вас я тоже благодарю!!! Но вот даже если я дам доступ по сети, что можно будет увидеть, я не против показать код и объяснить всю логику работы программы или есть какие-то инструменты которые помогут удалённо разобраться в ситуации?
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038015
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKES или есть какие-то инструменты которые помогут удалённо разобраться в ситуации?К примеру https://www.teamviewer.com/ru/
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038016
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, Можно ли создавать индекс вот так:

Код: sql
1.
2.
3.
4.
5.
6.
	Use Saldo.Dbf In 3 Excl
	If Empty(Tagno("kd","saldo"))
		Select Saldo
		Delete Tag All
		Index On Str(kodv,9) + Ttoc(datann, 1) Tag kd
	Endif
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038018
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта конструкцию можно немного соптимизировать даже без индексов
Код: sql
1.
2.
3.
4.
	Select balans From saldo Where kodv=qZakaz.kodv And datann=mDatNtN Into Cursor TestB
	If Reccount('TestB')>0
		If balans<0
...


так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
llFound = saldo.kodv=qZakaz.kodv And saldo.datann=mDatNtN
if !llFound
   sele saldo
   locate for saldo.kodv=qZakaz.kodv And saldo.datann=mDatNtN
   llFound = found()
endif
if llFound
	If saldo.balans<0
   ...


тормозить будет на locate но он будет отрабатывать если текущая запись не та что надо.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038019
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, Тогд процедуру перемещения по таблице я тоже сокращаю и делаю такой:

Код: sql
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.
Lparameters nColIndex
**********************************************************************************
With Thisform
	mDataJ=Ctod(.lDataJ.Caption)
	mkod=qZakaz.kod
	Replace blok With 0 For blok=mkodid In &mNameZ
	Replace blok With mkodid For kod=mkod And blok=0 In &mNameZ
	.tk1.Value=qZakaz.k1
	.tk2.Value=qZakaz.k2
	.tk3.Value=qZakaz.k3
	.tsz1.Value=qZakaz.sz1
	.tsz2.Value=qZakaz.sz2
	.tsz3.Value=qZakaz.sz3
	.tsp1.Value=qZakaz.sp1
	.tsp2.Value=qZakaz.sp2
	.tsp3.Value=qZakaz.sp3
	.tDis1.Value = qZakaz.kodd
	.tDis2.Value = qZakaz.kodd2
	.tZakB.Value = qZakaz.kodzakb
	.tKarta.Value = Allt(qZakaz.karta)
	.tSchet.Value = Allt(qZakaz.schet)
	.tNomerT.Value = qZakaz.Tel
	.tVod.Value = qZakaz.kodv
	.tVod.Enabled = Iif(qZakaz.statz=.T. And qZakaz.otkaz=.F.,.F.,.T.)
	If qZakaz.kodv<>0
		.cK.Enabled = .T.
		mDatNtN=mDataJ-Iif(Dow(mDataJ)=1,8,Dow(mDataJ))+2    && &#205;&#224;&#247;&#224;&#235;&#238; &#237;&#229;&#228;&#229;&#235;&#232;
		If Indexseek(Str(qZakaz.kodv,9) + Ttoc(mDatNtN, 1), .T., 'saldo', 'kd')
			Thisform.tVod.BackColor = Iif(saldo.balans<0,Rgb(255,0,0),Rgb(0,255,0))
		Endif
	Endif
Endwith
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038021
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, Да забыл написать как я переделал под Alias разные таблицы:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	mDataJ=Ctod(.lDataJ.Caption)
	mD1=Left(Dtoc(mDataJ),10)
	NameDate='-'+Right(mD1,2)+'.'+Right(Left(mD1,5),2)+'.'+Left(mD1,2)
	NaimTable=gcDPS+'\'+'Zakaz'+NameDate+'.Dbf'
	mNameZ='Zakaz_'+Right(mD1,2)+'_'+Right(Left(mD1,5),2)+'_'+Left(mD1,2)
	If File(NaimTable)=.F.
		Create_Zakaz(NaimTable)
	Endif
	If Used(mNameZ)=.F.
		Use &NaimTable In 0 Alias &mNameZ Shared
	Endif
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038025
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESя не против показать код и объяснить всю логику работы программы или есть какие-то инструменты которые помогут удалённо разобраться в ситуации?
Типа поработайте за меня а я скажу спасибо? Не, братец, тут форум чтобы помочь разобраться и дальше самому свою работу делать.
Если хочешь чтоб за тебя поработали - есть форум "работа", там за вознаграждение покопаются в твоих исходниках.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038028
Фотография AngelOKES
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAngelOKESя не против показать код и объяснить всю логику работы программы или есть какие-то инструменты которые помогут удалённо разобраться в ситуации?
Типа поработайте за меня а я скажу спасибо? Не, братец, тут форум чтобы помочь разобраться и дальше самому свою работу делать.
Если хочешь чтоб за тебя поработали - есть форум "работа", там за вознаграждение покопаются в твоих исходниках.

Это я Владимиру написал, да и так конечно я сам понимаю, что я сам должен разобраться во всём...
Сейчас во всем коде меняю UPDATE на Replace, надеюсь это ускорит работу программы :)
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038032
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESDima T, Можно ли создавать индекс вот так:

Лучше так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if used('saldo')
   sele saldo && перейти к уже открытому 
else
   sele 0 && 0 любая свободная рабочая область
endif
Use Saldo Excl 
Delete Tag All && удалить все индексы
Index On Str(kodv,9) + Ttoc(datann, 1) Tag kd
Index On ... && и т.д. создать все остальные индексы если надо
Use Saldo Shared


т.к. Use ... Excl невозможно сделать если кто-то уже открыл таблицу как Shared, то этот код надо выполнять в то время когда никто не работает. Например ночью из планировщика. Ежедневное пересоздание нужно потому что в процессе изменения данных индексы вырождаются и эффективность их использования снижается.
И предусмотреть возможность запустить принудительно руками в рабочее время, на случай если какой-то сбой железа произойдет и индексы попортятся.
...
Рейтинг: 0 / 0
Как ускорить работы с работой с DBF по сети
    #39038035
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelOKESСейчас во всем коде меняю UPDATE на Replace, надеюсь это ускорит работу программы :)
ускорит, если Replace текущей записи. Если Replace for ..., то UPDATE предпочтительнее, т.к. есть ньюансы с блокировками.
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 1 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как ускорить работы с работой с DBF по сети
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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