Hôm nay,ace cho phép mình ra một phát pháo về vấn đề winshock trong access in lan,
Theo tài liệu của VB thì đại khái winshock có 2 loại TCP và UDP, các bạn tự đọc thêm tài liệu, trong phát pháo đầu tiên mời các bạn thảo luận, mình sử dụng kỹ thuật UDP
1, Để xài cái winshock bạn phải tham chiếu cái ocx mswinsck.ocx như hình vẽ
2, Bạn tham khảo 2 đoạn code của mình , một cho server và một cho client
a, for server
Mã:
Option Compare Database
Dim ten As String
Public WithEvents ws_server As MSWinsockLib.Winsock ' Vì không cho lôi thả nên phải sử dụng cái này
Public WithEvents ws_anser As MSWinsockLib.Winsock
Dim remoteHostIP As String
Dim remotePort As String
Private Sub btn_login_Click()
ten = InputBox("Vui long nhap ten", "What you name ?", "noname")
If ten = "" Then
ten = "noname"
End If
DoCmd.OpenForm "frm_client"
Me.btn_login.Enabled = False
End Sub
Private Sub Form_Load()
Set ws_server = New MSWinsockLib.Winsock
ws_server.Protocol = sckUDPProtocol
ws_server.Bind 1001 'server đang lắng nghe ở cổng số 1001, bạn có thể đặt khác tùy bạn
Set ws_anser = New MSWinsockLib.Winsock
ws_anser.Protocol = sckUDPProtocol
End Sub
Private Sub ws_server_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
ws_server.GetData msg
Select Case msg
Case "in":
remoteHostIP = ws_server.remoteHostIP
remotePort = ws_server.remotePort
Me.txt_output_server = "[" & ten & "]" & " login" & vbCrLf & _
Me.txt_output_server
ws_anser.RemoteHost = remoteHostIP 'Chỉnh súng bắn ngược lại client
ws_anser.remotePort = remotePort
ws_anser.SendData "[" & ten & "]: login >"
Case "out":
btn_login.Enabled = True
Me.txt_output_server = "[" & ten & "]" & " logout" & vbCrLf & _
Me.txt_output_server
Case Else:
Me.txt_output_server = "[" & ten & "] :" & msg & vbCrLf & _
Me.txt_output_server
ws_anser.RemoteHost = remoteHostIP
ws_anser.remotePort = remotePort
ws_anser.SendData "[" & ten & "]: " & msg
End Select
End Sub
b, for client
Mã:
Option Compare Database
Public WithEvents ws_client As MSWinsockLib.Winsock
Private Sub btn_send_Click()
If Not IsNull(txt_msg) Then
ws_client.RemoteHost = "localhost" 'ở đây để demo nên mình sử dụng localhost
ws_client.remotePort = 1001 ' Xia khẩu súng vào cổng 1001 của server
ws_client.SendData txt_msg ' Bóp cò thôi...
End If
End Sub
Private Sub Form_Load()
Set ws_client = New MSWinsockLib.Winsock
ws_client.Protocol = sckUDPProtocol
ws_client.RemoteHost = "localhost"
ws_client.remotePort = 1001
ws_client.SendData "in"
End Sub
Private Sub Form_Unload(Cancel As Integer)
ws_client.RemoteHost = "localhost"
ws_client.remotePort = 1001
ws_client.SendData "out"
End Sub
Private Sub ws_client_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
ws_client.GetData msg
Me.txt_output = msg & vbCrLf & _
Me.txt_output
End Sub
3, và đây là kết quả
[/php]
4, Ý kiến : Trong access để cài đặt chat mình nghĩ chỉ có thể dùng UDP bởi vì trong access microsoft không support array control.
5, Mời các bạn thảo luận...Các bạn xem thử có đoạn lệnh nào dư không nhé, mình không tìm thấy..., Vì thế cần tổ chức lại nhiều lắm trước khi phát triển...
Do hiện nay chúng ta không có bàn phím tiếng Việt nên phải xử dụng phương pháp kết hợp phím để gõ những ký tự đ, ư, ă…Nên khi nhập dữ liệu vào Combo Box chúng ta hay bị gặp những rắc rối như đ => dđ, ư => uư…
Ứng dụng sau đây hỗ trợ chúng ta thoát khỏi những phiền toái đó.
Để giải quyết vấn đề này ta thay Combo Box bằng tổ hợp Text Box và List Box. Chỉ khi Text Box hoặc List Box nhận Focus thì Visible của List Box mới bằng True, và khi cả 2 mất Focus thì Visible của List Box sẽ bằng False.
Tuy có hơi rườm ra 1 tí nhưng chúng ta sẽ cảm thấy thoải mái khi hưởng thành quả của nó.
Trích dẫn:Xin chào anh ạ, em có nghiên cứu ứng dụng Phần mềm quản lý công văn điện tử của anh, rất hay ạ, một số chức năng rất hay, ví dụ như chức năng Compact data và Auto Link Table.
A có thể share pass VBA để em học hỏi thêm Code của những cái này được không ạ.
Cảm ơn a đã xem qua Email.
Đầu tiên xin cảm ơn bạn về lời khen trên. Thật ra trên diễn đàn cũng có bài về chức năng Compact and Repair... nhưng chỉ giới hạn ở việc phải nhấn nút.
Vấn đề Pass VBA trước đây mình cũng đã từng Share pass VBA trong phiên bản 1.1 + 1.2 + 1.3 nhưng một số người lợi dụng để thương mại hóa nên mình ngừng shared. Nên bạn thông cảm. Nếu thích chức năng nào mình tách ra cho bạn tìm hiểu.
Tiện đây tôi xin tách ra Demo đầu tiên mà bạn yêu cầu để bạn nghiên cứu.
Demo này Tự động Compact and Repair... 1 tháng 1 lần ( Để minh họa bạn chỉ việc chỉnh hệ thống sang tháng tiếp theo là nó sẽ tự động bật tính năng Compact and Repair...( Compact xong sẽ không Compact nửa cho đến khi qua tháng sau) Bạn bật thử nhiều lần lên bạn sẽ thấy.
WDS (Wireless Distribution System) là một kỹ thuật mới dùng để phát triển mạng WLAN. Lúc trước để phát triển mạng WLAN chũng ta chỉ có 2 cách cơ bản như sau:
1. Dùng nhiều AP (Access Point): mỗi AP có 1 ssid và channel riêng. Điều này rất khó khăn khi triển khai vì vấn đề giao thoa(nhiễu) sóng giữa các AP, vì vậy không thể lắp bao nhiêu AP cũng được. Mặt khác do có nhiều ssid nên việc chọn mạng để kết nối vào gây khó khăn cho người truy cập.
2. Dùng booster hay dùng các APcó chức năng repeater. Lúc này toàn bộ mạng WLAN sẽ có duy nhất 1 ssid và channel. Cái này ưu điểm hơn phương pháp dùng nhiều AP là do chỉ có 1 ssid nên việc chọn mạng để truy cập dễ dàng, cái thứ hai là do dùng chung 1 channel nên không xảy ra vấn đề nhiễu sóng giữa các trạm.
Chức năng WDS tương tự như repeater là mở rộng mạng WLAN chỉ với 1 ssid và 1 channel, tuy nhiên nó có nhiều ưu điểm hơn repeater như sau:
- Với repeater thì mọi kết nối đều tập trung về AP trung tâm nên khi mở rộng mạng càng nhiều thì băng thông sẽ giảm. Nhất là hệ thống mạng WLAN có dùng các thiết bị chiếm băng thông nhiều như camera quan sát... thì rất khó triển khai. Với WDS thì mỗi trạm vừa đóng chức năng ap vừa là repeater, tức nếu tại các trạm WDS này có cáp nối vào switch thì băng thông đi đến mỗi WDS này sẽ đi vào Switch chứ không phải truyền về AP trung tâm, như vậy băng thông sẽ chia đều qua các trạm WDS.
- Nếu trong một khu vực rộng có nhiều trạm WDS và tại mỗi trạm có thể nhận sóng tốt từ 2 trạm xung quanh thì khi cấu hình WDS link chúng ta add MAC của cả 2 trạm kia (và ngược lại) thì khi kết nối WDS từ AP này đến 1 trong 2 AP bị đứt (do mất sóng từ AP đó - vấn đề hay xảy ra với mạng Wireless khi gặp thời tiết xấu) thì nó sẽ chuyển kết nối qua AP còn lại. Đây xem như là một giải pháp backup đường truyền.
- Với AP thì khi kết nối bridge thì 2 AP ở 2 đầu chỉ đóng vai trò bridge, không phát sóng cho các máy xung quanh truy cập, với WDS thì khi cấu hình bridge, cả 2 trạm ở 2 đầu sẽ làm nhiệm vụ bridge nhưng đồng thời cũng phát sóng nên các máy xung quanh vẫn truy cập được như là AP độc lập.
Cấu hình WDS :
Tùy loại thiết bị mà có cách cài đặt khác nhau, nhưng nó đều tương tự nhau về nội dung thực hiện, các bước như sau :
- Trước hết phải kiếm được chỗ nào bật chế độ WDS hoặc repeater, thường nó sẽ nằm trong phần wireless setup.
- Cả 2 con AP(Access Point) phải bật cùng 1 chế độ WDS hoặc repeater, trường hợp con dlink của mình thì nó có 4 chế độ: router access point, WDS, WDS+AP, WDS+router, mình chọn WDS+AP, ( Dir 600L)
- Sau khi bật WDS xong, bạn sẽ đặt SSID (tên mạng wifi) cho 2 AP, và nên đặt 2 tên khác nhau để khi xài rủi rớt mạng thì biết con nào mà sửa!
- Chanel phải giống nhau, ko được để auto, ví dụ cùng là chanel 11
- Đặt pass cũng giống nhau, ví dụ WPA2, pass là 123@@@123. Nếu không dùng pass thì bỏ qua bước này
- Trong phần cài đặt WDS, sẽ có phần add địa chỉ MAC, bạn sẽ add MAC của AP kia vào con AP này và ngược lại khi cấu hình WDS AP kia ... bạn sẽ add MAC của con AP này vào.
- Có loại AP thì sẽ có bước search SSID của AP khác rồi add vào, có loại thì ko cần, bạn phải tự điền MAC của cái kia vào, bạn có thể vào status hoặc dưới AP củng có.
- Cuối cùng bạn reboot 2 AP, sau đó từ modem ADSL, bạn gắn dây vào cổng LAN của 1 trong 2 AP(tốt nhất gắn vào con 2 râu vì nó phát sóng xa hơn ^^), lưu ý là gắn vào cổng LAN, ko gắn cổng WAN, vì có thể khi bật WDS nó sẽ auto tắt DHCP đi(nếu gắn vào LAN ko được mới thử gắn vào WAN).
Kiểm tra : AP1 cắm dây ADSL modem, AP2 chỉ cắm nguồn, thử kết nối AP2 bằng wifi hoặc bằng cáp, vào internet, hay vào trang cấu hình AP1 => nếu được thì việc cài đặt ok.
Ví dụ :
Làm thế nào để cấu hình chức năng WDS trên TP-LINK 11n Routers
Thích Hợp với: Bộ Định Tuyến Không Dây Chuẩn N 300Mbps, Bộ Định Tuyến Không Dây Chuẩn N 150Mbps
WDS(Wireless Distribution System) là hệ thống cho phép liên kết các kết nối của Access Point trong mạng IEEE 802.11, cho phép mở rộng hệ thống mạng bằng cách sử dụng nhiều Access Point mà không cần dùng tới dây nối như yêu cầu trước đây, để biết thêm thông tin về WDS, bạn có thể tham khảo ở Wikipedia, còn sau đây là hướng dẫn đơn giản giải pháp WDS cho sản phẩm SOHO
*Lưu ý : 2 thiết bị trên nên đặt 2 địa chỉ IP khác nhau, ở đây IP của Root AP là 192.168.1.2 trong khi IP của TP-LIN 11n Router là 192.168.1.1, nếu bạn muốn thay đổi địa chỉ IP của TP-LINK Router thì tham khảo bài viết FAQ_129
Để cài đặt WDS cho TP-LINK 11n Router, chúng ta thực hiện theo những bước sau :
Bước 1 : Đăng nhập vào trang quản trị của TP-LINK 11n Router, nếu bạn chưa thực hiện được việc đó thì vui lòng tham khảo bài viêt FAQ-87
Bước 2 : Ở list menu bên trái click Wireless -> Wireless Settings check vào ô Enable WDS, khi đó nó sẽ hiển thị thêm tùy chọn như phía dưới hình
Bước 3 : Thay đổi Chanel để phù hợp với Root AP(Access Point)
Bước 4 : Click vào nút Seach để tìm các SSID của Root AP và nhấn connect
Bước 5 : Làm xong bước 4, Router sẽ quay trở lại trang vừa rồi, lúc đó ta thấy SSID của Root AP và một số thông số sẽ được cập nhật đây đủ, tiếp đến bạn cài đặt bảo mật để phù hợp với từng người trên Root AP
Bước 6 : Click Save để lưu lại, quay lại menu để vào DHCP-> DHCP Settings, disable DHCP server rồi Save lại
Bước 7 : Khởi động lại Router : System Tools->Reboot
[img]Bước 8 : Tới đây, các yêu cầu về cài đặt của WDS cơ bản hoàn thành, giờ bạn cần Ping để kiểm tra, nếu như reply như hình dưới (tức là WDS hoạt động tốt) thì bạn đã làm đúng[/img]
Diễn đàn chúng ta đã có 1 bài viết liên quan đến gửi email bằng form Access nhưng chưa có thể đính kèm thêm file. Và Trước đây cũng có 1 bạn từng hỏi vấn đền gửi Email bằng Access có thêm file đính kèm nửa nhưng không có thời gian làm Demo nên chỉ gợi ý cho bạn ấy thôi.
Nên hôm nay xin phép gửi các bạn demo và hướng dẫn chi tiết về đính kèm thêm file.
Chúng ta sẽ làm 2 bước và 1 yêu cầu cần có * Yêu cầu: Máy phải cài đặt chương trình Microsoft Outlook 2003 trở lên
* 02 Bước đó là: Bước 1: Tạo kết nối User Accout trên Microsoft Outlook 2003
Mình xin phép sử dụng email hiện có của mình là : maidinhdan@gmail.com để minh họa về cấu hình gửi nhận Email trên Outlook 2003
Ghi chú: Tại sao cần bước 1 này ( Vì file đính kèm cần nới để lưu tạm)
Hình 1
Hình 2
Hình 3
Hình 4
Hình 5
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Hình
Trải qua 13 hình trên ta sẽ có 1 tài khoản outlook kết nối với Email của ta.
Bước 2: Bước là là quan trọng nhất.
- Tạo 1 table tên là: tblMailingList có cột EmailAddress kiểu text
- Tạo form tên là: frmMail gồm Email người nhận; Tiêu đề; Nội dung; Địa chỉ file cần gửi (tạm gọi là txtdinhkem) và 1 nút Send
Hình form minh họa
Tạo Modules hay dan duoi form tuy : Code hàm gửi như sau:
Mã PHP:
' maidinhdan suu tam tai : http://support.microsoft.com/en-us/kb/318881/vi-vn Option Explicit
Sub SendMessages(Optional AttachmentPath)
Dim MyDB As Database Dim MyRS As Recordset Dim objOutlook As Outlook.Application Dim objOutlookMsg As Outlook.MailItem Dim objOutlookRecip As Outlook.Recipient Dim objOutlookAttach As Outlook.Attachment Dim TheAddress As String
Set MyDB = CurrentDb Set MyRS = MyDB.OpenRecordset("tblMailingList") MyRS.MoveFirst
' Khoi tao Outlook. Set objOutlook = CreateObject("Outlook.Application")
Do Until MyRS.EOF
' Tao e-mail message. Set objOutlookMsg = objOutlook.CreateItem(olMailItem) TheAddress = MyRS![EmailAddress]
With objOutlookMsg ' Them dia chi nguoi nhan tin e-mail. Set objOutlookRecip = .Recipients.Add(TheAddress) objOutlookRecip.Type = olTo
' Them nguoi nhan Cc (Tao ban sao) If (IsNull(Forms!frmMail!CCAddress)) Then Else Set objOutlookRecip = .Recipients.Add(Forms!frmMail!CCAddress) objOutlookRecip.Type = olCC End If
' Tieu de, noi dung Email. .Subject = Forms!frmMail!Subject .Body = Forms!frmMail!MainText .Importance = olImportanceHigh 'Muc do quan trong cua la thu, mac dinh la Cao
'Dinh kem tap tin. If Not IsMissing(AttachmentPath) Then Set objOutlookAttach = .Attachments.Add(AttachmentPath) End If
' Loc ten tung nguoi nhan. For Each objOutlookRecip In .Recipients objOutlookRecip.Resolve If Not objOutlookRecip.Resolve Then objOutlookMsg.Display End If Next .Send End With MyRS.MoveNext Loop Set objOutlookMsg = Nothing Set objOutlook = Nothing End Sub
Ở nút Send của frmMail ta gọi câu thần chú
Mã PHP:
Private Sub cmdgui_Click() SendMessages (Me.txtdinhkem) End Sub
Nhớ khai báo thư viện: Microsoft Outlook 11 hoặc hơn ( Office 2003 chắc chắn là 11 rồi)
Khi nhấn nút gửi nó sẽ hiện lên 1 bảng ( có muốn lưu vào Outlook không) rồi nhấn Yes 2 lần là nó gửi ngay...dù có báo lỗi những email đã được gửi.
Hình nó nè
Xin hết.....có gì sai xót mong các Anh/Chị đóng góp thêm.
Xin chân thành cảm ơn.