|
|
|
| Вы, отвечая на вопрос:
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. Возможно для случая Вашего примера должна быть подключена соответствующая библиотека. Какая? | |
|
| |
|
|
|
| А зачем вам элемент AtiveX на форме? Функция работает?
Еще IP адрес компьютера можно узнать с помощью WMI. | |
|
| |
|
|
|
| Функция тоже не работает:
Err 428 ActiveX component can't create object
Хотя я mswinsck.ocx подключил как библиотеку и в браузере объектов вижу
модуль класса winsock
P.S. Пример с IP всего лишь частная иллюстрации доступа к winsock, а доступа как раз и нет. И не понятно почему. | |
|
| |
|
|
|
| При скачивании разных копий 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... | |
|
| |
|
49 Кб. |
|
| "Ларчик" открылся...
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 | |
|
| |
|
|
|
| непонятно только к чему столько упорства?
есть ведь другие способы идентификации пользователя
например имя компьютера в сети (envirion - вроде)
ведь если придется тащить базу на другой комп - библиотеку придется тоже тащить | |
|
| |
|
|
|
| Речь шла всего лишь о возможности апробирования ActiveX Winsock, а для этого прежде всего нужен был доступ к нему... А с этим и были начальные непонятки. | |
|
| |
|
|
|
| Поскольку вопрос ко мне, отмечусь.
Прошу прощения что не ответил, болел....
Я так понял вопрос решен. | |
|
| |
|
|
|
| Возник новый вопрос по применению 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 ???
Помогите разобраться. Спасибо. | |
|
| |