powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / COM-сервер счетчик ID
23 сообщений из 23, страница 1 из 1
COM-сервер счетчик ID
    #32911714
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работаю в файл-сервере, алгоритм формирования уникальных номеров белых накладных внутри одного года двоит номера. Понял что блокировка работает как то не так. Хочу сделать COM сервер который будет раздавать номера, и вести протокол событий. Кто нибудь такое уже делал, дайте подсмотреть.
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32911821
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользуйтесь поиском - мы уже здесь обсуждали с примерами как присваивать уникальные номера...
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32911863
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уникальные номера меня не интересуют , мне нужен COM сервер на который я обращаюсь с клиентскихз машин и который работает с базой.
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32911890
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУникальные номера меня не интересуют , мне нужен COM сервер на который я обращаюсь с клиентскихз машин и который работает с базой.

В данном случае никакой разницы нет, какой механизм использовать для получения ID, у Вас видимо неправильно работает сама процедура NewID, а так же не используются ограничения PK на табличку с накладными.

Надо сказать, что разнесение присвоение нового номера (если именно он используется в качествее PK&FK) отдельно от транзакции с данными - порочная практика.
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32911905
Oxygene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может клиенты должны получать экземляр уже запушенного com-сервера, а не создавать новой экземпляр.. Есть такая функция GetObject:

GETOBJECT(cFileName | Moniker [, cClassName])

C помощью нее можно получить ссылку на com объект..
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32911984
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я хочу запустить на сервере (Win XP) Fox-совую програмку и через нее делать всяки разны вещи, в том числе и получение уникального кода.
Насчет транкзаций наверное это справедливо, но я использую их только при резервировании, списывании количеств товаров. В транкзакциях учавствуют только 3 таблицы: Наличие, список документов и спецификация документов.
Как выполнить функцию именно на сервере, запустив процесс с клиента.
Например xx.User_reg(<Код юзера>,1)
Люди, пришлите пару строчек если есмъ.
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912208
Oxygene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй так:

youcomdll.prg: компилить как multi-threaded COM-server (dll)
DEFINE CLASS YourCOM AS CUSTOM OLEPUBLIC

verylastKey = 0

* Генерация случайного ключа..
Function CasualKey
LOCAL nKey

DO WHILE .T.
nKey = VAL(SYS(1)+PADL(ALLTRIM(STR(SECONDS()*1000)),8,[0]))
IF nKey <> this.verylastKey THEN
Exit
ENDIF
ENDDO
verylastKey = nKey

RETURN nKey
ENDFUNC
ENDDEFINE

используешь:
youcom = getobject('', 'youcomdll.yourcom')
key1 = youcom.CasualKey()
*MESSAGEBOX(STR(key))
youcom2 = getobject('', 'youcomdll.yourcom')
key2 = youcom2.CasualKey()
MESSAGEBOX(STR(key1) + ' ' + STR(key2))
RELEASE youcom

MessageBox: "245341360012709 245341360012710"
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912308
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При
youcom = getobject('', 'youcomdll.yourcom')
youcomdll - имя DLL-ля
yourcom - это что ?
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912314
Oxygene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEFINE CLASS YourCOM AS CUSTOM OLEPUBLIC
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912351
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял где что, уже просто полностью пример передрал. Неопознанная ошибка ... :[
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912363
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
определение класса должно следовать после исполняемого кода если других ошибок нет конечно
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912366
Oxygene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опиши подробнее..
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912409
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PROCEDURE SRV_ID

RETURN
DEFINE CLASS YourCOM AS CUSTOM OLEPUBLIC

verylastKey = 0

* Ãåíåðàöèÿ ñëó÷àéíîãî êëþ÷à..
Function CasualKey
LOCAL nKey

DO WHILE .T.
nKey = VAL(SYS(1)+PADL(ALLTRIM(STR(SECONDS()*1000)),8,[0]))
IF nKey <> this.verylastKey THEN
Exit
ENDIF
ENDDO
verylastKey = nKey

RETURN nKey
ENDFUNC
ENDDEFINE
********************

вызов из командного окна
xx = getobject(,'srv_id.yourcom')
получаем: OLE error 0x800401e3:Операция недоступна
или
xx = getobject('','srv_id.yourcom')
получаем: OLE error 0x800040005:Неопознанная ошибка
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912420
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FVP7
Упростил код :
в проекте один файл srv_id.prg
вот его содержимое:

PROCEDURE SRV_ID
RETURN
DEFINE CLASS YourCOM AS CUSTOM OLEPUBLIC
Function CasualKey
RETURN 1
ENDFUNC
ENDDEFINE

компилирую как Multi COM с Regenerate
ну ... хоть тресни...
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912716
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DMITRY_PEREDISTYРаботаю в файл-сервере, алгоритм формирования уникальных номеров белых накладных внутри одного года двоит номера. Понял что блокировка работает как то не так. Хочу сделать COM сервер который будет раздавать номера, и вести протокол событий. Кто нибудь такое уже делал, дайте подсмотреть.

Вопрос про COM как бы решен. Остались мелочи. Что на счет второй части вопроса? Com работать должен на сервере... Как зарегестрировать его на сервере, чтобы его можно было использовать с клиентов?
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912717
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините,Я задал вопрос... а не ответил...
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32912830
Empty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут тебе уже всего насоветовали в принципе. Только у тебя облом будет всеж. Ну создал ты сервер, ну зарегестрировал его у клиента как DCOM или WEB сервис, ну дергают твои клиенты методы у сервера и все вроде бы ОК. Но! Если клиентов будет много и всем нужет твой ID и все они дергают один и тот же метод(а фокс асинхронно не умеет выполнять методы ком - серверов, это только прироготипа RPC) то будешь ты очень долго висеть. С другой стороны можно сделать exe - сервер, но копия будет память кушать да и медленней они выполняются, тем более удаленно. Это я к чему говорю-то. К тому что сервер должен иметь очередь и уметь запускать поток для каждого запроса клиента. Я такое делал. Но без VFP + С++ тут не обойтись.
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32913435
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Empty!

Ты не совсем прав - почитай в хелпе как "распарраллеливается" выполнение
кода в MultiThreaded COM.
А вообще весь этот тред (дико извиняюсь перед уважаемыми участниками) -
полный бред! В COM придётся повторить тот-же код, с теми-же блокировками что
и в NewID, и работать он будет абсолютно аналогично (отличия не будут
существенными) - и если изначально NewID был кривой (а он БЫЛ кривой если
порождал дубли), то от переноса его на сервер НИЧЕГО не измениться.
Так что надо NewID поправить, а не через задний проход гланды рвать :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32913966
Oxygene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To DMITRY_PEREDISTY:

вызов из командного окна
xx = getobject(,'srv_id.yourcom')
получаем: OLE error 0x800401e3:Операция недоступна:

Ошибка происходит из-за того, что сервер не запущен, т.е. нет активного com-объекта.

Перед тем как использовать getobject(,'srv_id.youcom') кто-то должен создать этот объект! Например функцией xx = createobject('srv_id.youcom') или xx = getobject('', 'srv_id.youcom')

Почему не работает xx = getobject('', 'srv_id.youcom') не понятно, если srv_id.dll зарегистрирован, то должно работать, - попробуй createobject!
Потом, что это это за
PROCEDURE srv_id
RETURN
- убери это!
В твоем файле srv_id.prg есть только описание класса (ов)! А используешь ты его (их) в других файлах или формах
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32914936
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ , признаю, косяк в NewId() был, но Сервер работает быстрее чем любая из станций. И хорошо что процесс не паралельный! Это гарантия что раздача тарелок идет из одного окна, и дубля не будет. Будет очередь, но при 20 компах незначительная, тем более не все работают одновременно.
А кроме того я создам функцию регистрации пользователя на сервере, службу внутренних сообщений и прочая прочая, те файлы которые не хочется открывать со станции. Например связанные с деньгой, адресами клиентов. Вот и сбудется мечта идиота о секретном хранении данных в Foxpro :) а общаться они будут через функции COM сервера.

А по предыдущем сабжам я понял что DLL должен быть зарегистрирован. Как это сделать, и не регистрируется ли он во время сборки если проставить флажек Regenerate Components IDs ?
И еще обязательно ли сразу помещать его на физический сервер, и как с него тогда выполнять? а нельзя ли сначала локально запускать клиент и сервер из одного или двух окон Fox-пры?
Народ я осознаю убогость вопросов, но книжки уже истер до дыр, там нету...
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32915005
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже придется бороться самому.
Regssrv32.exe /i srv_id.dll ругается: Ошибка при вызове LoadLibrary("srv_id.dll")-не найден указанный модуль.
Да как же не найден? я его в system32 закатал куда уж искать? или можеть чего другое?
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32915212
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
911 - как это было: Я как всегда сидел на рабочем месте ...
...
Рейтинг: 0 / 0
COM-сервер счетчик ID
    #32915213
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
911 - как это было: Я как всегда сидел на рабочем месте ...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / COM-сервер счетчик ID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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