|
Se si ha la necessità di risolvere un'espressione numerica in Visual Basic e si dispone di una connessione a un qualsiasi database SQL Server (o anche Access), è possibile farlo aprendo un recordset con una semplice interrogazione SQL tipo SELECT < espressione_numerica >. Questa caratteristica può essere sfruttata per risolvere formule contenute in un campo di database previa sostituzione dei valori delle variabili. Di seguito un esempio in VBScript che usa una connessione al database d'esempio Northwind di SQL Server. La valutazione di Err.Number permette di sapere se l'espressione fornita nella query è effettivamente numerica. VBScript Dim cnn, rst, connString, formula, sql On Error Resume Next formula = "(10 - 5/2) /2" formula = InputBox("", "Calcola formula", formula) connString = "DRIVER={SQL Server};DATABASE=Northwind;UID=sa;PWD=;SERVER=(local)" Set cnn = CreateObject("ADODB.Connection") cnn.Open connString Set rst = CreateObject("ADODB.Recordset") formula = Replace(formula, ",", ".") sql = "SELECT(" & formula & ") AS Risultato" rst.Open sql, cnn, 1, 1 If Err.Number <> 0 Then Value = "L'espressione inserita non è un'espressione numerica valida" Else Value = rst.Fields("Risultato") End If rst.Close Set rst = Nothing cnn.Close Set cnn = Nothing MsgBox Value Si noti come nel codice d'esempio viene fornita di default l'espressione numerica (10 - 5/2) /2), la quale restituisce un valore intero per via del fatto che l'operatore / (divisione) del T-SQL restituisce il tipo di dati dell'argomento con precedenza maggiore (vedi Precedenza dei tipi di dati nel BookOnLine di SQL Server) che in questo caso è intero poichè gli operandi dell'espressione sono entrambi interi. Se questo risultato non è quello sperato, occorre fare un CAST di almeno uno dei due operandi SELECT CAST( 5 AS DECIMAL) / 2 oppure aggiungere un decimale ad almeno uno dei due operandi SELECT 5 / 2.0 Se, invece, si sta usando .net, non è più necessario disporre di una connessione attiva in quanto il datatable ed il relativo datacolumn disconnesso prevede la possibilità di inserire colonne il cui valore è calcolato a runtime attraverso una espressione impostata come proprietà.
|