Web Server & Client API - Truy xuất dữ liệu, Downloads, Uploads, Tìm kiếm File - Folder Qua Internet

Liên hệ QC

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,421
Được thích
4,033
Giới tính
Nam
1/ Ý tưởng xuất phát từ chủ đề sau

2/ Hôm nay tôi giới thiệu cho ai yêu thích thì sử dụng các hàm cơ bản nhất thông qua Web Server & Client truy xuất dữ liệu và tìm kiếm File Qua Internet

sử dụng các hàm API để thực hiện trên VBA hay các ngôn ngữ lập trình khác cho Windows

Phía Máy chủ sử dụng Hàm API như sau
Mã:
#If Win64 Then
    Rem ########## Call StartServer(Ip,Port) Server lang nghe tren toan bo PC
    Declare PtrSafe Sub StartServer Lib "WebServer64.dll" (ByRef IP As Variant, ByRef Port As Variant)
 
    Rem ########## Call InitializeServer("127.0.0.1", 8080, "C:\DataBase_Server")
    Rem Server lang nghe tren "C:\DataBase_Server"
    Declare PtrSafe Sub InitializeServer Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant)
    Rem ##########
    Declare Sub StopServer Lib "WebServer64.dll" ()
#Else
    Rem ##########
    Declare Sub StartServer Lib "WebServer32.dll" (ByRef IP As Variant, ByRef Port As Variant)
    Rem ##########
    Declare Sub InitializeServer Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant)
    Declare Sub StopServer Lib "WebServer32.dll" ()
    Rem ##########
#End If
Rem ##########
Sub StartWebServer()
    Dim IP As String, Port As Long
    IP = GetMyLocalIP()
    Port = 8080
    Rem Call StartServer(IP, Port) ''Server Bat dau tren toan bo PC
    Call InitializeServer(IP, Port, "C:\DataBase_Server") ''Server Bat dau voi ServerPath
End Sub

1/ Khi sử dụng hàm StartServer thì máy chủ sẻ lắng nghe trên toàn bộ Máy tính bao gồm toàn bộ các ổ cứng hiện có trên PC

2/ Khi sử dụng hàm InitializeServer thì máy chủ sẻ lắng nghe trên Folder chia sẻ

3/ hiện chưa phân quyền cho 2 mục nêu trên

4/ Khi sử dụng hàm StartServer thì máy khác muốn truy xuất file nào trên PC máy chủ thì truyền tham số DBPath là đường dẫn tuyệt đối VD: D:\MyFolder\Data.accdb

5/ Khi sử dụng hàm InitializeServer thì phía máy khách truyền tham số DBPath tương đối là Data.accdb phía máy chủ tự gán Folder vào Data.accdb

6/ Chắc chắn nhất ta cứ truyền DBPath theo mục số 4 là D:\MyFolder\Data.accdb thì phía máy chủ lắng nghe kiểu gì cũng sử dụng tốt


Phía Máy Khách như sau:
Mã:
Rem-----------------
#If Win64 Then
    Declare PtrSafe Function GetRs Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
    Rem-----------------
    Declare PtrSafe Function GetTableNamesA Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant) As Variant
    Rem-----------------
    Declare PtrSafe Function GetFieldNamesA Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
    Rem-----------------
    Declare PtrSafe Function GetListDataBaseA Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
    Rem-----------------
    Declare PtrSafe Function GetLastIdTableNameA Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
#Else
    Declare Function GetRs Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
    Rem-----------------
    Declare Function GetTableNamesA Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant) As Variant
    Rem-----------------
    Declare Function GetFieldNamesA Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
    Rem-----------------
    Declare Function GetListDataBaseA Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
    Rem-----------------
    Declare Function GetLastIdTableNameA Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, _
        ByRef FileName As Variant, ByRef SQL As Variant) As Variant
#End If

1/ Hàm GetRs là hàm chính sử dụng cho truy xuất và lưu dữ liệu lên Server
hàm trả về là Rst As ADODB.Recordset với các tính năng và thuộc tính như ADODB khi ta check ADODB 2.8 to 6.1

2/ Đính kèm code mẫu trong File có thể tham khảo thêm

3/ Hàm hỗ trợ tìm kiếm file trên máy chủ như sau
Mã:
#If Win64 Then
    Rem ########## Call StartServer(Ip,Port) Server lang nghe tren toan bo PC
    Declare PtrSafe Sub StartServer Lib "WebServer64.dll" (ByRef IP As Variant, ByRef Port As Variant)
   
    Rem ########## Call InitializeServer("127.0.0.1", 8080, "C:\DataBase_Server")
    Rem Server lang nghe tren "C:\DataBase_Server"
    Declare PtrSafe Sub InitializeServer Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant)
       
    Rem ##########
    Declare Sub StopServer Lib "WebServer64.dll" ()
   
    Rem ##########
    Declare PtrSafe Function GetFilesListArray Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant) As Variant
       
    Rem ##########
    Declare PtrSafe Function GetFileByExtension Lib "WebServer64.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant, _
        ByRef Extension As Variant, ByRef InSubfolders As Boolean) As Variant
    Rem ##########
#Else
    Rem ##########
    Declare Sub StartServer Lib "WebServer32.dll" (ByRef IP As Variant, ByRef Port As Variant)
    Rem ##########
    Declare Sub InitializeServer Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant)
    Declare Sub StopServer Lib "WebServer32.dll" ()
    Rem ##########
    Declare Function GetFilesListArray Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant) As Variant
    Rem ##########
    Declare Function GetFileByExtension Lib "WebServer32.dll" _
        (ByRef IP As Variant, ByRef Port As Variant, ByRef ServerPath As Variant, _
        ByRef Extension As Variant, ByRef InSubfolders As Boolean) As Variant
    Rem ##########
#End If

1/ hàm GetFilesListArray lấy danh sách file ( không đệ quy Folder ) trên máy chủ gán xuống Sheet hay tùy ý sử dụng hộ trợ cho tìm DBpath truy xuất dữ liệu từ Xa

2/ Hàm GetFileByExtension như hàm trên với tùy chọn tìm kiếm theo Extension ( phần mở rộng của File ) và tùy chọn duyệt Folder đệ quy

3/ Cách sử dụng hàm GetFilesListArray
Mã:
Sub PopulateSheetWithFileList()
  Dim ServerIP As String
  Dim ServerPort As Integer
  Dim FolderPath As String
  Dim FileList() As String
  Dim i As Integer

  ServerIP = GetMyLocalIP()
  ServerPort = 8080
  Rem FolderPath = "C:\DataBase_Server"
  FolderPath = "D:\DataBase_Server"
  Cells.Clear

  ' G?i hàm Delphi t? VBA d? nh?n danh sách tên t?p
  FileList = GetFilesListArray(ServerIP, ServerPort, FolderPath)
  Debug.Print UBound(FileList, 1)
   
  ' Xóa n?i dung cu trong t? tính
  ThisWorkbook.Sheets("Sheet1").Cells.Clear

  ' Gán danh sách tên t?p lên các dòng c?a t? tính
  For i = LBound(FileList) To UBound(FileList)
    ThisWorkbook.Sheets("Sheet1").Cells(i + 1, 1).value = FileList(i)
  Next i
End Sub

4/ Cách sử dụng hàm GetFileByExtension

Mã:
Sub Main_GetFileByExtension()
    Dim IP As String
    Dim Port As Integer
    Dim FolderPath As String
    Dim resultArray As Variant
    Dim i As Long
 
    IP = GetMyLocalIP()
    Port = 8080
    FolderPath = "C:\DataBase_Server"
   
    ' G?i hàm Delphi d? nh?n m?ng k?t qu?
    resultArray = GetFileByExtension(IP, Port, FolderPath, "*.xls*", False)
    Rem resultArray = GetFileByExtension(Ip, Port, FolderPath, "*.*", False)    ''ko duyet de quy Folder
    'resultArray = GetFileByExtension(Ip, Port, FolderPath, "*.*", True)        ''de quy Folder
   
    Debug.Print UBound(resultArray, 1)
   
    Cells.Clear
    ' Gán k?t qu? lên b?ng tính
    For i = LBound(resultArray) To UBound(resultArray)
        ' Gán giá tr? vào c?t A, t? dòng 1 tr? di
        Worksheets("Sheet1").Cells(i + 1, 1).value = resultArray(i)
    Next i
End Sub

Kế hoạch tiếp theo

1/ Thong thả tôi sẻ thêm hàm Downloads và Uploads từ máy khách lên máy chủ và tải file sau

2/ Thiết kế thêm nhiều hàm khác nữa và chạy đa luồng đa nhiệm trên Web Server
...

Đính kèm phía dưới là API và code mẫu ta có thể sử dụng Free không giới hạn ... viết Server và Client trên Excel hay bất cứ ngôn ngữ lập trình nào mà bạn có khả năng... sử dụng truy xuất dữ liệu và tìm kiếm file qua Internet

quá trình sử dụng có lỗi phát sinh ngoại lệ vui lòng mô tả chi tiết ... nếu phù hợp và khả năng có thể Tôi sẻ điều chỉnh lại
ai có mong muốn viết thêm gì cứ nêu nếu phù hợp và khả năng cho phép tôi sẻ viết

WebServer.dll này được trợ giúp By OpenAI - ChatGPT
dự án chuẩn chuyển lên kho lưu trữ trên github.com .. Ai quan tâm có thể xem và tải sử dụng Free không giới hạn

 
Lần chỉnh sửa cuối:
Lưu ý khi sử dụng

1/ WebServer cổng Port mặc định hổ trợ tốt nhất là 8080

2/ Khi máy chủ chưa lắng nghe mà mở máy khách lên truy xuất dữ liệu là lỗi thoát Excel

giải pháp khắc phục là mở Server lên trước hay Sử dụng hàm API hay cái gì đó Ping ( IP,Port) xem là mở chưa

3/ Sẻ lỗi khi dữ liệu trống

4/ Tính năng lấy dữ liệu mô phỏng theo ADODB phổ thông như ta sử dụng ADODB trên VBA

5/ tính năng lưu dữ liệu chưa hoàn chỉnh sẻ thong thả bổ sung sau
....

Tự xử lý các phát sinh đó trước khi tôi viết Hàm hổ trợ PingServer(IP,Port) và các hàm kiểm tra hổ trợ khác
 
Lần chỉnh sửa cuối:
Cách tốt nhất nên tách Server ra ngoài Excel vì nó sẻ chạy ở system tray mới là tốt nhất

Úp cách sử dụng trên VB6 cho ai có như cầu viết Server trên VB6 như sau

Mã:
Private Declare Sub StartServer Lib "WebServer32.dll" (ByRef IP As Variant, ByRef Port As Variant)
Private Declare Sub InitializeServer Lib "WebServer32.dll" _
          (ByRef IP As Variant, ByRef Port As Variant, ByRef FolderPath As Variant)
Private Declare Sub StopServer Lib "WebServer32.dll" ()
Rem =======================
Private Sub Form_Load()
    Dim IP As String, Port As Long
    Dim bIsInIDE As Boolean
    Debug.Assert MakeTrue(bIsInIDE)
    If bIsInIDE Then
        SetDllDirectoryW (StrPtr(App.Path))
    End If
    IP = GetMyLocalIP()
    Port = 8080
    Rem Call StartServer("127.0.0.1", 8080)
    Call InitializeServer(IP, Port, "C:\DataBase_Server")
    Form1.Caption = "Server Application is listening on: " & IP & ":" & Port
End Sub

Private Sub Form_Unload(Cancel As Integer)
    StopServer
End Sub

Mã nguồn code VB6 ... VB6 với VBA như nhau thôi ... nhưng VB6 tuyệt vời gấp nhiều nhiều lần VBA
 

File đính kèm

  • Server_VB6.rar
    2.6 MB · Đọc: 14
Cơ bản hình thành khung mô hình đa luồng đa nhiệm trên Web Server

Chạy đa luồng khi nhiều máy khách truy xuất trên Webserver
 
Hiện tại File bài số 1 hổ trợ tốt cho truy xuất dữ liệu Excel và Access ... sẻ thêm SQLite vào sau

Cách sử dụng ADODB rất phổ thông cho ai cần sử dụng nó như sau

Mã:
Public Sub Main_GetRs_Excel()
    Dim SQL As String, i As Long
    Dim FilePath As String
    SQL = "select * from [Data_Nhap$]" ''=> Luu y SQL cua Excel them dau [Data_Nhap$]
 
    IP = GetMyLocalIP() ''Luu Y thay doi IP nay cho may tinh khac can lay qua Internet
    FilePath = "C:\DataBase_Server\Data.xls"
 
    Set Rst = GetRs(IP, Port, FilePath, SQL) '' Su dung cho ham StartServer
 
    Rem Set Rst = GetRs(IP, Port, "Data.xls", SQL) '' Su dung cho ham InitializeServer 
  
    Cells.ClearContents
    For i = 0 To Rst.Fields.Count - 1
        Cells(1, 1 + i).value = Rst.Fields(i).name
    Next i
 
    Range("A2").CopyFromRecordset Rst
    Rst.Close: Set Rst = Nothing
End Sub

Hàm GetRs là hàm tạo kết nối tới CSDL trên Server trả về Rst As ADODB.Recordset

như trên VBA khi ta sử dụng CreateObject("ADODB.Connection") tạo kết nối xong sử dụng CreateObject("ADODB.Recordset")

FilePath = "C:\DataBase_Server\Data.xls"
FilePath là file Excel hay Access bất kỳ trên ổ cứng nào phía Server với yêu cầu chính xác nó hiện có theo đường dẫn trên máy chủ
 
Lần chỉnh sửa cuối:
Mượn 1 tấm hình trên Internet để mô tả cho chủ đề này có những cái gần như vậy ( mang tính tương đối )

Sử dụng Web Server làm máy chủ truy xuất dữ liệu từ xa qua Internet

1693451311274.png
 
ái chà chà ta đang viết phiên bản Pro tích hợp thêm chứng chỉ s và mà khoai thật

HTTP + s thêm có mỗi chữ s thôi mà hại não kinh thật :p
 
Web Server rất dễ chịu ta có thể sử dụng nó thao tác với File , Folder + ... và truy xuất dữ liệu từ xa như trên chính PC của Mình

Mất 5 ngày bà tám với Em ChatGPT Tôi định hình khung thành công .... Gợi ý chút hướng đi gửi theo gió cho ai đó có khả năng thì viết theo hướng Web

Server sẻ thành công và phù hợp với xu hướng phát triển của công nghệ ... thời đại AI con người làm việc, thao tác với dữ liệu, File ,Folder và hơn thế

nữa từ xa qua Internet ...
 
Thời gian tới nếu rảnh tôi sẻ Viết một dịch vụ (service) Service.Exe nó sẻ chạy liên tục khi Windows khởi động

PingServer 2 cổng là LAN và IP Public vậy là từ xa trên Internet ta có thể truy xuất và làm việc từ xa trở nên đơn giản và thân thiện hơn như trên chính PC

của mình
 
1693540953366.png

Rất đơn giản với trợ lý OpenAL - ChatGPT ... có ngay dịch vụ Services :p
 
Thời đại AI con người làm việc rất gần và rất xa . mọi cái sẻ tự động hóa hoàn toàn các cung đoạn

đầu này cho vào con heo ... đầu kia ra cục xúc xích ... còn ta thì cứ vậy ...:p

cho đi hay giúp ai đó 1 chút đừng bao giờ kể công hay luyến tiếc .... sẻ thấy tầm thường trong cái tầm thường mà thôi

Viết nhanh dịch vụ Servervices cho ai đó thích thì dùng

Cách sử dụng như sau:

1/ Tải File về Copy vào đâu đó tùy thích

2/ 2 File DLL và Exe sẻ luôn đi cùng nhau trong 1 thư mục

3/ chạy cmd với quyền Admin Run As

Copy mã sau vào xong Enter

Mã:
E:\ServerServices\ServerServices.exe /INSTALL

Lưu ý thay đổi lại Path Exe có thật trên máy của bạn

sau khi mục số 3 đăng ký thành công chạy tiếp cmd hay khởi động lại máy cũng được
Nêu chạy cmd copy mã sau
Mã:
net start WebService

3/ Tắt dịch vụ

net stop WebService

4/ xóa dịch vụ
sc delete WebService

Mặc định Server sẻ lắng nghe trên Toàn PC và chạy tự động khi Windows khởi động
đây là bản chỉ dùng cho các máy trong mạng LAN còn không sử dụng cho IP Public
Vì vậy ta sử dụng code phía Client có thể truy xuất dữ liệu bất kỳ file nào trên máy chủ khi truyền DBPath là đường dẫn tuyệt đối có thật trên máy chủ
 
Sẻ có 1 dịch vụ Web Server hoàn chỉnh mọi cái sẻ tự động hóa hoàn toàn từ cài đặt cho tới khi sử dụng thân thiện nhất cho người sử dụng nó

1/ bài số 11 vẫn để đó khi cách thực hiện cài đặt Services thủ công bằng cmd thì mới viết hàm thay thế nó chỉ cần mở file lên là tự động cài đặt dịch vụ Services

2/ sẻ có SQL TCP/IP truy xuất dữ liệu và file trên toàn bộ PC máy chủ làm việc như làm việc trên chính PC của mình

3/ ServerService.Exe sẻ chạy hoàn toàn tự động theo dịch vụ Services của Windows khi máy tính khởi động .

Vậy là từ xa mọi lúc mọi nơi ta có thể truy xuất dữ liệu, file và folder qua Internet trên máy chủ rất đơn giản

Hình nháp SQL TCP/IP

1693789747616.png

Từ cơ sở đó Ta ứng dụng viết phần mềm quản lý xxx từ xa qua Internet tạm ok rồi
 
Lần chỉnh sửa cuối:
Lâu nay bỏ bê chạy theo Em DataSnap đa tầng đa dịch vụ tạm ổn ... sẻ xuất bản sau

1/ Chủ đề thớt này xem xét lại sẻ xoá hết các file và thay vào đó là file mới bổ sung thêm hàm và tinh chỉnh tốt hơn

2/ Sẻ xuất bản Dịch vụ dữ liệu từ xa cho Downloads, Uploads, Tìm kiếm file - Folder và truy xuất dữ liệu từ xa qua Internet hoàn toàn tự động chạy theo Dịch vụ Services của Windows


Biến máy tính để bàn thành máy chủ chạy đa tầng, đa dịch vụ từ xa qua Internet
 
dự án code WebServer.dll đã viết các hàm cơ bản nhất hổ trợ truy xuất dữ liệu từ xa ...
đã xoá File bài số 1 và chuyển dự án code lên kho lưu trữ github.com

1/ Tinh chỉnh và xử lý các lỗi trước đó
2/ Bổ sung thêm các hàm hổ trợ khác
3/ đọc và ghi dữ liệu từ xa vào Data.accdb ( Bao gồm cả tạo TableName từ xa ...)
4/ truy xuất dữ liệu từ xa File Excel và Access Từ 2003 To 2021
5/ Downloads, Uploads qua lại máy chủ và máy khách ( xử lý tốt ngay cả khi file đang mở phía máy chủ hay máy khách )
6/ Tìm kiếm File và Folder trên máy chủ


7/ Mọi vấn đề phát sinh lỗi nếu có trong quá trình sử dụng thì cứ mô tả chi tiết tại chủ đề này ... Nếu được Tôi sẻ xem xét điều chỉnh và hổ trợ trong trường hợp cần thiết và phù hợp
 
Lần chỉnh sửa cuối:
Như mô tả bài số 13 ...

1702089168694.png

Ai quan tâm thì qua link sau ... Tôi tách ra 2 chuyên đề riêng biệt cho tiện quản lý và trả lời tránh nhầm lẫn hỏi chung chung sử dụng hàm API xong trả lời qua Services

 
Web KT
Back
Top Bottom