Trying out your new scriptDB environment

If you've followed Creating your own scriptDB environment we are ready to start accessing it from VBA.  

Registering authentication

There are 2 things you need to do, both of which are one off things. You may have done this in the previous section
  • Register this PC for oAuth2. If you have already done this to "drive" scope with some other things on this site, as described in Google Oauth2 VBA authentication you wont need to bother doing that again.
  • Register this PC for your scriptDB environment.
Substitute your your google credentials, lets do everything at once, authorizing google, full access to the dbTest enviroment and dbProduction environment.


Private Sub firstTimescriptdbComdbTest()
    Dim scriptdbCom As cScriptDbCom, url As String
    Set scriptdbCom = New cScriptDbCom
    
    ' you only need to run this once per PC. Once you've done it, delete it from here and keep a safe private copy  somewhere
    
    ' this url is for the dbHandler google apps script webapp
    url = "https://script.google.com/a/macros/mcpher.com/s/AKfycbyro1-9LNOnaykvBJ4_6pRZJwNkgf-VFpeQ8drJBqzOK3QZIhU/exec"
    
    'substitute in your google oauth2 credentials (clientid/secret) from the google cloud console
    getGoogled("drive", , "xxxx.apps.googleusercontent.com", "xxx").tearDown
    
    ' get full access to the test environment
    With scriptdbCom.init(, "dbTest", , _
                "yourApp", _
                "yourKey", , , True, _
                "https://script.google.com/a/macros/mcpher.com/s/AKfycbyro1-9LNOnaykvBJ4_6pRZJwNkgf-VFpeQ8drJBqzOK3QZIhU/exec")
        .tearDown
    End With
    
    ' and full access to the production environment
    With scriptdbCom.init(, "dbProduction", , _
                "yourApp", _
                "yourKey", , "dbProduction", True, _
                "https://script.google.com/a/macros/mcpher.com/s/AKfycbyro1-9LNOnaykvBJ4_6pRZJwNkgf-VFpeQ8drJBqzOK3QZIhU/exec")
        .tearDown
    End With
End Sub

You'll get something like this pop up - this will allow this PC to access your dbHandler webApp

You can now delete this function (or keep a copy in another workbook), since you wont need it again unless you change PC.

Adding some data to your test environment

Before that, first let's check we have a connection, and that you have no data in either of your scriptDB. 
Private Sub testdbCount()
    Debug.Print getScriptDb("VBAParseCustomers", "dbProduction").count(); " objects  in customers class: production DB"
    Debug.Print getScriptDb("VBAParseData", "dbProduction").count(); " objects  in data class: production DB"
    
    Debug.Print getScriptDb("VBAParseCustomers", "dbTest").count(); " objects  in customers class: test DB"
    Debug.Print getScriptDb("VBAParseData", "dbTest").count(); " objects  in data class: test DB"
    
End Sub

 result
 0  objects  in customers class: production DB
 0  objects  in data class: production DB
 0  objects  in customers class: test DB
 0  objects  in data class: test DB

Now we can add data from the 2 test data sheets in cDataSet.xlsm
Private Sub dbTestPopulates()
    ' copy two sheets to scriptdb.com
    populateFromSheet "VBAParseData", "dbTest"
    populateFromSheet "VBAParseCustomers", "dbTest"
End Sub

result
308 in classVBAParseData
100 in classVBAParseCustomers

More Tests

Why not go back to Getting started with cScriptDbCom and run the query tests, this time using dbTest as your authentication entry. You should get the same results as you did with my primer database.

Populating dbProduction.

We could simply repeat by populating dbProduction from the sheets as we did with dbTest. However, in real life, there might not be any sheets involved. Here's how to copy a class from one database to another.

Private Sub dbTestCopy()
    dbCopy "dbTest", "dbProduction", "VBAParseData"
    dbCopy "dbTest", "dbProduction", "VBAParseCustomers"
End Sub

Private Sub dbCopy(source As String, target As String, Class As String)
    Dim dbSource As cScriptDbCom, dbTarget As cScriptDbCom, _
        jobSkip As cJobject, job As cJobject
    ' copying class from one database to another
    Set dbSource = getScriptDb(Class, source)
    Set dbTarget = getScriptDb(Class, target).batch(True)
    
    ' delete everything in source db of this class
    dbTarget.deleteObjects
    
    'we have to do it in chunks because of potential query limits
    Set jobSkip = JSONParse("{'skip':0}")

    ' we'll just use the default limit for a big query
    Do
        With dbSource.getObjectsByQuery(Nothing, jobSkip).jObject.child("results")
            If .children.count = 0 Or Not dbSource.isOk Or Not dbTarget.isOk Then Exit Do
            For Each job In .children
                dbTarget.createObject job
            Next job
            jobSkip.child("skip").value = jobSkip.child("skip").value + .children.count
        End With
    Loop
    
    ' clean up
    dbTarget.flush.tearDown
    dbSource.tearDown
  
End Sub

and we can now check the counts on everything

Private Sub testdbCount()
    Debug.Print getScriptDb("VBAParseCustomers", "dbProduction").count(); " objects  in customers class: production DB"
    Debug.Print getScriptDb("VBAParseData", "dbProduction").count(); " objects  in data class: production DB"
    
    Debug.Print getScriptDb("VBAParseCustomers", "dbTest").count(); " objects  in customers class: test DB"
    Debug.Print getScriptDb("VBAParseData", "dbTest").count(); " objects  in data class: test DB"
    
End Sub

 result
 100  objects  in customers class: production DB
 308  objects  in data class: production DB
 100  objects  in customers class: test DB
 308  objects  in data class: test DB

all Done!


You can get me on Google plus, Twitter or this forum, and see more about this particular topic at A VBA API for scriptDB

For help and more information join our forumfollow the blogfollow me on twitter
Comments