conexiune deschisa si Excel

Am avut de facut o aplicatie care sa tipareasca automat niste rezultate care provin de la o niste rinduri de Excel, trecute printr-o functie dintr=o BD SQL Server.
Normal  ca am facut o functie in VBA care sa faca asta:
Public Function valoarescan(val)
    If (Len(val) = 0) Then Exit Function
    Dim t As Range
    Set t = val
   
   Dim rs As ADODB.Recordset
   Dim cn As ADODB.Connection
   Set cn = New ADODB.Connection
   cn.ConnectionString = “Driver={SQL Server};Server=(local);Database=….;Trusted_Connection=Yes;”
   cn.Open
    Set rs = cn.Execute(“SELECT [user].[functie] (‘” & t.Text & “‘)”)
   
    valoarescan = rs(0).Value
    cn.Close
    ‘MsgBox Len(valoarescan)
   
   
End Function
Ceea ce am observat este ca dura mult prea mult(2 minute) pentru 31 de rinduri, asa incit ceea ce am facut este sa nu mai respect BestPractices pentru o conexiune, ci sa folosesc aceeasi conexiune
Dim cn As ADODB.Connection
Public Function valoarescan(val)
    If (Len(val) = 0) Then Exit Function
    Dim t As Range
    Set t = val
   
   Dim rs As ADODB.Recordset
   Dim cn As ADODB.Connection
   If (cn Is Nothing) Then
   cn.ConnectionString = “Driver={SQL Server};Server=(local);Database=….;Trusted_Connection=Yes;”
   cn.Open
    End If
    Set rs = cn.Execute(“SELECT [user].[functie] (‘” & t.Text & “‘)”)
   
    valoarescan = rs(0).Value

    ‘MsgBox Len(valoarescan)
   
   
End Function

Rezultat: merge in aprox 2 secunde !
Drawback: Conexiunea nu se inchide… – pentru ca nu stiu care e ultima oara cind se apeleaza…

As putea sa fac o clasa care sa refoloseasca conexiunea – si pe Terminate sa o distruga… dar am fost bucuros ca mi-a dat…

Concluzia : Citeodata e bine sa nu respecti bestpractices!

Leave a Reply

Your email address will not be published. Required fields are marked *