On-line: NickSam, tnsr2, гостей 3. Всего: 5 [подробнее..]
АвторСообщение



Пост N: 1
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 13.12.12 13:28. Заголовок: Совместная работа с dbf


Здравствуйте все!
Я не программист. Весь мой опыт программирования - когда-то давно (198х-199х) сделал на Клиппере 3-4 рабочих программы для себя. Сейчас возникла идея как-то автоматизировать работу нашего коллектива (7 человек). С Harbour ознакомился, сделал пару программ. Но беда в том, что необходима сетевая обработка данных. Для меня это шумерский язык
С блокировками разобрался (пока теоретически). А вот как оперативно отражать изменения в базе на всех ПК не знаю. Была идея разместить на форме кнопку Обновить, но это как-то не гламурно. Обновлять автоматически по таймеру? Подскажите, как это делают профессионалы? Если кто-нибудь приведет маленький пример, буду вдвойне признателен.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 17 [только новые]


moderator


Пост N: 496
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 13.12.12 15:09. Заголовок: Обновлять автоматиче..



 цитата:
Обновлять автоматически по таймеру?


Реализация зависит от того, используете ли вы какую-нибудь GUI библиотеку, или пишете для консольного режима.
Для GUI - в каждой библиотеке есть соответствующий класс ( типа Timer ).
Для консольного - вот простейший пример, написан на основе Harbour\tests\testidle.prg :

 цитата:

PROCEDURE MAIN()
Local s := Space( 30 ), choice := 1

CLS

? "DEFAULT IDLEREPEAT =", SET( _SET_IDLEREPEAT )
?
? "Idle Block should be displayed multiple times until key or 10 seconds elapsed!"
? "Press any key to begin..."
?
Inkey(0)

CLS
HB_IDLEADD( {|| TF() } )

@ 01, 06 PROMPT " ОБРАБОТКА РЕЗУЛЬТАТОВ "
@ 02, 06 PROMPT " В Ы Х О Д "
MENU TO choice
?

RETURN

Function TF()
Local nSec := Seconds()
Static nCount := 0, nSec0 := 0

IF nSec0 == 0 .OR. nSec - nSec0 >= 1
nSec0 := nSec
nCount++
@ 5, 24 SAY Str(nCount,5) + " Idle Block " + Str(Seconds()) COLOR "GR+/N"
ENDIF

Return Nil



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 13.12.12 15:27. Заголовок: С примером разобралс..


С примером разобрался. Спасибо.
Я так понимаю, что обновление по таймеру - это правильный подход? Или существуют какие-нибудь настройки в MiniGUI или Harbour, обеспечивающие автоматическое обновление? Есть ли другие подходы, кроме обновления по таймеру?
И еще вопрос. Допустим в Browse в момент корректировки строки, происходит обновление таблицы с добавлением строки другим пользователем. Не произойдет ли какого-нибудь сбоя (уход фокуса с корректируемой строки или еще чего?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 678
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 13.12.12 15:30. Заголовок: Самоделкин пишет: И..


Самоделкин пишет:

 цитата:
И еще вопрос. Допустим в Browse в момент корректировки строки, происходит обновление таблицы с добавлением строки другим пользователем. Не произойдет ли какого-нибудь сбоя (уход фокуса с корректируемой строки или еще чего?

Для этого вы блокируете запись, и ее никто никуда не сдвинет, только если вы сами комп вырубите.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 13.12.12 15:44. Заголовок: Может я неправильно ..


Может я неправильно выразился. Я имел в виду следующее:
Есть таблица с записями, в которых ID = 1, 3 и 4. Пользователь меняет запись 3 с предварительной блокировкой этой записи. Другой пользователь вносит запись с ID = 2. Через время сработал таймер у первого пользователя, который еще не закончил изменение в строке 3. Вызывается Refresh таблицы. Появляется уже 4 записи. Останется ли фокус на записи с ID 3? И можно ли продолжать изменение? Или я не правильно понимаю и обновление таблицы произойдет только после завершения корректировки? Или перед изменением надо останавливать таймер?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 679
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 13.12.12 16:00. Заголовок: Никуда фокус не сдви..


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 13.12.12 16:09. Заголовок: AlexMyr пишет: Хотя..


AlexMyr пишет:

 цитата:
Хотя подход прямой правки базы не правильный.


А как правильно? Править переменные памяти, а потом обновлять запись? Так?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 680
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 13.12.12 16:18. Заголовок: Представьте ситуацию..


Представьте ситуацию, что в строке надо изменить десять значения, и на шестом вы передумали, что будете делать?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 13.12.12 16:25. Заголовок: Понял, спасибо. И в..


Понял, спасибо.

И все-таки: обновление формы по таймеру - это оптимальный подход?
И еще: при каком значении SET BROWSESYNC (ON или OFF) посоветуете работать в сети? Или это не принципиально?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 51
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.12.12 18:24. Заголовок: Самоделкин пишет: И ..


Самоделкин пишет:

 цитата:
И все-таки: обновление формы по таймеру - это оптимальный подход?


Если пользователь ничего не делает (например 3 минуты), то на мой взгляд - это нормально. А если пользователь пялится в Browse с 30-40 строк и колонок 20-25, думаю мельтешение перед глазами будет только мешать. Наличие кнопки Refresh не помешает в любом случае (а часто бывает и достаточным).

 цитата:
Или это не принципиально?


Это две большие разницы.
SET BROWSESYNC ON Browse value синхронизируется с RecNo - не разу не подводило
SET BROWSESYNC OFF Вы сами синхронизируете Browse value и RecNo


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 13.12.12 18:55. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это две большие разницы.


О разнице между ними я читал

SergKis пишет:

 цитата:
SET BROWSESYNC ON Browse value синхронизируется с RecNo - не разу не подводило


Хочу уточнить, речь идет именно о сетевом доступе?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 52
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.12.12 21:07. Заголовок: Самоделкин пишет: Хо..


Самоделкин пишет:

 цитата:
Хочу уточнить, речь идет именно о сетевом доступе?


Вот код, выполняемый на OnChange в Browse при SET BROWSESYNC ON:
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 7
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 14.12.12 09:56. Заголовок: Понятно. Продолжаем:..


Понятно. Продолжаем:
1. Перед удалением записи достаточно DBRLOCK или надо блокировать весь файл FLOCKом? А при изменении?
2. Заблокированная таблица (запись) остается доступной для чтения?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 808
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.12.12 10:03. Заголовок: 1. Чтобы пометить за..


1. Чтобы пометить запись как удаленную, достаточно DBRLock. Чтобы физически удалить отмеченные записи, нужно блокировать весь файл или открывать его в монопольном режиме.
2. Доступность на чтение остается.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 8
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 14.12.12 10:13. Заголовок: Спасибо. Для тех, кт..


Спасибо.
Для тех, кто тоже интересуется этой темой - нашел статью "Использование Clippera в локальной сети". Правда не знаю, соответствует ли все Harbour на 100%.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 809
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.12.12 11:28. Заголовок: Я слегка ошибся: физ..


Я слегка ошибся: физически удалить записи можно только при монопольном открытии файла. Будет ошибка, если файл открыт в разделенном режиме. Блокировка файла здесь не имеет значения.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 14.12.12 18:06. Заголовок: PSP пишет: Будет ош..


PSP пишет:

 цитата:
Будет ошибка, если файл открыт в разделенном режиме. Блокировка файла здесь не имеет значения.


Да. Я уже с этим столкнулся.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 13.12.12
ссылка на сообщение  Отправлено: 18.01.13 11:28. Заголовок: Подскажите, пожалуйс..


Подскажите, пожалуйста, чем отличаются схемы блокировки CLIP, CL53, VFP, СL53EXT и XHB64, задаваемые в SET DBFLOCKSCHEME.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 426
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет