Discussione:
Viste in Access?
(troppo vecchio per rispondere)
cutoff
2009-01-03 19:12:26 UTC
Permalink
Ciao,
ho un'applicazione che usa come base dati un db access.
Mi sembra di aver capito che con access non è possibile creare
viste(spero di sbagliare)per cui sono qui a chiedervi come potrei
risolvere un problema non potendole utilizzare.

Allora premesso che non posso MODIFICARE LE TABELLE .....

Eseguo una query di select su una tabella del db, la quale mi
restituisce dei record.(Es: select nome, cognome from nomi where sesso
='M').Ora
ho la necessita di associare ad ognuno di questi record che mi sono
stati restituiti, un numero progressivo(ID) in modo
da ottenere una cosa del genere :

Primo record 1 - Paolo Rossi
Secondo record 2 - Antonio Brighi
..................................
500esimo record 500 - Vito Alci

Infine questi record cosi composti (ID,nome, cognome)dovrei salvarli
in una tabella temporanea,in quanto le successive operazioni di
interrogazione del db dovranno avvenire considerando il numero
progressivo che ho associato(id).
(Es: select * from tabellaAppoggio where ID between 4772 and 3391)
Come posso fare per aggirare il problema?

Grazie

Nik
giorgio rancati
2009-01-03 19:24:46 UTC
Permalink
Post by cutoff
Ciao,
ho un'applicazione che usa come base dati un db access.
Mi sembra di aver capito che con access non è possibile creare
viste(spero di sbagliare)
per tua fortuna sbagli :-)
Una vista in Access non è altro che una query di selezione.
Da Jet 4.0 c'è anche la possibilità di crearla via DDL
----
CREATE VIEW NomeVista
AS
SELECT .....
FROM Tabella1
----
Post by cutoff
per cui sono qui a chiedervi come potrei
risolvere un problema non potendole utilizzare.
[CUT]
direi che il problema non sussiste.
:-)
--
Giorgio Rancati
[Office Access MVP]
cutoff
2009-01-03 20:59:26 UTC
Permalink
Grazie x la risposta!!!
Ho provato a farlo inserendo la query in
Oggetti->Struttura e lanciandola, ma mi restituisce questo errore:
'Errore di Sintassi nell'istruzione CREATE TABLE'.

Sbaglio qualcosa o in questa modalità non è possibile farlo?Forse la
si può fare
solo via da codice(java, c#,vb...)

Grazie ancora

Nik


On 3 Gen, 20:24, "giorgio rancati"
Post by giorgio rancati
Post by cutoff
Ciao,
ho un'applicazione che usa come base dati un db access.
Mi sembra di aver capito che con access non è possibile creare
viste(spero di sbagliare)
per tua fortuna sbagli :-)
Una vista in Access non è altro che una query di selezione.
Da Jet 4.0 c'è anche la possibilità di crearla via DDL
----
CREATE VIEW NomeVista
AS
SELECT .....
FROM Tabella1
----
Post by cutoff
per cui sono qui a chiedervi come potrei
risolvere un problema non potendole utilizzare.
[CUT]
direi che il problema non sussiste.
:-)
--
Giorgio Rancati
[Office Access MVP]
giorgio rancati
2009-01-03 21:23:57 UTC
Permalink
Post by cutoff
Grazie x la risposta!!!
Ho provato a farlo inserendo la query in
'Errore di Sintassi nell'istruzione CREATE TABLE'.
Se stai usando Access puoi creare la vista o query premendo
Inserisci-->Query poi, o la costruisci attraverso l'interfaccia grafica
oppure ne inserisci il testo SQL senza l'istruzione "CREATE VIEW"

L'istruzione CREATE VIEW puoi utilizzarla da VBA con:
----
Currentproject.Connection.Execute "CREATE View Vista1 AS SELECT * FROM
Tabella1"
----
Anche se non ha senso, potresti farlo anche dal testo della query ma devi
attivare l'opzione "Sintassi compatibile SQL Server (ANSI 92)" da
Strumenti-->Opzioni-->Tabelle/Query.

Ciao
--
Giorgio Rancati
[Office Access MVP]
cutoff
2009-01-04 17:04:56 UTC
Permalink
On 3 Gen, 22:23, "giorgio rancati"
Post by giorgio rancati
Se stai usando Access puoi creare la vista o query premendo
Inserisci-->Query poi, o la costruisci attraverso l'interfaccia grafica
oppure ne inserisci il testo SQL senza l'istruzione "CREATE VIEW"
Ok si, in genre la costruisco tramite testo SQL.
In pratica se ho capito bene una vista è un query.

Ma in ogni caso, come faccio ad aggiungere nella vista un campo con un
numero progressivo relativo
ai record che mi sono stati restituiti, visto che questo campo con il
numero progressivo non è presente ne posso aggiungerlo nella tabella
da cui vengono presi i dati che poi costituiranno la vista?

Grazie

Nik
giorgio rancati
2009-01-04 17:26:40 UTC
Permalink
Post by cutoff
Ok si, in genre la costruisco tramite testo SQL.
In pratica se ho capito bene una vista è un query.
sì, una query di selezioneè l'equivalente di una vista.
Post by cutoff
Ma in ogni caso, come faccio ad aggiungere nella vista un campo con un
numero progressivo relativo
ai record che mi sono stati restituiti, visto che questo campo con il
numero progressivo non è presente ne posso aggiungerlo nella tabella
da cui vengono presi i dati che poi costituiranno la vista?
In Access non esiste una funzione tipo ROW_NUMBER() quindi devi costruirla
in base a un campo univoco della tabella.
Puoi provare queste query nel database di esempio NorthWind
----
SELECT IDCliente, NomeSocietà,
(SELECT COUNT(*) FROM Clienti AS C1 WHERE
C1.IdCliente<=Clienti.IdCliente) AS NumRiga
FROM Clienti
ORDER BY IDCliente
----
oppure
----
SELECT C1.IDCliente, C1.NomeSocietà,COUNT(*) AS NumRiga
FROM Clienti AS C1,Clienti AS C2
WHERE C2.IDCliente<=C1.IDCliente
GROUP BY C1.IDCliente, C1.NomeSocietà
ORDER BY C1.IDCliente
----

Ciao
--
Giorgio Rancati
[Office Access MVP]
cutoff
2009-01-04 18:36:38 UTC
Permalink
Gentilissimo e disponibilissimo.
Grazie infinite ancora .
Appena posso provo la soluzione.
Spero di non doverti + distrurbare.

Nik

On 4 Gen, 18:26, "giorgio rancati"
Post by giorgio rancati
Post by cutoff
Ok si, in genre la costruisco tramite testo SQL.
In pratica se ho capito bene una vista è un query.
sì, una query di selezioneè l'equivalente di una vista.
Post by cutoff
Ma in ogni caso, come faccio ad aggiungere nella vista un campo con un
numero progressivo relativo
ai record che mi sono stati restituiti, visto che questo campo con il
numero progressivo non è presente ne  posso aggiungerlo nella tabella
da cui vengono presi i dati che poi costituiranno  la vista?
In Access non esiste una funzione tipo ROW_NUMBER() quindi devi costruirla
in base a un campo univoco della tabella.
Puoi provare queste query nel database di esempio NorthWind
----
SELECT IDCliente, NomeSocietà,
     (SELECT COUNT(*) FROM Clienti AS C1 WHERE
C1.IdCliente<=Clienti.IdCliente) AS NumRiga
FROM Clienti
ORDER BY IDCliente
----
oppure
----
SELECT C1.IDCliente, C1.NomeSocietà,COUNT(*) AS NumRiga
FROM Clienti AS C1,Clienti AS C2
WHERE C2.IDCliente<=C1.IDCliente
GROUP BY C1.IDCliente, C1.NomeSocietà
ORDER BY C1.IDCliente
----
Ciao
--
Giorgio Rancati
[Office Access MVP]
Continua a leggere su narkive:
Loading...