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

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

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

GETOBJECT(cFileName | Moniker [, cClassName])

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

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
11.02.2005, 17:23
    #32912308
DMITRY_PEREDISTY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
При
youcom = getobject('', 'youcomdll.yourcom')
youcomdll - имя DLL-ля
yourcom - это что ?
...
Рейтинг: 0 / 0
11.02.2005, 17:27
    #32912314
Oxygene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
DEFINE CLASS YourCOM AS CUSTOM OLEPUBLIC
...
Рейтинг: 0 / 0
11.02.2005, 17:45
    #32912351
DMITRY_PEREDISTY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
Понял где что, уже просто полностью пример передрал. Неопознанная ошибка ... :[
...
Рейтинг: 0 / 0
11.02.2005, 17:52
    #32912363
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
определение класса должно следовать после исполняемого кода если других ошибок нет конечно
...
Рейтинг: 0 / 0
11.02.2005, 17:53
    #32912366
Oxygene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
Опиши подробнее..
...
Рейтинг: 0 / 0
11.02.2005, 18:17
    #32912409
DMITRY_PEREDISTY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
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
11.02.2005, 18:22
    #32912420
DMITRY_PEREDISTY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
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
12.02.2005, 07:24
    #32912716
Ilhom_uz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
DMITRY_PEREDISTYРаботаю в файл-сервере, алгоритм формирования уникальных номеров белых накладных внутри одного года двоит номера. Понял что блокировка работает как то не так. Хочу сделать COM сервер который будет раздавать номера, и вести протокол событий. Кто нибудь такое уже делал, дайте подсмотреть.

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

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

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
14.02.2005, 11:11
    #32913966
Oxygene
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
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
14.02.2005, 17:46
    #32914936
DMITRY_PEREDISTY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-сервер счетчик ID
Народ , признаю, косяк в NewId() был, но Сервер работает быстрее чем любая из станций. И хорошо что процесс не паралельный! Это гарантия что раздача тарелок идет из одного окна, и дубля не будет. Будет очередь, но при 20 компах незначительная, тем более не все работают одновременно.
А кроме того я создам функцию регистрации пользователя на сервере, службу внутренних сообщений и прочая прочая, те файлы которые не хочется открывать со станции. Например связанные с деньгой, адресами клиентов. Вот и сбудется мечта идиота о секретном хранении данных в Foxpro :) а общаться они будут через функции COM сервера.

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


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