Query.ColumnDecreasedAction
| Syntax | Parameters | Return Value |
|---|---|---|
| - | - | QueryDataDecreasedAction |
SVB Example
Optimizing spreadsheet queries using cached DB connections:
Option Explicit
'Just used for timing the queries
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub Main
Dim dtStart As Long
Dim dtEnd As Long
Dim result As Double
Dim rptStr As String
Dim rpt As New Report
Dim ss As Spreadsheet
dtStart = GetTickCount()
RunQueries(ss) 'Run the queries for the first time
'See how long the process took to run
dtEnd = GetTickCount()
result = (dtEnd - dtStart)/1000
rptStr = "First set of queries: " & CStr(result) & " seconds."
dtStart = GetTickCount()
RunQueries(ss) 'Requery, using a cached DB connection
dtEnd = GetTickCount()
result = (dtEnd - dtStart)/1000
rptStr = rptStr & vbCrLf & "Second set of queries (cached connection): " & CStr(result) & " seconds."
dtStart = GetTickCount()
RunQueries(ss) 'Requery, using a cached DB connection
dtEnd = GetTickCount()
result = (dtEnd - dtStart)/1000
rptStr = rptStr & vbCrLf & "Third set of queries (cached connection): " & CStr(result) & " seconds."
'Show a performance report
rpt.SelectionText = rptStr
rpt.Visible = True
ss.Close(False)
End Sub
Sub RunQueries(ByRef ss As Spreadsheet)
'A connection string to the example datasets folder, using the Statistica OLE DB provider
Dim CONN_STR As String
CONN_STR = "Provider=STATISTICA.StaOLEDB.1;Data Source=""" & Path & _
"\Examples\Datasets\;"";Integrated Security=TRUE;User ID="""";" & _
"Extended Properties="""";Strip Formatting=TRUE;Auto calculate spreadsheet=FALSE;" & _
"Connection String="""";Excel Style Julian Dates=TRUE;"
'Query three large datasets from the example folder.
'Note that will we be placing all of these queries into a single spreadsheet.
Dim sql(1 To 3) As String
sql(1) = "SELECT * FROM CreditScoring3"
sql(2) = "SELECT * FROM Census"
sql(3) = "SELECT * FROM Marketing"
Dim q As Query
Dim i As Long
If ss Is Nothing Then
'first time, create the spreadsheet and define the queries
Set ss = Spreadsheets.New
Dim destVar As Long
destVar = 1
For i = LBound(sql) To UBound(sql)
If destVar > ss.NumberOfVariables Then
ss.AddVariables("x", ss.NumberOfVariables, 1)
End If
Set q = ss.Queries.Add("Q" & CStr(i), CONN_STR, 1, destVar, sql(i))
q.FormatVariable = True
q.ColumnDecreasedAction = scQuery_Delete
q.ColumnIncreasedAction = scQuery_OverwriteAndInsert
q.RowDecreasedAction = scQuery_Delete
q.RowIncreasedAction = scQuery_OverwriteAndInsert
q.MaxRow = 2147483647
q.OleColumnMaxSize = -9999 'trick to turn on option to cache the connection to the DB
q.Refresh(False)
destVar = ss.NumberOfVariables + 1
Next i
'Otherwise, we are requerying from an existing spreadsheet, where the DB connection is cached
'and the column formatting is already established.
Else
For i = 1 To ss.Queries.Count
Set q = ss.Queries(i)
q.CommandText = sql(i) 'set the query
q.OleColumnMaxSize = -9999 'trick to turn on option to cache the connection to the DB
'first time, format the variables by setting names and types and format strings and such.
'thereafter, it is assumed the number and types of variables does not change and no need to do it again
q.FormatVariable = False
q.Refresh(False)
Next
End If
End Sub
Copyright © 2020. Cloud Software Group, Inc. All Rights Reserved.
