CISA FotoGallery

Statistiche

Tot. visite contenuti : 927997
Home Articoli tecnici VBA Aggiornare tabella in form disconnesso con DAO

Aggiornare tabella in form disconnesso con DAO

Nel caso in esempio abbiamo un db in SQL, vogliamo visualizzare il record filtrato da una form, modificare un record e poi inserirlo nel db.

Chiariamo anzitutto alcune restrizioni.
Le viste portate in un MDB non sono editabili, nè è possibile filtrarle sul server. Dobbiamo quindi usare una Store Procedure.

Neanche la Store Procedure è editabile e quindi bisognerà aggiornare i dati con un Update.

Prima operazione: ci creiamo un db e quindi apriamo una nuova query in SQL Server Managment Studio Express e scriviamo:


CREATE DATABASE GestionePersonale

Perfetto, abbiamo il nostro db. Ora abbiamo bisogno di una tabella
 

USE GestionePersonale
CREATE TABLE dbo.t_esempio (
id int PRIMARY Key,
Nome nvarchar(50),
Cognome nvarchar(50))


Procediamo con l'inserimento di dati dummy


INSERT INTO t_esempio (id, Nome, Cognome) VALUES(1,'Pablito', 'Facciuti')
INSERT INTO t_esempio (id, Nome, Cognome) VALUES(2'MA', 'Amendola')
INSERT INTO t_esempio (id, Nome, Cognome) VALUES(3,'Sv', 'Crucitti')


Dobbiamo adesso crearci 2 Store Procedure: una di raccolta dati,
una di aggiornamento


USE [GestionePersonale];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE PROCEDURE [dbo].[spr_Esempio]
@id int
WITH
EXECUTE AS CALLER
AS
SELECT * FROM t_esempio
WHERE id = @mioId
GO


e quella di aggiornamento

 

 

USE [GestionePersonale];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE PROCEDURE [dbo].[spr_UpdateRow]
@id int, @Nome nvarchar(50), @Cognome nvarchar(50)
WITH
EXECUTE AS CALLER
AS
UPDATE dbo.t_esempio SET Cognome=@Cognome, Nome=@Nome
WHERE id = @mioId
GO


Sul server siamo a posto.

Ora dobbiamo crearci una query PASS-THROUGH e ne salviamo la psw (diamo per scontato che si sappia creare una query passtrough). La chiamiamo "Q_nomi"

La query PT la possiamo editare come vogliamo.
Noi quindi avremo due codici diversi per le due azioni.
Dalla query PT noi richiamiamo la Store Procedure e passiamo il parametro.

Immaginiamo di aver sulla nostra Form un Gruppo di Opzioni con valori da 1 a 3 (ovvio che potremmo anche avere una combo o una listbox o una casella in cui digitiamo il valore che vogliamo)

la nostra form non è associata e non lo sono neanche i 3 controlli che ci servono ma che per comodità chiamiamo con un eccesso di fantasia
Id, Nome, Cognome

Quindi col Gruppo di opzioni richiamiamo

 


Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset

Set qdf = CurrentDb.QueryDefs("Q_nomi")
qdf.SQL = "EXEC spr_Esempio " & Me.CornNomi
Set rs = qdf.OpenRecordset

With rs
If Not .EOF Then
Me.id = !id
Me.Cognome = !Cognome
Me.Nome = !Nome
End If

End With


Poi invece sul pulsante cmdAggiorna inseriamo
 

Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset

Set qdf = CurrentDb.QueryDefs("Q_nomi")
qdf.SQL = "EXEC spr_UpdateRow " & me.CornGruppo & ", '" & me.Nome & ", " & me.Cognome


Ed il gioco è fatto.