Richiamare una SQL StoredProcedure da VB
Il metodo per
chiamare una procedura SQL memorizzata in un DB dipende se la procedura restituisce dei
record o no. Per esempio:
Procedure che non
restituiscono record possono essere eseguite con il methodo ExecuteSQL() nel seguente modo
i% =
MyDb.ExecuteSQL("StoredProc")
Il codice qui sopra
esegue la procedura StoreProc (per esempio una query SQL che restituisce il numero dei
record nel DB), la quale restituisce il valore nella variabile i%. Il metodo ExecuteSQL e'
utile nell'esecuzione delle cosiddette 'action query' ovvero query SQL che manipolano i
dati presenti nelle tabelle, ad esempio:
Delete Authors where
name like "fred%"
Il metodo
ExecuteSQL() e' valido solo per query SQL che non restituiscono record. Uno statement SQL
che utilizza "SELECT..." restituisce dei records, mentre uno statement SQL che
utilizza "DELETE..." non restituisce records.
Query che
restituiscono records, richiedo un Dynaset o uno SnapShot per ottenere i dati. Ecco due
esempi:
Esempio utilizzando
un DataControl:
Data1.Options =
dbSQLPassThrough
Data1.Recordsource = "StoreProc" ' il nome della procedura memorizzata da
richiamare.
Data1.Refresh
Quando si usa la
costante SqlPassThrough, il motore di Microsoft Access ignora la sintassi utilizzata e
passa il comando al server SQL.
Esempio utilizzando
gli oggetti di accesso ai dati:
Dim Ds as Recordset
' Aprire il database voluto...
Set MyDB = DBEngine.Workspaces(0).OpenDatabase(TheDataBase)
Set Ds = MyDB.OpenRecordset("StoreProc", dbOpenDynaset, _
dbSQLPassThrough)
Se la query
memorizzata richiede dei parametri, basta includere gli stessi dopo il nome della
procedura da richiamare, ad esempio:
' Specifica la
stringa SQL.
command.SQLx = "StoreProc parm1, parm2, parm3"
' nel caso in cui la procedura non
restituisce record...
i = MyDB.ExecuteSQL(SQLx)
'...nel caso in cui la procedura restituisce record
set Ds = MyDB.OpenRecordset(SQLx,
dbOpenDynaset, dbSQLPassThrough)
La variabile oggetto
(Ds) contiene il primo set di risultati ottenuti dalla stored procedure (StoreProc).
Le seguenti righe
mostrano alcuni usi di entrambi i metodi
Dim db as Database
Dim x as Long
Dim Ss as Recordset
Set Db = DBEngine.Workspaces(0).OpenDatabase _
("", False, False, "ODBC;dsn=yourdsn;uid=youruid;pwd=yourpwd:")
' Per le stored procedure che non restituiscono record.
x=Db.ExecuteSQL("StoredProc_Name")
' Per le stored procedure che restituiscono record.
Set Ss = Db.OpenRecordset("StoredProc_Name", dbOpenSnapshot, _
dbSQLPassThrough) |