Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вопрос к osmor (Acc2003, winsock)
 
 автор: еед   (14.11.2012 в 13:45)   личное сообщение
 
   to: osmor   (06.11.2012 в 08:45)
 

Возник новый вопрос по применению Winsock

Случай одного запроса опробировал, все работает...
В интернете нашел примеры для случая более чем одного запроса
Правда все они для случая работы в VB, а не в Access

Вот один из таких примеров:
=======
Прием более чем одного запроса на соединение

Элементарный сервер, набросанный выше, принимает только один запрос на соединение. Однако, возможен прием нескольких запоосов на соединение, используя тот же control, создав массив control. В таком случае вам не нужно закрывать соединение, а просто создать новый экземпляр (установив свойство Index), и выполнив метод Accept на новом экземпляре.
В коде приведенном ниже принято, что Winsock control на форме назван sckServer, и его свойство Index установлено в 0; тот control является частью массива control. В секции объявлений на уровне модуля объявлена переменная intMax. В событии Load формы, intMax установлена в 0, а свойство LocalPort для первого control в массиве устанавливается в 1001. Тогда метод Listen выполняется для control, делая его прослушиваемым control. Как только поступает запрос на соединение, код проверяет свойство Index на 0 (признак того, что control "прослушиваемый" ). Если да, прослушиваемый control увеличивает intMax, и использует тот номер, чтобы создать новый экземпляр control. Новый экземпляр control потом используется для приема запроса на соединение.
Private intMax As Long

Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub
================

И вот тут я столкнулся с тем, что не могу найти свойство Index в установленном Microsoft Winsock Control 6.0 (SP6) ....

Я чего то не понимаю, или же делаю что то не так???
Как сделать сервер для приема более чем одного запроса на соединение в Access ???

Помогите разобраться. Спасибо.

  Ответить  
 
 автор: еед   (06.11.2012 в 11:30)   личное сообщение
 
   to: snipe   (05.11.2012 в 06:43)
 

Речь шла всего лишь о возможности апробирования ActiveX Winsock, а для этого прежде всего нужен был доступ к нему... А с этим и были начальные непонятки.

  Ответить  
 
 автор: osmor   (06.11.2012 в 08:45)   личное сообщение
 
   to: ЕЕД   (01.11.2012 в 17:29)
 

Поскольку вопрос ко мне, отмечусь.
Прошу прощения что не ответил, болел....
Я так понял вопрос решен.

  Ответить  
 
 автор: snipe   (05.11.2012 в 06:43)   личное сообщение
 
   to: ЕЕД   (04.11.2012 в 21:48)
 

непонятно только к чему столько упорства?
есть ведь другие способы идентификации пользователя
например имя компьютера в сети (envirion - вроде)
ведь если придется тащить базу на другой комп - библиотеку придется тоже тащить

  Ответить  
 
 автор: ЕЕД   (04.11.2012 в 21:48)   личное сообщение
49 Кб.
 
   to: ЕЕД   (01.11.2012 в 17:29)
 

"Ларчик" открылся...

1) копируем файл mswinsck.ocx (в прикреплении) в папку C:\WINDOWS\system32

2) из командной строки регистрируем в реестре

regsvr32 C:\WINDOWS\system32\mswinsck.ocx

3) лицензируем с помощью REGEDIT

[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]
@="mlrljgrlhltlngjlthrligklpkrhllglqlr k"

4) В Access регистрируем файл из Tools\References как библиотеку.


После чего мы видим этот ActiveX как на панели элементов, для вставки в форму,
так и можем обратиться к нему как к объекту из программного модуля, например:

Option Compare Database
Option Explicit

Private Sub Form_Open(Cancel As Integer)
Dim Winsock1 As winsock
Set Winsock1 = New winsock
With Winsock1
MsgBox .LocalIP
End With
Set Winsock1 = Nothing
End Sub

  Ответить  
 
 автор: еед   (04.11.2012 в 14:35)   личное сообщение
 
   to: ЕЕД   (01.11.2012 в 17:29)
 

При скачивании разных копий mswinsck.ocx 6.0 из интернета наткнулся на экземпляр, выдающий сообщении об отсутствии лицензии на этот AtiveX.

А на одном форуме увидел текст:

...
1) устанавливаем mswinsck.ocx
2) REGEDIT4

[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]
@="mlrljgrlhltlngjlthrligklpkrhllglqlr k"
...

Однако те экземпляры mswinsck.ocx, которые удалось найти и скачать при регистрации в реестре
дают код отличный от 2c49f800-c2dd-11cf-9ad6-0080c7e7b78d
и соответствеенно должны иметь свой соответствующий код лицензии.
А вот с этим напряг...

mswinsck.ocx не поставляется с Access, а VB6, с которым поставляется и устанавливается этот элемент, у меня к сожалению нет. А хотелось бы покрутить его в работе и именно под Access...

  Ответить  
 
 автор: еед   (02.11.2012 в 18:36)   личное сообщение
 
   to: Анатолий (Киев)   (01.11.2012 в 19:16)
 

Функция тоже не работает:
Err 428 ActiveX component can't create object

Хотя я mswinsck.ocx подключил как библиотеку и в браузере объектов вижу
модуль класса winsock

P.S. Пример с IP всего лишь частная иллюстрации доступа к winsock, а доступа как раз и нет. И не понятно почему.

  Ответить  
 
 автор: Анатолий (Киев)   (01.11.2012 в 19:16)   личное сообщение
 
   to: ЕЕД   (01.11.2012 в 17:29)
 

А зачем вам элемент AtiveX на форме? Функция работает?
Еще IP адрес компьютера можно узнать с помощью WMI.

  Ответить  
 
 автор: ЕЕД   (01.11.2012 в 17:29)   личное сообщение
 
 

Вы, отвечая на вопрос:

Re: Как можно узнать IP адрес компьютера?

привели пример:

Public Function WinIP()
Dim IPAdr As Object
Set IPAdr = CreateObject("MSWinsock.Winsock")
WinIP = IPAdr.LocalIP
Set IPAdr = Nothing
End Function

В связи с чем, возник другой вопрос:

установил в папку \system32 mswinsck.ocx 6.0, зарегистрировал в реестре,
элемент AtiveX появился в списке, но...
при попытке вставить его в форму Acc2003 выдает сообщение:
"Приложение Access не поддерживает данный элемент AtiveX"

В чем причина?
Спасибо.

P.S. Возможно для случая Вашего примера должна быть подключена соответствующая библиотека. Какая?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList