Lập trình và truy vấn dữ liệu Qua Internet cùng với ExcelTools Network TCPIP

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,541
Được thích
4,125
Giới tính
Nam
Sau gần 2 năm mò code nghiên cứu cuối cùng Mạnh cũng đã thực hiện thành công Lấy dữ liệu qua Internet theo Phương Thức TCPIP
Mọi sự bắt đầu từ thớt sau


1/ Code hiện tại đang viết mọi cái trên VB6 để làm quen cách thức hoạt động của nó Khi nào mạnh chuyển Qua Delphi thành công sẻ úp tặng cho ai đó cần mà sử dụng không giới hạn

2/ Xem qua Video Demo


3/ Code mở kết nối ADODB Từ Client tới Server rất gần gủi Y trang trên VBA ... ta chỉ cần khai báo kết nối tới Server là xong

Cách 1
Mã:
Public Sub GetDatabase_VB6()
    Dim Rst As ADODB.Recordset
    Dim Xnet As New Network
    Dim SQL As String
    Rem SQL = "select * from NhapXuatTon"
    SQL = "select * from DataBaseNhap"
    Rem SQL = Range("A8").Value
    Set Rst = Xnet.connect("192.168.1.9", 8181, SQL)
    Cells.ClearContents
    Range("A1").CopyFromRecordset Rst
    Rst.Close: Set Rst = Nothing
End Sub

Cách 2
Mã:
Public Sub GetDatabase2_VB6()
    Dim Rst As ADODB.Recordset
    Dim Xnet As New Network
    Dim SQL As String, i As Long
    SQL = "select * from DataBaseNhap"
    Rem SQL = Range("A8").Value
    Set Rst = Xnet.connect("192.168.1.9", 8181, SQL)
    
    For i = 0 To Rst.Fields.Count - 1
        Cells(1, 1 + i).Value = Rst.Fields(i).Name
    Next i

    Cells.ClearContents
    Range("A2").CopyFromRecordset Rst
    Rst.Close: Set Rst = Nothing
End Sub

Cách 3

Mã:
Private Sub GetDatabase3_VB6()
    Dim Rst As ADODB.Recordset
    Dim Xnet As New Network
    Dim SQL As String
    Dim dArr() As Variant
    Dim Arr() As Variant
    Dim i As Long, j As Long, k As Long
    SQL = "select * from DataBaseNhap"

    Set Rst = Xnet.connect("192.168.1.9", 8181, SQL)
    Arr = Rst.GetRows()

    ReDim dArr(1 To UBound(Arr, 2) + 1, 1 To UBound(Arr, 1) + 1)
    For i = 0 To UBound(Arr, 2)
        k = k + 1
        For j = 0 To UBound(Arr, 1)
            dArr(k, j + 1) = Arr(j, i)
        Next j
    Next i

    Cells.ClearContents
    Range("A1").Resize(UBound(dArr, 1), UBound(dArr, 2)) = dArr
    Rst.Close
    Set Rst = Nothing
End Sub

Cách 4
ta có thể viết Hàm mảng trên Cells hay gì đó tùy thích cũng được như mô tả trên Link sau qua Thớt đó sẻ hiểu thêm
Bài số #39
 
Lần chỉnh sửa cuối:
Giỏi cứ vậy mà phát huy he, từ từ rồi cũng vượt qua kíp nạn thành chánh quả :clap:
 
Upvote 0
Nhớ 20 Năm trước Mạnh đi dự cái hội nghị ở 90 Nguyễn Du - Hà Nội ( Góc ngã 3 trước Hồ Thiền Quang )

Ông giáo sư già bên ban tuyên giáo trung ương có nói 1 câu

Chân lý chỉ có 1 .... đường tới chân lý có muôn nẻo đường .... ai đến trước thì người đó là kẻ chiến thắng ???!!!

Ngẫn ra thấy

A nói tao đi máy bay
B nói tao đi tàu hỏa
c keo tao chạy 1 cái tới ngay
....
Mọi vấn đề ko quan trọng ai làm gì nói gì .... quan trọng là Mạnh đã ghi Danh trên GPE này ... Sau Atools của @Nguyễn Duy Tuân .... chỉ thế thôi -0-0-0-

Tiếp lửa đam mê rễ không trừng 10 năm sau sẻ có người tiếp Lửa
 
Upvote 0
Mình ghi nhận bạn KieuManh và Thuyyeu99 có những đam mê và quyết tâm trong lập trình với Excel. Đặc biệt cùng khá nghiền từ VB6 sang Delphi. Chỉ cần các bạn demo kết quả làm được cũng là tốt rồi, không cần share mã nguồn. Tấc nhiên sẽ cần nhiều thời gian nữa để từ bản demo đến phổ cập đại trà.
 
Upvote 0
Mình ghi nhận bạn KieuManh và Thuyyeu99 có những đam mê và quyết tâm trong lập trình với Excel. Đặc biệt cùng khá nghiền từ VB6 sang Delphi. Chỉ cần các bạn demo kết quả làm được cũng là tốt rồi, không cần share mã nguồn. Tấc nhiên sẽ cần nhiều thời gian nữa để từ bản demo đến phổ cập đại trà.
Thật ra Mạnh đã viết được từ lâu rồi
1/ bằng cách Server gửi từng dòng 1 qua Client cho tới khi hết ... kẹt là nó rất châm + nhiều vấn đề khác
2/ Gửi xml qua
3/ Gửi 1 Array qua Client mới biết cách đây mấy ngày
4/ Mạnh đã cài Atools ... mở file Excel lên xem cách kết nối của Atools hoài và suy nghĩ ... có lẻ đó là cách hay nhất tới thời điểm hiện tại
nó rất thân thiện với VBA ... 1 người có chút kiến thức ADO là có thể ứng dụng nó rất tốt

.....
....
vậy là ngày hôm kia tốt Ngày + rất đẹp Mạnh đã mò ra phương thức kiểu giống Atools
-0-0-0- -0-0-0- -0-0-0- -0-0-0- ........... rất đơn giản chỉ có thế
 
Upvote 0
Thật ra Mạnh đã viết được từ lâu rồi
1/ bằng cách Server gửi từng dòng 1 qua Client cho tới khi hết ... kẹt là nó rất châm + nhiều vấn đề khác
2/ Gửi xml qua
3/ Gửi 1 Array qua Client mới biết cách đây mấy ngày
4/ Mạnh đã cài Atools ... mở file Excel lên xem cách kết nối của Atools hoài và suy nghĩ ... có lẻ đó là cách hay nhất tới thời điểm hiện tại
nó rất thân thiện với VBA ... 1 người có chút kiến thức ADO là có thể ứng dụng nó rất tốt

.....
....
vậy là ngày hôm kia tốt Ngày + rất đẹp Mạnh đã mò ra phương thức kiểu giống Atools
-0-0-0- -0-0-0- -0-0-0- -0-0-0- ........... rất đơn giản chỉ có thế
Nói thật và góp ý bạn nhé, nhìn code và đọc cái comment tôi thấy 2 cái nói sai sai sao sao ý
 
Upvote 0
đó là cách gửi từng dòng 1 Từ Server qua Client ... xong nhận và xử lý nó

1603279908136.png
 
Upvote 0
Ah thì ra là vậy đó hả, chắc mình nhìn không kỹ.
Sory.
 
Upvote 0
Nhìn qua code minh họa, tôi có vài thắc mắc:
  1. Sau khi lấy dữ liệu xong từ thủ tục "Xnet.connect("192.168.1.9", 8181, SQL)" thì mọi thay đổi dữ liệu phía server cũng không được cập nhật vào recordset trên client? Chẳng hạn Anh A sinh năm 2000 lúc khi mới truy vấn từ client. Ngay sau đó trên server người ta cập nhật A sinh năm 1990, nhưng lúc này trên client, A vẫn sinh năm 2000 phải không?
  2. Các thủ tục hữu ích hay dùng như AddNew, Update, Refresh... của Recordset trên client dù có thực hiện được nhưng không có tác dụng lên dữ liệu phía server?
Liệu mấy thắc mắc của tôi có sai không nhỉ? Nếu thấy câu hỏi này ngu quá thì cũng đừng cười nhé :pray:
 
Upvote 0
Nhìn qua code minh họa, tôi có vài thắc mắc:
  1. Sau khi lấy dữ liệu xong từ thủ tục "Xnet.connect("192.168.1.9", 8181, SQL)" thì mọi thay đổi dữ liệu phía server cũng không được cập nhật vào recordset trên client? Chẳng hạn Anh A sinh năm 2000 lúc khi mới truy vấn từ client. Ngay sau đó trên server người ta cập nhật A sinh năm 1990, nhưng lúc này trên client, A vẫn sinh năm 2000 phải không?
  2. Các thủ tục hữu ích hay dùng như AddNew, Update, Refresh... của Recordset trên client dù có thực hiện được nhưng không có tác dụng lên dữ liệu phía server?
Liệu mấy thắc mắc của tôi có sai không nhỉ? Nếu thấy câu hỏi này ngu quá thì cũng đừng cười nhé :pray:
chính xác đó ... ko sai tí nào ... Bài 41 link sau là câu trả lời cho bạn :p

1603283006553.png
 
Upvote 0
chính xác đó ... ko sai tí nào ... Bài 41 link sau là câu trả lời cho bạn :p
Vấn đề này tôi đã dự đoán từ hồi chị Thủy giới thiệu Chương trình chia sẻ CSDL qua Internet rồi. Ngay trang 3 phần #45 tôi đã có đưa ra những băn khoăn vì cảm giác là cái sản phẩm này chưa đáp ứng được những yêu cầu kỹ thuật như cái tên gọi dành cho nó. Thực sự là tôi ngại hỏi thẳng chị Thủy vì ngại mang tiếng làm khó phụ nữ. Nay có anh Mạnh cũng là nam giới với nhau nên hỏi thiệt ai dè đúng như dự đoán trong đầu. Nhân tiện đây tôi mạnh dạn khẳng định luôn là vấn đề anh Mạnh gặp phải (tương ứng 2 cái thắc mắc của tôi ở trên) là không thể giải quyết. Nó không chỉ liên quan đến vấn đề kỹ thuật thuần túy mà còn liên quan nhiều vấn đề ngoài kỹ thuật khác. Chắc nhiều anh bác uyên thâm ở đây nắm rõ những khúc mắc nầy để giải thích với anh Mạnh chứ trình độ như tôi là không dám nói ra. Tôi nói lung tung ra thì cũng chỉ làm trò cười cho các bác có trình độ vạch chữ nghĩa bêu cái ngu mà thôi --=0
 
Lần chỉnh sửa cuối:
Upvote 0
Vấn đề này tôi đã dự đoán từ hồi chị Thủy giới thiệu Chương trình chia sẻ CSDL qua Internet rồi. Ngay trang 3 phần #45 tôi đã có đưa ra những băn khoăn vì cảm giác là cái sản phẩm này chưa đáp ứng được những yêu cầu kỹ thuật như cái tên gọi dành cho nó. Thực sự là tôi ngại hỏi thẳng chị Thủy vì ngại mang tiếng làm khó phụ nữ. Nay có anh Mạnh cũng là nam giới với nhau nên hỏi thiệt ai dè đúng như dự đoán trong đầu. Nhân tiện đây tôi mạnh dạn khẳng định luôn là vấn đề anh Mạnh gặp phải (tương ứng 2 cái thắc mắc của tôi ở trên) là không thể giải quyết. Nó không chỉ liên quan đến vấn đề kỹ thuật mà còn liên quan đến vấn đề kinh doanh. Chắc nhiều anh bác uyên thâm ở đây nắm rõ những khúc mắc nầy để giải thích với anh Mạnh chứ trình độ như tôi là không dám nói ra, có nói kiểu gì thì cũng làm trò cười mà thôi --=0
Mạnh hiểu mà ... có gì cứ nói ta là đàn Ông cả mà rất dễ thôi

để lưu dữ liệu từ Client To Server đơn giản thì làm ok đó ... còn phức tạp mà bao quát nhất cho nhiều vấn đề thì = Tịt toàn tâp
Ngay cả File còn trên máy mà Mạnh làm phức tạp nên còn ko có hiểu luôn chứ nói chi qua In tét nét

VD: Mạnh Share Full Foder file trong LAN 2 máy kết nối thử Mạnh 2 tay nháy chuột liên tục luôn xem sao .... thì cái cứ nghỉ ngon lắm mấy năm nay xài nó mới lòi ra như mô tả Link sau bài số 10


1603286876120.png
 
Upvote 0
cái Xnet.connect

xài trên cái gì cũng thế Access, Word vv... miễn cái nào cho xài ADO là Ok hết ... rất đơn giản cũng chỉ có thế
Còn người dùng muốn làm gì tùy thích ... chỉ với 1 dòng code duy nhất cho Em nó

1603325891597.png
 
Upvote 0
Mạnh mới thử lấy dữ liệu trên 2 máy khác nhau ... 2 tay nháy 2 chuột liên tục chạy quá ok không ảnh hường tới hòa bình của thế giới

Như vậy 10 máy hay 100 máy + n trên thế giới có thể lấy dữ liệu qua IP của máy Mạnh OK hết ... nhanh hay chậm thì chỉ có phụ thuộc vào In tét nét mà thôi

Vì trên máy nào
Set Rst = Xnet.connect("192.168.1.9", 8181, SQL)
...
code xử lý abcdxyz ..... xong
...
Thì :
Rst.Close : Set Rst = Nothing

như mô tả trên thì cái việc đóng mở liên tục trở nên vô nghĩa với Xnet.connect

đơn giản cũng chỉ có thế .... cho dù ai nói ngang dọc thì đó là sự thật mặc định rùi he -0-0-0- -0-0-0- -0-0-0- -0-0-0- -0-0-0- -0-0-0-
 
Upvote 0
Mới thử vầy nó cũng Ok hết nè ... vậy là Ứng dụng nó quá tốt luôn

1/ Trên máy Server tại C:\Kieumanh\ ........... trong Foler KieuManh có 10 File khác nhau
2/ Từ máy Khách 1 chỉ cần khai báo C:\Kieumanh\Data1.accdb là lấy dữ liệu File đó
3/ Từ máy Khách 2 chỉ cần khai báo C:\Kieumanh\Data2.accdb là lấy dữ liệu File đó
.....
Như vậy Có 100 máy khách kết nối Cùng 1 lúc tới 100 file khác nhau luôn và chỉ chạy chung 1 Server duy nhất
-0-0-0- -0-0-0- -0-0-0-

Như vậy viết lại hàm như sau nó sẻ rất tuyệt vời
Mã:
Public Sub GetDatabase_VB6()
    Dim Rst As ADODB.Recordset
    Dim Xnet As New Network
    Dim SQL As String
    Dim FileName As String
    FileName = "Demo - Copy.mdb"
    Rem SQL = "select * from NhapXuatTon"
    SQL = "select * from DataBaseNhap"
    
    Set Rst = Xnet.ConnectDataName("192.168.1.9", 8181, FileName, SQL)
    Cells.ClearContents
    Range("A1").CopyFromRecordset Rst
    Rst.Close: Set Rst = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Rất đơn giản cũng chỉ có thế ... muốn lấy bao nhiêu file trên cùng 1 Server cũng ok hết ... viết thêm cái Hàm phụ ngoài là xong .... rất dễ chịu
Tùy biến code các kiểu theo người dùng khi mở kết nối tới Server
Mã:
Dim Rst As ADODB.Recordset
Dim Xnet As New Network
Dim Sql As String
Dim FileName As String
Rem ==========
Private Sub GetListDataNameServer(ListFiles(), ByVal Sql As String, ByVal Target As Range)
    Dim x As Long, FileName As String
    For x = 1 To UBound(ListFiles)
        FileName = ListFiles(x)
        Set Rst = Xnet.ConnectDataName("192.168.1.9", 8181, FileName, Sql)
        Target.End(3)(2).CopyFromRecordset Rst       
    Next
   Rst.Close: Set Rst = Nothing
End Sub
Rem ==========
Public Sub Main_GetConnection()
        Dim MyFile(1 To 5) As Variant
     
        MyFile(1) = "Database_1.mdb"
        MyFile(2) = "Database_2.mdb"
        MyFile(3) = "Database_3.mdb"
        MyFile(4) = "Database_4.mdb"
        MyFile(5) = "Database_5.mdb"
     
        Sql = "select top 10 * from DataBaseNhap"
     
        Cells.ClearContents
     
        Call GetListDataNameServer(MyFile(), Sql, [A65536])    
End Sub

Xin mời Xem Phim Demo

 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom