Access, query di insert o di update

mercoledì 07 gennaio 2009 - 10.56

volperubbia Profilo | Senior Member

Ciao a tutti,
sono abituato ad usare sql server, dove ci sono le stored procedures e molto si può fare al loro interno,
mi chiedo ora come risolvere il seguente problema su Access ...
Ho creato una query di insert con parametri su mdb e fin qui tutto ok.
Ovviamente sulla mia tabella c'è un campo chiave, quindi su quel campo non posso inserire valori duplicati.

E' possibile, all'interno della stessa query, fare un test:
- se il valore non esiste, fai l'insert
- se il valore esiste, non fare nulla (o magari fai l'update)

???

Sarebbe un po' l'uovo di Colombo, ... eviterei così, in alcuni casi, di aggiungere codice di controllo lato vb ...

Qualche idea?
Grazie, Davide

lbenaglia Profilo | Guru

>E' possibile, all'interno della stessa query, fare un test:
>- se il valore non esiste, fai l'insert
>- se il valore esiste, non fare nulla (o magari fai l'update)
>
>???
>
>Sarebbe un po' l'uovo di Colombo, ... eviterei così, in alcuni
>casi, di aggiungere codice di controllo lato vb ...

Ciao Davide,

Temo che dovrai implementare questi controlli lato client visto che gli oggetti Query di Access sono una via di mezzo tra le viste e le inline UDF di SQL Server.

>Grazie, Davide
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

volperubbia Profilo | Senior Member

Ciao Lorenzo, grazie
... per quanto riguarda l'insert con pre-verifica dell'esistenza di un valore,
ho risolto così:

PARAMETERS [@NewValue] Text ( 255 ) ;
INSERT INTO MyTable ( Field )
SELECT DISTINCT [@NewValue] FROM MyTable
WHERE
(SELECT TOP 1 U.Field FROM MyTable U
WHERE UCase(Trim([@NewValue])) = UCase(Trim(U.Field))) IS NULL ;

E' un po' un raggiro, ma sembra funzioni, almeno dalle prove che ho fatto.

Resta da capire poi l'altro problema, cioè il fare l'insert o l'update a seconda
dell'esistenza o meno di un determinato valore, ma qui penso che hai ragione tu ...

Sai mica se (ovviamante per pochi casi dove è ammissibile) è possibile inserire
due istruzioni SQL in una stessa query con parametro?

Eempio:
DELETE * FROM ... ;
INSERT INTO ... ;

Grazie mille, Davide

lbenaglia Profilo | Guru

>Sai mica se (ovviamante per pochi casi dove è ammissibile) è
>possibile inserire
>due istruzioni SQL in una stessa query con parametro?
>
>Eempio:
>DELETE * FROM ... ;
>INSERT INTO ... ;
No, con le Query non è possibile.

>Grazie mille, Davide
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

volperubbia Profilo | Senior Member

Ciao Lorenzo,
c'è un' errore sullo script precedente che avevo mandato ...

PARAMETERS [@NewValue] Text ( 255 ) ;
INSERT INTO MyTable ( Field )
SELECT DISTINCT [@NewValue] FROM MyTable
WHERE
(SELECT TOP 1 U.Field FROM MyTable U
WHERE UCase(Trim([@NewValue])) = UCase(Trim(U.Field))) IS NULL ;

Funziona solo quando MyTable è non vuota.

Per farlo funzionare anche quando MyTable è vuota, ho creato sull'mdb
una tabella NullTable con un campo e un solo record (è una tabella inutile).

Lo script ora diventa:

PARAMETERS [@NewValue] Text ( 255 ) ;
INSERT INTO MyTable ( Field )
SELECT [@NewValue] FROM NullTable
WHERE (SELECT TOP 1 U.Field FROM MyTable U
WHERE UCase(Trim([@NewValue])) = UCase(Trim(U.Field))) IS NULL ;

Davide
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5