Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Ms Access VBA và Google drive, một vài ý tưởng trong chia sẻ và đồng bộ số liệu...
#11
(27-08-15, 01:43 PM)thucgia Đã viết: .....
Hình như giao diện đường link :

https://console.developers.google.com/project

bi giờ đã được thay đổi, nên mình không thể lấy được Client ID và Client secret như bạn hướng dẫn. Hay là Google thay đổi chính sách không?
1. Bạn cần login bằng tài khoản gmail của bạn trước đã
2. Sau khi login vào thì nhấn vào link
https://console.developers.google.com/project 

(tất nhiên bạn cần tạo ra project của mình trước đã nhé)

+ Sau khi nhấn vào dự án mà bạn đã tạo ở bước trước thì nhấn vào Apis & Auth. Cái này là mục lớn, nó sẽ hiện ra các mục con ở dưới nó.
+ Bấm vào API, tìm đến mục Drive API
+ Nhấn Enable API
+ Sau đó chọn OAuth 2.0 client IDs...
và thực hiện các bước tiếp theo
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , thucgia , Noname , Che_Guevara
#12
Cảm ơn anh Ngọc!

Em đang bận làm nhiều chuyên mục và vài tuần nửa thuyết trình 1 cái đề tài ứng dụng + công việc cơ quan, nên có lẽ sẽ ít được sôi nổi cùng anh trong chuyên mục này. Em đã đọc bài này và rất thích...để khi em hoàn thành công việc mình sẽ vào đây tung tăn với anh cho đã.

Hi. 015
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#13
(27-08-15, 02:05 PM)paulsteigel Đã viết:
(27-08-15, 09:05 AM)paulsteigel Đã viết:
(27-08-15, 08:53 AM)maidinhdan Đã viết: Sao không cọn Access viết vậy anh? thấy Excel là bắt đầu rầu  019

Vì tớ lười lười - thôi để đóng vào cái demo vậy...

Có bản demo cho access rồi nhé. Link ở bài đầu Dân ạ. Hoặc ở đây:
http://www.sfdp.net/thuthuataccess/demo/...ects=0&d=1
Đến tối mình sẽ trả lời bạn thugia. Giờ đang bận tí. Bạn thông cảm nhé.

hix, cám ơn. bạn có sure là chức năng này googledriver vẫn còn còn support không để mình search tiếp!!!
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#14
(25-08-15, 01:38 PM)paulsteigel Đã viết:
Googdrive...tiếp nào
Sau thời gian nghiên cứu và mày mò, có vẻ công cụ tải file, upload file lên googdrive bằng VBA là hoàn toàn khả thi.
Hôm nay tôi xin phép giới thiệu với các bạn phần đầu của nỗ lực này nhé.
Trước hết, để tiện lợi cho việc viết bài, tôi sẽ lấy một ứng dụng mở của tôi sử dụng làm thí nghiệm.

A. Để làm việc được với Googdrive từ VBA hoặc bất cứ ứng dụng nào không phải là giao diện Web, bạn cần thỏa mãn được mấy điều kiện sau:
+ Có một Ứng dụng được tạo ra để truy cập vào các dịch vụ của Google
+ Ứng dụng này được tạo ra với các thông số tối thiểu sau
* AppID (Mã ứng dụng). Trong ví dụ của tôi là [openstore-1034]
* ClientID (Mã ứng dụng khách). Trong ví dụ của tôi là ["759747656687-rjkm22bit7ob5tufc5sbgg1gsuj48fme.apps.googleusercontent.com"]
* ClientSecret (mã bí mật của ứng dụng khách). Trong ví dụ của tôi là ["Jf5DqXlZ2G3cOtUtHIraaxvQ"]
+ Khi ứng dụng này truy cập vào bất cứ dịch vụ nào, người dùng cần phải truy cập vào tài khoản gmail sau đó phải chấp thuận cho ứng dụng sử dụng.
...
==============================================================
Do bài viết của tôi không thể đăng được, các bạn có thể đọc ở tài liệu sau đây nhé
Bài đọc chi tiết
==============================================================

Liên kết tải file ví dụ ở đây
http://www.sfdp.net/thuthuataccess/demo/...ects=0&d=1
Chúng ta có thể thấy kết quả như trong sheet1 với việc dùng Json2table nhé.
Tiếp cận với tải file lên, tải xuống, xóa ... vv sẽ làm tương tự.

Đến đây xin tạm dừng bài viết đã nhé.
Chúc các bạn vui vẻ.

Có cái link này nữa chỉ rất kỹ, nhưng giao diện hôm nay của google code khác rùi
http://www.codingsection.com/getting-api...ation.html
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#15
(27-08-15, 02:05 PM)paulsteigel Đã viết:
(27-08-15, 09:05 AM)paulsteigel Đã viết:
(27-08-15, 08:53 AM)maidinhdan Đã viết: Sao không cọn Access viết vậy anh? thấy Excel là bắt đầu rầu  019

Vì tớ lười lười - thôi để đóng vào cái demo vậy...

Có bản demo cho access rồi nhé. Link ở bài đầu Dân ạ. Hoặc ở đây:
http://www.sfdp.net/thuthuataccess/demo/...ects=0&d=1
Đến tối mình sẽ trả lời bạn thugia. Giờ đang bận tí. Bạn thông cảm nhé.

hix mình tìm thấy các thông số ấy rồi, cám ơn.
Bạn có thể demo một ví dụ đơn giản như view tên các tập tin trong google drive vào trong một cái textbox(chẳng hạn) để anh em tham khảo được không, cái nén file này rắc rỗi quá. thank you for share
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , paulsteigel
#16
(27-08-15, 02:05 PM)paulsteigel Đã viết:
(27-08-15, 09:05 AM)paulsteigel Đã viết:
(27-08-15, 08:53 AM)maidinhdan Đã viết: Sao không cọn Access viết vậy anh? thấy Excel là bắt đầu rầu  019

Vì tớ lười lười - thôi để đóng vào cái demo vậy...

Có bản demo cho access rồi nhé. Link ở bài đầu Dân ạ. Hoặc ở đây:
http://www.sfdp.net/thuthuataccess/demo/...ects=0&d=1
Đến tối mình sẽ trả lời bạn thugia. Giờ đang bận tí. Bạn thông cảm nhé.

Bạn có nghiên cứu upload lên google site chưa? nếu up được thì tiện dụng hơn.
Chữ ký của thucgia Hix, Access quả nhiên lợi hại !!!! http://vibigaba.esy.es/
ღღღღღTài sản của thucgia (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#17
(27-08-15, 08:18 PM)thucgia Đã viết: ...
hix mình tìm thấy các thông số ấy rồi, cám ơn.
Bạn có thể demo một ví dụ đơn giản như view tên các tập tin trong google drive vào trong một cái textbox(chẳng hạn) để anh em tham khảo được không, cái nén file này rắc rỗi quá. thank you for share

Bản mới tải lên đã có sửa đổi theo yêu cầu của bạn, đơn giản là hiển thị danh sách file và chức năng tải file lên. Các chức năng khác như tải xuống, xóa file tôi không làm. Nếu các bạn muốn tôi sẽ lại viết hướng dẫn về việc này tiếp.
Bản DEMO
Hiện tại tôi chỉ làm demo nên đang hiển thị lẫn lộn cả file và thư mục và hiện tất tần tật kể cả các thư mục con, các file đã bị xóa.
Trong thời gian tới, nếu có thời gian, tôi sẽ viết hẳn một bản hoàn thiện quản lý file trên google Drive như dạng Explorer.
Trong vài ngày tới, tôi sẽ nghiên cứu sâu vụ tải file resumable. Hiện giờ vẫn đang dùng chế độ tải đơn giản - không tốt với các đường truyền kém.
Vì cái này nó liên quan nhiều kỹ thuật nên nếu có ai quan tâm thì đặt câu hỏi cụ thể từng chỗ, tôi sẽ giải thích.

Tôi cũng đã bỏ hẳn rclone ra khỏi ứng dụng mẫu- nếu các bạn quan tâm thì có thể xem trên bản backup tại đường link này
http://www.sfdp.net/thuthuataccess/demo/...ects=0&d=1
(với tiếp cận rClone thì cũng có nhiều cái hay:
+ Mở một phiên làm việc Dos/Shell;
+ Thực thi lệnh và chờ ...
Lấy số liệu từ Dos/Shell đưa vào ứng dụng.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn thucgia , Minh Tiên , Che_Guevara
#18
(27-08-15, 11:13 PM)thucgia Đã viết:
(27-08-15, 02:05 PM)paulsteigel Đã viết: ...
Vì tớ lười lười - thôi để đóng vào cái demo vậy...
....
Bạn có nghiên cứu upload lên google site chưa? nếu up được thì tiện dụng hơn.
Quản lý với Google Site là một vấn đề hoàn toàn khác và nó có thể coi là vượt quá năng lực và nguồn lực hiện tại của mình.
Chủ đề với Google Drive chẳng qua là mình muốn chia sẻ một công cụ cho phép đồng bộ file từ xa một cách tự động cho những người sử dụng không có khả năng tương tác với GoogleDrive (tại sao lại là GoogleDrive đơn giản vì nó miễn phí, ổn định).
Người dùng của mình toàn là các bạn ở xã vùng núi xa xôi. Họ chỉ biết mở ứng dụng, nhập số liệu rồi đóng.
Do có sự khó khăn quá lớn về việc gửi nhận số liệu nên mình sử dụng GoogleDrive như một trạm bưu điện để đồng bộ thông tin giữa các máy theo phương thức:
[Có số liệu mới>>Thông báo>>Xếp hàng>>Tải xuống>>Đồng bộ>> xóa...]
Thao tác với GoogleDrive trên các ứng dụng khác C++/Java ...vv thì có sẵn các thư viện nhưng với VB/VBA cổ điển thì chưa có một nỗ lực nào đáng kể nên tôi đành mày mò xem sao.
Riêng với GoogleSite thì tôi thấy dùng công cụ của Google đã là quá đủ. Tất nhiên với thông tin có tại
https://developers.google.com/google-app...adingFiles
thì ta cũng có thể làm được một ứng dụng tạo được và sửa thông tin bằng VBA nhưng có nhất thiết phải làm thế không?

Xin cảm ơn bạn đã quan tâm. nếu bạn có câu hỏi gì, xin chia sẻ cùng nhé.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn Noname , Minh Tiên , thucgia , Che_Guevara
#19
Mục upload đã tiến thêm được bước nữa với công cụ Resumable Upload.
Mặc dù tôi chưa đưa vào các thủ tục kiểm tra việc đẩy file lên có thành công hay không, bẻ file thành các đoạn để đẩy lên nhưng việc thực thi tải file lên với GoogleDrive đã cơ bản đạt được yêu cầu công việc của tôi.
Tải được các file vừa vừa (4MB trở xuống), không cần phải dùng tải phân đoạn.
Và cơ bản thì việc ứng dụng VBA để thao tác trực tiếp với GoogleDrive là hứa hẹn và đáp ứng được yêu cầu của tôi. Loạt bài này tôi xin phép tạm dừng và sẽ tiếp tục nếu có bạn nào quan tâm và hỏi.

Chúc các bạn thành công.

Tải ứng dụng demo ở đây::
http://www.sfdp.net/thuthuataccess/demo/...ects=0&d=1

Trong ứng dụng demo tôi đã viết thêm thủ tục UploadResumable và hoàn thiện "tương đối" với đoạn code chính như sau
Mã:
Function UploadResumable(filename As String, Token As String, Optional FileID As String = "") As Boolean
    '============================
    'Tham số chính 
    'FileName : Tên file cần tải lên
    'Token : Mã xác thực
    'FileID : Chưa cần dùng (đây là mã file cần update)
    'Nếu tải lên thành công, hàm sẽ trả về giá trị true
    '============================
    Dim params As String, xhr As Object, res As String, urls As String, method As String, mimeType As String
    ' thiết lập các tham số tải lên
    'params = "alt=json"
    params = params + "&uploadType=resumable"
    ' Đường dẫn để tải
    urls = "https://www.googleapis.com/upload/drive/v2/files"
    
    ' Kiểm tra nếu có mã file thì thay phương thức
    If FileID <> "" Then
        params = params + "&setModifiedDate=true"
        urls = urls + FileID
        method = "P+U+T"
    Else
        method = "P+O+S+T"
    End If
    
    'Bước 1: Tải thẻ file để đăng ký khu vực lưu trữ trên GoogleDrive
    urls = urls + "?" + params
    
    ' lấy kiểu nội dung ứng dụng ví dụ application/ms word ....
    mimeType = GetMimeType(filename)
    ' tạo đối tượng kết nối với Internet, sử dụng phương thức Latebound, không cần tham chiếu thư viện
    Set xhr = CreateObject("MSXML2.XMLHTTP")
    ' Thiết lập thông điệp tải lên
    With xhr
        ' Tôi phải dùng hàm replace để giúp đăng được bài lên diễn đàn vì có lẽ họ cấm không cho đăng tải các nội dung có chữ GET...
        .Open Replace(method,"+",""), urls, False
        .Setrequestheader "Content-Type", "application/json; charset=UTF-8"
        .Setrequestheader "Authorization:", Token
        .Setrequestheader "X-Upload-Content-Type", mimeType        
        .Setrequestheader "User-Agent", Application.name

        ' lưu ý thông tin gửi lên phải ở dạng mảng byte
        .send (Utf8BytesFromString("{'title': '" + GetFileName(filename) + "'}"))

        ' Kiểm tra lỗi
        If .Status <> 200 Then
            ' check for error type and response to user
            GoTo ExitFunction
        End If
        ' lấy về vị trí file đã được Google thiết lập
        urls = xhr.getResponseHeader("Location")
    End With

    ' Thực hiện xong bước 1, giờ tải tiếp nội dung
    'Bước 2: Tải nội dung

    ' Giờ đã có khu vực lưu trữ, dùng phương thức PUT
    method = "+P+U+T+"
    
    With xhr
        .Open Replace(method,"+",""), urls, False
        
        ' Tiếp tục các khai báo thông thường
        .Setrequestheader "Authorization:", Token
        .Setrequestheader "Content-Type", mimeType
        .Setrequestheader "Content-Length", GetFileSize(filename)
        .Setrequestheader "User-Agent", Application.name
        
        ' Gửi dữ liệu của file dưới dạng mảng nhị phân
        .send (pvToByteArray(GetFileBinary(filename)))

        If .Status <> 200 Then
            ' check for error type and response to user
            GoTo ExitFunction
        End If
    End With
    ' Tải thành công
    UploadResumable = True
ExitFunction:
End Function
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , Minh Tiên
#20
Thế là cuối cùng tôi đã có thể thực hiện được việc truy cập vào Google mà không cần phải dùng đến Internet Explorer nữa. Quả thật với dân lập trình thì việc vào được google mà không có trình duyệt là cả một vấn đề hóc búa vì có biết bao thứ phải nghiên cứu. Với InternetExplorer chỉ cần nhập vào, rồi nhấn nút, nhưng với đối tượng như XMLHTTP, WinHTTP thì đó là một bài toán khó.
Nhưng tại sao chúng ta phải làm điều này?
1. Có nhiều máy tính không dùng Internet Explorer (IE) - thế là chương trình thất bại.
2. Tải Ie sẽ tốn nhiều bộ nhớ và có nhiều nguy cơ tiềm ẩn
....

Nói khác hơn, dùng IE vào ứng dụng thường không phải là điều mà lập trình viên thích thú lắm.
Sau gần 2 tháng cày cuốc nghiên cứu, thử nghiệm và với 2 ngày làm việc gần đây phải sử dụng đến công cụ theo dõi thông tin vào ra của trình duyệt, tôi đã có thể làm được việc truy cập vào dịch vụ Google với tài khoản, mật khẩu và chắc chắn là không cần dùng đến IE.

Mục tiêu để làm gì thì dần dần tôi sẽ nói tiếp - nó liên quan trực tiếp đến lĩnh vực GoogleDrive đấy các bạn ạ

Để làm việc này, chúng ta cần có bộ thư viện XMLHTTPREquest hoặc WinHttpRequest hoặc Wininet.dll. Chỉ thế thôi.
Cách làm như sau:
Bước 1. Truy cập vào trang Web "http://accounts.google.com"
Lấy các thông số mà trang web cung cấp đến cho phiên làm việc như Cookie, thông tin tham chiếu ...vv
Bước 2: Thiết lập thủ tục kết nối và gửi thông tin đăng nhập và xong

Các bạn có thể sử dụng đoạn mã sau đây
Mã:
Option Explicit
''' WinApi function that maps a UTF-16 (wide character) string to a new character string
Private Declare Function WideCharToMultiByte Lib "kernel32" ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As Long, _
    ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As Long, _
    ByVal cbMultiByte As Long, _
    ByVal lpDefaultChar As Long, _
    ByVal lpUsedDefaultChar As Long) As Long
    
' CodePage constant for UTF-8
Private Const CP_UTF8 = 65001

''' Return byte array with VBA "Unicode" string encoded in UTF-8
Public Function Utf8BytesFromString(strInput As String) As Byte()
    Dim nBytes As Long
    Dim abBuffer() As Byte
    ' Get length in bytes *including* terminating null
    nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(strInput), -1, vbNull, 0&, 0&, 0&)
    ' We don't want the terminating null in our byte array, so ask for `nBytes-1` bytes
    ReDim abBuffer(nBytes - 2)  ' NB ReDim with one less byte than you need
    nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(strInput), -1, ByVal VarPtr(abBuffer(0)), nBytes - 1, 0&, 0&)
    Utf8BytesFromString = abBuffer
End Function

Function LoginGoogle(gAccountName As String, gPassword As String) As Boolean
    Dim oHttp As Object, sHTML As String
    Dim google_accounts_url As String, authentication_url As String, gmailUrl As String, i As Long
    Dim d As String
    google_accounts_url = "http://accounts.google.com"
    authentication_url = "https://accounts.google.com/ServiceLoginAuth"
        
    Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
    Dim htmlDoc As Object, Galx As Object
    Set htmlDoc = CreateObject("HtmlFile")
    Dim Cookie As Variant, UserDetails As String
    
    With oHttp
        ' First release a get request
        .Open replace("G+E+T","+",""), google_accounts_url, False
        .Send
        
        While .readyState <> 4
            DoEvents
        Wend
        
        Cookie = Split(.getResponseHeader("Set-Cookie"), ";")
        htmlDoc.body.innerHTML = .ResponseText
        Set Galx = htmlDoc.getElementsByName("GALX")
        
        d = "&GALX=" + Galx(0).Value
        d = d + "&continue=https://www.google.com/?gws_rd=ssl&hl=en&_utf8=?"
        d = d + "&bgresponse=js_disabled&pstMsg=1&dnConn=&checkConnection=youtube:206:1"
        d = d + "&checkedDomains=youtube"
        d = d + "&Email=" + gAccountName + "&Passwd=" + gPassword
        d = d + "&PersistentCookie=yes&signIn=Sign in"
                
        .Open replace("P+O+S+T","+",""), authentication_url, False
        .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
        .setRequestHeader "User-Agent", Application.name
        .setRequestHeader "Host", "accounts.google.com"
        .setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        .setRequestHeader "Accept-Language", "en-US,en;q=0.5"
        For i = 0 To UBound(Cookie)
            .setRequestHeader "Cookie", Cookie(i)
        Next
        .setRequestHeader "Connection", "keep-alive"
        .setRequestHeader "Referer", "https://accounts.google.com/ServiceLoginAuth"
        .setRequestHeader "Content-Length", Len(d)
                
        .Send (Utf8BytesFromString(d))
        
        While .readyState <> 4
            DoEvents
        Wend
                
        If InStr(.ResponseText, "Google Accounts") <> 0 Then LoginGoogle = True
    End With
Exit_Sub:
    Set htmlDoc = Nothing
    Set oHttp = Nothing
End Function
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , thucgia , Che_Guevara


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Cài đặt ODBC -nền tảng kết nối Access và nguồn dữ liệu khác Noname 33 19,294 01-12-16, 06:49 PM
Bài mới nhất: atula77
  Xây dựng Class Modules trong Access ( Cơ bản đến Nâng cao) maidinhdan 2 181 13-11-16, 05:32 PM
Bài mới nhất: cpucloi
  [Help] SQL lỗi khi tham chiếu trường trong Forms Phung Duc 1 71 02-11-16, 03:17 PM
Bài mới nhất: Minh Tiên
  tương tác chương trình ngoài lamvanphung 4 412 30-09-16, 02:47 AM
Bài mới nhất: maidinhdan
  Ứng dụng đổi tên file trong windows hàng loạt tranthanhan1962 7 1,211 19-09-16, 04:16 PM
Bài mới nhất: maidinhdan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ