magazzino disordinato di appunti
Stored Procedure Parametriche o User Defined Function Parametriche in un Progetto ADP
Ho un DB su SQL Server 2000 con definita la seguente SP:
CREATE PROCEDURE dbo.ParaSP1
(@par1 nvarchar(100))
AS
SELECT
CAP AS Expr3,
Provincia AS Expr4,
Localita AS Expr5,
Via AS Expr6
FROM
dbo.CAP
WHERE
(Localita LIKE N'%' + ISNULL(@par1, '') + N'%')
GO
nello stesso DB ho definita la seduent UDF:
CREATE FUNCTION dbo.ParaFN1
(@Par1 varchar(100))
RETURNS TABLE
RETURN (
SELECT CAP AS Expr3, Provincia AS Expr4, Localita AS Expr5, Via AS Expr6
FROM dbo.CAP
WHERE (Localita LIKE N'%' + ISNULL(@par1, '') + N'%')
)
Poi ho un progetto ADP che si collega al mio DB su SQL Server. Nel mio progetto posso aprire le sopracitare SP ed UDF in 6 modi diversi, vediamo come:
Ho una form "Z_TEST_ParaSP2" che contiene un controllo TextBox chiamato "Par1" (ESATTAMENTE come il parametro nelle UDF ed SP) Sull'evento "dopo aggiornamento" della textbox aggiorno tutti gli altri controlli, che saranno 2 caselle di riepilogo e 4 subform.
- Casella di riepilogo basata su SP
Origine Riga=ParaSP1
Non serve altro, Access si accorge che la SP usa un parametro @Par1, e cerca un controllo "Par1" sulla form corrente, lo trova e sostituisce il valore.
-
Casella di riepilogo basata su UDF
Origine Riga=ParaFN1
Non serve altro, Access si accorge che la UDF usa un parametro @Par1, e cerca un controllo "Par1" sulla form corrente, lo trova e sostituisce il valore.
- Sottomaschera continua basata su SP
Origine Record=ParaSP1 Parametri di Input= @par1=[Forms]![Z_TEST_ParaSP2]![par1]
Devo compilare a mano il campo parametri di input, cos' dice al DB che valore assegnare a @par1
-
Sottomaschera continua basata su UDF
Origine Record=ParaFN1 Parametri di Input= @par1=[Forms]![Z_TEST_ParaSP2]![par1]
Devo compilare a mano il campo parametri di input, cos' dice al DB che valore assegnare a @par1
- Sottomaschera continua basata su SP
Origine Record=EXEC Z_ParamSP1 @[Forms]![Z_TEST_ParaSP2]![par1] Parametri di Input= ? [AllowDefault] = [Forms]![Z_TEST_ParaSP2]![par1]
Richiamo la SP con la sitassi tipo query analizer, NOTA CHE il campo parametri di input VIENE COMPILATO AUTOMATICAMENTE, cosa che trovo estremamente comoda.
- Sottomaschera continua basata su UDF
Origine Record=SELECT * FROM dbo.ParaFN1(@[Forms]![Z_TEST_ParaSP2]![par1]) Parametri di Input= ? [AllowDefault] = [Forms]![Z_TEST_ParaSP2]![par1]
Richiamo la SP con la sitassi tipo query analizer, NOTA CHE il campo parametri di input VIENE COMPILATO AUTOMATICAMENTE, cosa che trovo estremamente comoda.
Naturalmente per far funzionar eil tutto è necessario impostare altri parametri nei controlli (numero di colonne nelle caselle di riepilogo, disegnare 4 sottomaschere con tutti i campi ecc...)
Personalmente ritengo che le soluzini 5 e 6 siano le più comode, in quanto per funzionare necessitano solo di scrivere 1 sola volta il nome per esteso del controllo contenente il parametro. Nota che nelle soluzioni 1 e 2 è necessario che il parametro nella SP/UDF ed il nome del controllo coincidano.
Aggiungo 2 articoli Microsoft dai quali ho preso spunto per fare questi esperimenti:
- ACC2002: How to Use Parameterized Combo Boxes in an Access Project (Q281870)
- ACC2002: How to Use Form Parameters in the RecordSource Property in an Access Project (Q278400)
Quanto esposto sopra è stato testato solo con SQL Server 2000 ed Access 2002 (o XP che dir si voglia).