for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Проблема блокировки клавиатуры на время выполнения процедуры
proit69
Автор

Сообщений: 11
Дата: 28.12.17 10:38:35ОтветитьЦитировать
Здравствуйте.
Программист по FoxPro задал мне вопрос почему перестала работать(неожиданно)его команда по отключению клавиатуры на время выполнения процедур в FoxPro.Скрин кода по ссылке.
screenshot.ru
Он говорит за 10 лет у него это случалось 1 раз когда Windows была не Professional версии.У нас версия Prof.Вчера работало сегодня уже нет.
С его слов что в строчке BlockInput должна быть единичка а не ноль.Помогите пожалуйста разобраться.
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
pasha_usue

Сообщений: 2874
Откуда: Е-бург
Дата: 28.12.17 11:25:45ОтветитьЦитировать
Программист, говорите? А что, GetLastError он не в состоянии прочитать?

А по-существу. Программа с правами админа запущена?
Ratings: 0 negative/1 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
pasha_usue

Сообщений: 2874
Откуда: Е-бург
Дата: 28.12.17 11:42:21ОтветитьЦитировать
А вообще. Простите, конечно, что встреваю. Вы лучше как-нибудь программиста поменяйте. У вас очень неудачная прокладка между сидением и монитором. Судя по тем двум кускам кода, которые вы на форуме выкладывали.
Ratings: 0 negative/2 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Igor Korolyov

Сообщений: 31087
Дата: 28.12.17 11:55:41ОтветитьЦитировать
По существу будет вопрос нах*** блокировать ввод? Что такого делает эта "процедура", что нужно из за неё всю систему раком ставить?
Для фокса вполне достаточно настроек SET ESCAPE и/или обработки ON ESCAPE - если уж надо "по своему" реагировать на нажатие esc, не прерывая аварийно программу.
Впрочем, для автора
PUBLIC VOZV и DO C:\продажа\запись.fxp
сии вопросы не актуальны - там нужно совсем другой вопрос ставить


------------------
WBR, Igor
Ratings: 0 negative/1 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
proit69
Автор

Сообщений: 11
Дата: 28.12.17 12:50:55ОтветитьЦитировать
Запущена с правами админа.Он директор не вижу возможностей его поменять))давать ему инструкции по поводу его кода я не могу.
FoxPro 7 версии



Исправлено: proit69, 28.12.17 12:51
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
pasha_usue

Сообщений: 2874
Откуда: Е-бург
Дата: 28.12.17 12:58:39ОтветитьЦитировать
proit69
Запущена с правами админа.Он директор не вижу возможностей его поменять))давать ему инструкции по поводу его кода я не могу.
FoxPro 7 версии
Вот прямо правой кнопкой мыши щелкнуто и "запускать от имени администратора"? Для этой функции прямо очень высокие права надо.

Попробуйте UAC отключите совсем. Помирать, так с музыкой.
Ratings: 0 negative/1 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
of63

Сообщений: 10598
Откуда: Н.Новгород
Дата: 28.12.17 13:19:46ОтветитьЦитировать
Есть еще CLEAR TYPEAHEAD - стирает нажатые клавиши в очереди, которые не обработаны остались в процессе работы долгой программы. Т.е. после долгой процедуры издать такую команду
Ratings: 0 negative/1 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
proit69
Автор

Сообщений: 11
Дата: 28.12.17 13:25:10ОтветитьЦитировать
UAC отключен программа запускается с правами админа это выставлено в параметрах запуска соответствующей галочкой.
На компе сделаны все настройки на 10 компах одинаковы на остальных все работает и на этом работало еще вчера а сегодня уже нет.
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Igor Korolyov

Сообщений: 31087
Дата: 28.12.17 13:33:14ОтветитьЦитировать
Даже комп не выдержал и решил таки сказать вашему директору что он долб***б
Вали пока не поздно с такой "конторы".

Цитата:
Беда, коль пироги начнет печи сапожник,
А сапоги тачать пирожник,
И дело не пойдет на лад.
Да и примечено стократ,
Что кто за ремесло чужое браться любит,
Тот завсегда других упрямей и вздорней:
Он лучше дело всё погубит,
И рад скорей
Посмешищем стать света,
Чем у честных и знающих людей
Спросить иль выслушать разумного совета.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
descent52_tmp

Сообщений: 212
Откуда: Саров
Дата: 29.12.17 08:55:13ОтветитьЦитировать
Igor Korolyov
Даже комп не выдержал и решил таки сказать вашему директору что он долб***б Вали пока не поздно с такой "конторы".

Igor Korolyov, а что делать вот с этим? Тоже валить, поднимая пыль, роняя калл?
CREATE CURSOR test (Id_otdel int, Id_str int, NumStr1 char(50), NumStr2 char (50), id_glaz int, id_pol int, id_rost int)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 1, 'Иванов', 'Иван Ивыныч',1,1,1)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 1, 'Петров', 'Иван Ивыныч',2,1,2)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 1, 'Сидоров', 'Иван Ивыныч',2,2,1)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 1, 'Путенков', 'Иван Ивыныч',1,2,2)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 2, 'глаза-', 'голубые',0,0,0)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (2, 2, 'глаза-', 'карие',0,0,0)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 3, 'пол', 'мужской',0,0,0)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (2, 3, 'пол', 'женский',0,0,0)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (1, 4, 'рост', '170-180',0,0,0)  
  INSERT INTO test (Id_otdel, Id_str, NumStr1, NumStr2, id_glaz, id_pol, id_rost) VALUES (2, 4, 'рост', '160-170',0,0,0)  
    
  SELECT A.NumStr1 as fam, A.NumStr2 as nameotch, ;  
  B.NumStr1 as glaz, B.NumStr2 as tip_glaz, ;  
  C.NumStr1 as pol, C.NumStr2 as tip_pol, ;  
  D.NumStr1 as rost, D.NumStr2 as tip_rost FROM test A ;  
  left join test B on A.id_glaz=B.id_otdel AND B.id_str=2 ;  
  left join test C on A.id_pol=C.id_otdel AND C.id_str=3 ;  
  left join test D on A.id_rost=D.id_otdel AND D.id_str=4 ;  
  WHERE A.id_str=1  INTO CURSOR result  
  BROWSE normal
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Igor Korolyov

Сообщений: 31087
Дата: 29.12.17 12:40:25ОтветитьЦитировать
"В принципе" делать "одну таблицу - универсальный справочник" вполне себе можно (хотя минусов в этом способе тоже предостаточно). Только не так как описано. Как минимум в ней не должно быть полей специфичных для "конкретных сущностей" (обычно такого рода таблицу делают из полей id/table_id/name), и уж точно id не должен называться id_otdel Равно как и не ясен смысл разделения "наименования" на 2 отдельных поля...


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
descent52_tmp

Сообщений: 212
Откуда: Саров
Дата: 29.12.17 17:09:53ОтветитьЦитировать
Igor Korolyov
"В принципе" делать "одну таблицу - универсальный справочник" ...
Искренне тебе, Игорь, желаю никогда не встретиться с подобной бредятиной в работе, потому что понять некий код это одно, а понять логику - да вот к..й вам, а не золотая рыбка, это другое. Втыкать, почему тут id_str=2, а тут id_str=3 и т.д., a не A.id_str=B.id_str, да лопатой по башке автору ..уть пару раз, может автор начнёт кислое от длинного отличать... Паразитизм хорош только для паразита, одно дело по незнанию, и совсем другое дело осознанно такое писать
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Igor Korolyov

Сообщений: 31087
Дата: 29.12.17 19:37:10ОтветитьЦитировать
На самом деле у нас в системе подобный подход используется
Скажем есть таблица entity, в которой "смешались в кучу кони, люди" находятся абсолютно разные сущности - ну к примеру там есть организации, сотрудники, материалы, работы, объекты строительства и многое многое прочее, включая штуки очень сходные с "цвет глаз", "форма носа" и "пол".
Правда для большинства таких сущностей есть и "конкретизирующие" таблицы типа Organization, Employee, Material, Work... Там хранятся как раз все "специфичные" реквизиты. Т.е. в самой entity нет никаких id_glaz да id_pol. Плюс к тому в этих таблицах хранится/дублируется и собственно name - т.е. по большому счёту если нам нужен "точно сотрудник", то ходить к таблице entity для получения его реквизитов не требуется. Триггера обеспечивают и согласованное состояние между этими таблицами - в частности синхронное изменение поля name. Да, связаны они по id - т.е. скажем в таблице Organization поле id является одновременно и первичным ключом и внешним (со связью на Entity).
"Примитивные" сущности, где кроме как "название" и нет никаких более реквизитов, хранятся только в таблице entity - т.е. это в "чистом виде" универсальный справочник выходит.
Служебный реквизит отделяющий мух от котлет - поле discriminator, и оно строковое (хотя и урезано по размеру до 3 символов - всё же место следует экономить ).
На самом деле "работа" с такой таблицей не является "ужасно сложной и/или неудобной". Твой запрос переформулировался бы в вид:
select emp.id, emp.name, emp.age, eye.name eye_color, gender.name gender, height.name height_class  
   from employee emp  
    left join entity eye on eye.id = emp.eye_id and eye.discriminarot = 'EYE'  
    left join entity gender on gender.id = emp.gender_id and gender.discriminarot = 'GEN'  
    left join entity height on height.id = emp.height_id and height.discriminarot = 'HGH'
Я лично не вижу в этом особых проблем...

Для чего это может быть полезно - разговор отдельный
Когда в БД число таблиц переваливает за тысячу, то плодить ещё сотню "шаблонных" примитивов (id,name) да ещё и всего по 3-4 записи в каждой уже не кажется хорошей идеей. И когда "новые сущности" могут появляться динамически (т.е. без изменения кода ПО и структуры БД) - тут тоже без подобного "универсализма" не обойтись. Есть и другие "соображения".
Конечно же далеко не ВСЕ сущности предметной области (т.е. грубо говоря таблицы) таким образом "универсализированы".


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
of63

Сообщений: 10598
Откуда: Н.Новгород
Дата: 29.12.17 19:44:59ОтветитьЦитировать
Я не понял идеи. Ты можешь изложить идею (ее плюсы) иерархически, начиная с самой простой конструкции?
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Igor Korolyov

Сообщений: 31087
Дата: 29.12.17 21:08:04ОтветитьЦитировать
Может быть после НГ, если не пропадёт желание
Тезисно, это решение нескольких вопросов:
1) уменьшить число таблиц в БД - за счёт "тривиальных справочников id/name".
2) возможность "динамически создавать" такиого рода справочники (без изменения кода ПО и структуры БД).
3) позволить унифицированным образом навешивать некоторый функционал на "серьёзные" справочники (те же организации/сотрудников/работы) - в частности иерархии (при том множественные - т.е. одни и те же элементы складывать в разные деревья) и всякие "левые признаки" (бизнес-логика эта та ещё дуристика, бывает надо к той же организации прилепить кучку признаков "своя/соседская/чужая", "хорошая/плохая", "производитель/потребитель/посредник" и т.п.)
4) позволяет в некоторых местах ссылаться на РАЗНОТИПНЫЕ объекты. Это известная проблема - как, к примеру, в "договоре" сделать ссылку либо на организацию, либо на человека - физлицо, если они в разных таблицах хранятся. Два поля и контроль что "одно и только одно" из них заполнено? А если нужно на 3 разных сущности сослаться ещё поле добавить? В объектной модели это решается через интерфейс либо базовый класс (свойство принимающее объект разного "реального" типа), в реляционной - не решается никак. Не, ну есть вариант хранить id и рядом "имя таблицы" на которую идёт ссылка - только это гораздо более кривой вариант.
может ещё что, с ходу не вспомню уж

На самом деле есть такой хитрый подход к хранению "объектов" в реляционной БД, когда ЛЮБЫЕ сущности укладываются грубо говоря в 3-4 "абсолютно универсальные" таблицы "объект"/"свойство"/"связь". Он очень, нет ОЧЕНЬ неэффективен (любой мало-мальский запрос вынуждает соединять эти таблицы по 100 раз - просто чтобы достать все нужные "свойства"). Так что тут некоторый компромисс - "в целом" реляционная модель, а всякие "мелочи" (там где потеря производительности не очень страшна) универсализированы.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
of63

Сообщений: 10598
Откуда: Н.Новгород
Дата: 29.12.17 21:15:56ОтветитьЦитировать
опять длинная словесная конструкция, в 2 абзаца... Я ниче не понял (идею, 2х словесную, + расширение... ну куда уж...)ТС наверное поймет лучше
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
PaulWist

Сообщений: 12881
Дата: 30.12.17 00:25:03ОтветитьЦитировать
of63
... Я ниче не понял ...

Пример: есть справочник "Тип документа" содержащий поля TypeDoc_ID, Name, так же есть справочник "Должности" с полями Appointment_ID, Name, ну и до кучи справочник валют с полями TypeCurrency_ID, Name.
Что общего у этих справочников - это структура данных ID, Name.

Что напрашивается сделать - поместить все три справочника в одну таблицу, поскольку структура у них одинаковая.
Какие выгоды это даст - можно создавать любое количество справочников с таким типом данных, те юзеру не нужны права на create/alter/drop table, а достаточно прав на Insert/Update/Delete одной таблицы (вернее двух).

Таким образом, структура данных из множества таблиц вырождается в две таблички:
таблица метаданных - Dictionary (ID primary key, Name) это название справочников ("Тип документа", "Должности", "Валюты" итд).

И табличка самих данных DictDetails (ID primary key, Dictionary_ID foreing key on Dictionary (ID), Name) это Директор, Дворник, Рубли, Юани, Договор, Заявка итд.

PS Вроде Игорь "разжевал на пальцах".

PSS Аналогичную структуру использует всё "конфигурируемое" ПО (1С, Навижен, Аксапта итд)


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено: PaulWist, 30.12.17 00:31
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
of63

Сообщений: 10598
Откуда: Н.Новгород
Дата: 30.12.17 03:02:47ОтветитьЦитировать
Как хранить разные "сущности" в одной табличке, это и ТС догадался. Вы с Игорем только вербализируете это способ во много абзацев текста описания...
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Igor Korolyov

Сообщений: 31087
Дата: 30.12.17 10:12:43ОтветитьЦитировать
Вообще-то это было лишь 2 пункта из 4-х. И исторически они как раз "последние" были, а не первые


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Проблема блокировки клавиатуры на время выполнения процедуры
Ydin

Сообщений: 5836
Откуда: Киев
Дата: 30.12.17 10:27:57ОтветитьЦитировать
У нас в бухгалтерии пообъектный учет в проводках.
Сущности - здания, сотрудники, машины, ...
Для каждого вида сущности табличка ID, Name, ...
У некоторых Parent для дерева.
Еще таблица, где минимально описаны сами эти таблицы, типа
Prefix,Name.
Поле в журнале проводок типа Object C(24) имеет вид
Dep52 или Car719,...

Для ввода/редактирования в гриде для этого поля хитрый двойной комбобокс, точнее контейнер с 2-мя комбами. Они в 2 этажа.
Он появляется только на фокусе. Это уже детали интерфейса.
А с таблицами просто с самими сущностями.
Давно работает. Сложное только в интерфейсном решении, но 1 раз сделано и все.
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут писать в этом форуме.

On-line: 34 Simple777 AndyNigmatec  and Guests: 32


© 2000-2018 Fox Club 
Яндекс.Метрика