powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите пжл
33 сообщений из 33, показаны все 2 страниц
Помогите пжл
    #35691821
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема такая: Открываем SHARED DBF файл, в нем 2 поля, при изменении одного поля выполняем
SET BELL TO C:\DINGDON.WAV
?? CHR(7)
При изменении другого поля - QUIT
Главное, чтобы запускалась прога в свернутом виде и работе других приложений не мешала.
...
Рейтинг: 0 / 0
Помогите пжл
    #35691892
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшка,

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

sele tablica
skat to YorArray
do while 1
if YorArray(1)<> tablica->f1
пищим
endif
if YorArray(2)<> tablica->f2
сваливаем
endif

skat to YorArray
inkey(10)
enddo

Программу можно сделать и без окна вовсе.
Тогда ДРУГАЯ программа будет изменять поля таблицы, а эта будет или пищать или вываливаться.
...
Рейтинг: 0 / 0
Помогите пжл
    #35692234
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо FAM!
Небольшое уточнение: эта прога должна работать какбы фоном и окно вовсе не нужно, она проверяет изменения сделаные другими пользователями сети. Поэтому цикл, как мне кажется, будет мешать другим программам. Я не силен в FP, но мне кажется, что через ProgrammaticChange это делать надо. Или я не прав?
...
Рейтинг: 0 / 0
Помогите пжл
    #35692238
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо FAM!
Небольшое уточнение: эта прога должна работать какбы фоном и окно вовсе не нужно, она проверяет изменения сделаные другими пользователями сети. Поэтому цикл, как мне кажется, будет мешать другим программам. Я не силен в FP, но мне кажется, что через ProgrammaticChange это делать надо. Или я не прав?
...
Рейтинг: 0 / 0
Помогите пжл
    #35692371
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшкаСпасибо FAM!
Небольшое уточнение: эта прога должна работать какбы фоном и окно вовсе не нужно, она проверяет изменения сделаные другими пользователями сети. Поэтому цикл, как мне кажется, будет мешать другим программам. Я не силен в FP, но мне кажется, что через ProgrammaticChange это делать надо. Или я не прав?
Цикл здесь обязателен. База данных не посылает сообщений всем пользователям в сети о том, что в ней что-то изменилось. Те же триггеры срабатывают только для того, кто их запустил.

Другой вопрос, загрузка машины бесконечным циклом. Здесь я бы посоветовал либо использовать таймер, либо в цикле сделать задержку.
Например так:
Код: plaintext
1.
2.
3.
4.
DECLARE Sleep IN WIN32API LONG
DO WHILE .T.
   Sleep( 100 ) && Дрыхнем  100  миллисекунд.
ENDDO

Для запуска проги в свернутом виде, см. файл CONFIG.FPW. В нем должна быть строчка в стиле SCREEN = OFF. Можно CONFIG.FPW включить в проект и тогда его не нужно будет таскать отдельно от приложения.
...
Рейтинг: 0 / 0
Помогите пжл
    #35692408
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В DBF вносят изменения все пользователи, а отслеживает эти изменения, только один комп, на котором эта прога и запускается. Но т.к. машина эта не только бибикать будет, то и загружать ее по самые уши не хочется.
...
Рейтинг: 0 / 0
Помогите пжл
    #35692434
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвносят изменения все пользователи, а отслеживает эти изменения

дай ответ на вопрос:
а зачем Вам фокспро для реализации задачи аудита
и создания службы уведомлений?

автортолько один комп, на котором эта прога и запускается
не в обиду,информация для размышлений: велосипеды уже давно придуманы,
может взять правильный инструмент для разработки?

Вас привлекает себестоимость и простота разработки в фокспро?
или Вы не владете иными инструментами?
...
Рейтинг: 0 / 0
Помогите пжл
    #35692446
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не владею иными инструментами :-((
...
Рейтинг: 0 / 0
Помогите пжл
    #35692468
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ не владею иными инструментами

нужно начинать осваивать

я так понимаю к Вашей разработке начинают предъявлять какие-то требования.
задумайтесь над вариантами реализации:
1. Вы притягиваете все за уши с помощью фокспро и городите городухи
2. Вы начинаете осваивать инструмент, который по-умолчанию имеет такие возможности
(либо возможна успешная и нетрудозатратная, быстрая реализация)
...
Рейтинг: 0 / 0
Помогите пжл
    #35692492
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет, я постараюсь воспользоваться им. Но проблему решить надо срочно. Есть варианты?
...
Рейтинг: 0 / 0
Помогите пжл
    #35692510
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Есть варианты

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

что-бы запустить какой-то "контролятор", который будет пищать на одной станции
и пытаться управлять процессом
можно запустить какое-то приложение, свернуть его в трей и с помощью таймера
смотреть все время куда-то, дергать таблицу ..., и что-то при наступлении события
делать что-то
...
Рейтинг: 0 / 0
Помогите пжл
    #35693099
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшкаВ DBF вносят изменения все пользователи, а отслеживает эти изменения, только один комп, на котором эта прога и запускается. Но т.к. машина эта не только бибикать будет, то и загружать ее по самые уши не хочется.

Гм. А что мешает "бибикать" при вызове триггеров на машинах пользователей? Каждого конкретного?
Тогда и второе поля для останова не потребуется. Ибо некого будет останавливать...
...
Рейтинг: 0 / 0
Помогите пжл
    #35693121
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Бибикать" должна одна машина. Остальные - как рыбы :-) Причем как рыбы они под в FPD работают.
...
Рейтинг: 0 / 0
Помогите пжл
    #35693188
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: qqшка
> Причем как рыбы они под в FPD работают.
т.е. про тригерры не может быть и речи :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите пжл
    #35693232
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно!
...
Рейтинг: 0 / 0
Помогите пжл
    #35693783
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшка,

Там же я в тексте указал и по-русски и в коде, что в цикле происходит задержка. Соответственно, никакой загрузки процессора не происходит. Одна инерация за 10 секунд грузит процессор на 10 в минус пятнадцатой степени процента.
Так что опасаться нечего.
...
Рейтинг: 0 / 0
Помогите пжл
    #35693800
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin Pahan[quot qqшка]Спасибо FAM!
... Поэтому цикл, как мне кажется, будет мешать другим программам. Я не силен в FP, но мне кажется, что через ProgrammaticChange это делать надо. Или я не прав?
Код: plaintext
1.
2.
3.
4.
DECLARE Sleep IN WIN32API LONG
DO WHILE .T.
   Sleep( 100 ) && Дрыхнем  100  миллисекунд.
ENDDO

Примененять можно и Sleep(100) и INKEY(10) - как в моем примере. А разница-то в чем? ))
...
Рейтинг: 0 / 0
Помогите пжл
    #35694020
FAM,
Sleep отдает неиспользуемые ресурсы другим работающим приложениям, а inkey() постоянно мониторит пользовательский ввод, не давая работать другим приложениям (типа: "А вдруг чего интересное пропущу" )
...
Рейтинг: 0 / 0
Помогите пжл
    #35694041
Станислав С...кийFAM,
Sleep отдает неиспользуемые ресурсы другим работающим приложениям, а inkey() постоянно мониторит пользовательский ввод, не давая работать другим приложениям (типа: "А вдруг чего интересное пропущу" )
Мониторит = проводит опрос клавиатуры, мышки и т.д. Т.е. загружает комп дополнительной, ненужной (в другом контексте она будет нужной, но не в данном случае) работой...
...
Рейтинг: 0 / 0
Помогите пжл
    #35694083
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это меня и беспокоит. И опытным путем проверить очень трудно - юзеры на комп не пускают, работают.
...
Рейтинг: 0 / 0
Помогите пжл
    #35694809
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшкаВот это меня и беспокоит. И опытным путем проверить очень трудно - юзеры на комп не пускают, работают.
Надо вообще не знать, как работает функция inkey(10), чтобы писать такую глупость. В этом режиме никакой опрос не происходит. Вы хоть хэлп читайте, прежде, чем писать в топик - народ-то ведь не только дети, но и серьёзные дядьки читают.

Слава Богу, у меня не один сервер написан с использованием этого режима и что-то ни разу проблем не возникло. И не потому, что обошлось, а потомучто именно так работает стандартная ф-ция.

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

Простите, но не топик, а детский лепет )))
...
Рейтинг: 0 / 0
Помогите пжл
    #35695111
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Станислав С...кий
> Sleep отдает неиспользуемые ресурсы другим работающим приложениям, а
> inkey() постоянно мониторит пользовательский ввод, не давая работать
> другим приложениям (типа: "А вдруг чего интересное пропущу" )

В современных операционках, в отличие от доса, ни одна программа (кроме
драйверов и очень специфичного софта, близкого к дровам) не мониторит порты.
(Досовские проги мониторят, но на то они и ДОСовские). Остальные проги ЖДУТ,
когда ОС скинет им сообщение о том, что произошло событие.


Не зная как внутри работает функция inkey, но точно не мониторит порт, а
ждет сообщения о событии нажатия клавиши. Причем, если в очереди сообщений
нет самих сообщений, то ОС отдаст квант времени другому приложению (если
данное приложение не входит в безумный цикл или нет иных действий, кроме как
ожидание сообщения)



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите пжл
    #35695118
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAM
Примененять можно и Sleep(100) и INKEY(10) - как в моем примере. А разница-то в чем? ))
Для данного конкретного случая, когда приложение скрыто и не получает фокуса ввода, разницы нет никакой. Разница между функциями в том, что Sleep спит не реагирует на клавиатуру, а INKEY именно ждет сообщения о нажатии клавиши (но с таймаутом ожидания). Критично это бывает в некоторых специфичных случаях, только когда приложение может получить фокус ввода.

А уточнить человеку еще раз про задержку в цикле пришлось, потому как после вашего ответа человек все-равно задает вопрос про загрузку машины. Вот ему и 2.5 варианта: таймер, цикл с задержкой по INKEY или Sleep.

Можно еще планировщик использовать, если периодичность проверки достаточно редкая (10 минут и более).
...
Рейтинг: 0 / 0
Помогите пжл
    #35695451
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin Pahan[quot FAM]
Разница между функциями в том, что Sleep спит не реагирует на клавиатуру, а INKEY именно ждет сообщения о нажатии клавиши (но с таймаутом ожидания).

Ничего INKEY(10) не ждет. С таким параметром он вообще ничего не ждет. Это - 10-и секундная пауза. И ничего Вы в нее в таком варианте не передадите, никакого события. Вы код читайте прежде, чем его обсуждать. Там не INKEY() без параметров, а INKEY(10). Это две БОЛЬШИЕ разницы.

И Galyamov Rinat пытается это объяснить, а Вы не понимаете, о чем речь.
...
Рейтинг: 0 / 0
Помогите пжл
    #35695789
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAMKruchinin Pahan[quot FAM]
Разница между функциями в том, что Sleep спит не реагирует на клавиатуру, а INKEY именно ждет сообщения о нажатии клавиши (но с таймаутом ожидания).

Ничего INKEY(10) не ждет. С таким параметром он вообще ничего не ждет. Это - 10-и секундная пауза. И ничего Вы в нее в таком варианте не передадите, никакого события. Вы код читайте прежде, чем его обсуждать. Там не INKEY() без параметров, а INKEY(10). Это две БОЛЬШИЕ разницы.

И Galyamov Rinat пытается это объяснить, а Вы не понимаете, о чем речь.
Имхо, вы слышите то, что хотите, а не то, что вам говорят.

У INKEY(nSeconds) существует 2 события, по которым заканчивается обработка ожидания ввода пользователя:
1. Истечение таймаута в nSeconds секунд
2. Собственно ввод пльзователя.
Иллюстрируется примером:
Код: plaintext
1.
2.
3.
lnSeconds = SECONDS()
?INKEY( 10 )
?SECONDS() - lnSeconds

Единственное, что я не могу утверждать, это как кокретно происходит обработка этих двух событий, но я и не утверждаю нигде. Либо это thread message loop, либо это hook (для хука опять же требуется dll), либо специфическая функция ядра.

PS. Откуда такая толпа флеймеров понабежала? SU.KASCHENKO.LOCAL опять прикрыли, чтоли?
...
Рейтинг: 0 / 0
Помогите пжл
    #35695810
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAMИ Galyamov Rinat пытается это объяснить, а Вы не понимаете, о чем речь.
И с Ринатом мы ни в одном слове не разошлись. Что самое интересное.
...
Рейтинг: 0 / 0
Помогите пжл
    #35696986
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа! Не недо ругаться, я очень извиняюсь за наивные вопросы, которые вызывают у вас такую бурю эмоций.
Сотворил цикл, включив в него sleep (попозже попробую inkey, о результатах сообщу) все работает, ресурсы остаются достаточные. Но теперь VFP не видит изменений в таблице, в которую вносят пользователи сети из под FPD? Что-то не так с конфигурацией VFP?
...
Рейтинг: 0 / 0
Помогите пжл
    #35699013
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшкаГоспода! Не недо ругаться, я очень извиняюсь за наивные вопросы, которые вызывают у вас такую бурю эмоций.
Сотворил цикл, включив в него sleep (попозже попробую inkey, о результатах сообщу) все работает, ресурсы остаются достаточные. Но теперь VFP не видит изменений в таблице, в которую вносят пользователи сети из под FPD? Что-то не так с конфигурацией VFP?
Код покажите свой... Для примера еще раз приведу репрокод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SET REPROCESS TO  5  && Попыток открыть таблицу...
ON SHUTDOWN EXIT && Если программу пытаются завершить, покинем цикл...
lnMilliSeconds =  1000 

DO WHILE .T.
  USE MyTable IN  0  SHARED && Попытка открыть таблицу неэксклюзивно.
  IF USED("MyTable")
    IF "нужное_нам_условие_достигнуто"
      ...
    ENDIF
    USE IN SELECT("MyTable") && Закрываем таблицу, чтобы в следующем цикле обновить данные.
  ENDIF
  Sleep(lnMilliSeconds)
ENDDO
ON SHUTDOWN && Восстановим ON SHUTDOWN
...
Рейтинг: 0 / 0
Помогите пжл
    #35699065
qqшка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
USE IN SELECT("MyTable") && Закрываем таблицу, чтобы в следующем цикле обновить данные.

А что, для того чтобы увидеть изменения обязательно закрывать таблицу?
...
Рейтинг: 0 / 0
Помогите пжл
    #35699095
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшкаUSE IN SELECT("MyTable") && Закрываем таблицу, чтобы в следующем цикле обновить данные.

А что, для того чтобы увидеть изменения обязательно закрывать таблицу?
Нет, не обязательно. Можно просто передернуть запись...
Код: plaintext
1.
2.
3.
lnSaveRec = RECNO()
GO BOTTOM
GOTO lnSaveRec
Но! Я вам настоятельно рекомендую все-таки отпускать таблицу между проверками. Иначе, никто не сможет заполучить эту же таблицу на эксклюзивные операции, типа PACK и т.п. Несуразности опять же могут быть в случае обрыва связи.
...
Рейтинг: 0 / 0
Помогите пжл
    #35699619
FAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qqшка
Но теперь VFP не видит изменений в таблице, в которую вносят пользователи сети из под FPD? Что-то не так с конфигурацией VFP?

Закрывать- открывать таблицу - это очень, очень плохой тон. В нормальном приложении, если Вы контролируете таблицу, в которую пишут пользователи по сети следует применять:
1. Для записи пользователей конструкцию INSERT INTO
2. Для контроля - не сидеть в таблице напрямую, а через определенные промежутки времени делать запрос к таблице Select * from Tablica INTO CURSOR MyCr

И производить сравнения данных, полученных в сурсоре с теми, что были запомнены в предыдущей итерации. Ориентировочно так:

do while .T.
select from....
select MyCr
if YorArray(1)<> MyCr->f1
пищим
endif
if YorArray(2)<> MyCr->f2
сваливаем
endif
scat to YorArray
inkey(10)
endo

В этом случае все будет технологично - таблица всегда доступна всем пользователям сети, а Ваше приложение-сервер, которое мониторит содержание таблицы работает с курсором, никоме не мешая.
Такой подход позволяет делать гораздо более глубокий анализ. Например, когда каждый пользователь создает свою строку и пишет только в нее, а Вы можете отслеживать состояние записи по каждому юзеру и соответственно реагировать (например, послав ему автоматическое сообщение или вырубив программу...)
...
Рейтинг: 0 / 0
Помогите пжл
    #35699721
54321зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FAM прежде чем что-то писать почитайте хотя бы HELP
авторНичего INKEY(10) не ждет. С таким параметром он вообще ничего не ждет. Это - 10-и секундная пауза

Из HELP
авторВозвращает соответствующий код нажатой клавиши или кнопки мышки, находящийся в буфере клавиатуры.


INKEY([nSeconds] [, cHideCursor])



Параметры
nSeconds
Определяет временной интервал ожидания нажатия клавиши (в секундах). Если данный параметр nSeconds - отсутствует, INKEY( ) возвращает код нажатой клавиши немедленно .
...
Рейтинг: 0 / 0
Помогите пжл
    #35700004
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAM
Закрывать- открывать таблицу - это очень, очень плохой тон.
Я бы не был столь категоричен. Все зависит от логики приложения. Если бы это было обычное приложение, я бы с вами был абсолютно согласен.

В данном случае, мы имеем приложение-монитор. Для мониторов часто оказывается выгодней кратковременно захватывать файл ACCESS_SHARE, а затем отпускать дескриптор. Но! Если частота опроса таблицы достаточно высока (несколько раз в секунду), то закрывать таблицу смысла не имеет, слишком высоки накладные расходы на открытие файла.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите пжл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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