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.

  1. 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.

  2. 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.

  3. 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

  4. 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

  5. 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.

  6. 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).