PDA

View Full Version : [Access] Riferimenti record + aiuto codice SQL complesso


ciopin83
24-09-2008, 22:35
Eccomi di nuovo qui a chiedervi aiuto per altri due problemini in cui mi sono imbattuto (a proposito, ringrazio di nuovo Kewell e cionci per l'aiuto che mi hanno dato l'ultima volta ;) )
Premetto che sto lavorando con Access 97. Ho lavorato sulle versioni successive, ma mai a questi livelli quindi non so se ci siano limitazioni nel programma che sono state colmate in seguito.
Inizio dai riferimenti ai record; è più una finezza che vorrei introdurre nella base dati, ma può anche essere un utile risparmio di tempo.
Ho 2 tabelle con queste colonne e relativi record:

Famiglie (Fam, SubFam) > sono le famiglie di prodotti
Prodotti (P#, Fam, SubFam) > sono tutti i prodotti a cui sono associate delle famiglie

I record di Prodotti.Fam sono dati un SELECT DISTINCT su Famiglie.Fam (compare un elenco a discesa con le possibili famiglie); una volta scelta la famiglia, vorrei creare un'istruzione che fa un SELECT per SubFam, mostrando nell'elenco a discesa solo le sottofamiglie appartenenti alla famiglia scelta.

Secondo problema: vorrei inserire più istruzioni in una query; dovrei inserire una creazione di tabella tramite SELECT (non CREATE, perché seleziono record e formato da una tabella preesistente e la tabella creata è provvisoria), un UPDATE di tutti i record di un certo tipo, un INSERT nella tabella preesistente a cui facevo riferimento prima e infine DROP per eliminare la tabella provvisoria. Per ora ho creato una macro, ma mi chiede 7-8 conferme prima di effettuare tutti i passaggi; è la prima macro che creo dato che mi sono sempre rifiutato di imparare a usarle, ma penso si tratti di controlli di sicurezza eliminabili dalle impostazioni, impostazioni che vorrei mantenere tali.
Riporto le 4 query:
1) SELECT * INTO Temp FROM Tab WHERE (((Tab.[Campo1])=[Valore:]));
2) UPDATE Temp SET Temp.[Campo1] = [Nuovo valore:];
3) INSERT INTO Tab ( [Campo1], [Campo2], [Campo3] ) SELECT * FROM Temp;
4) DROP TABLE Temp;
Nella prima query, [Valore:] fa comparire una finestra in cui l'utente deve digitare il valore da ricercare nel Campo1, mentre nella seconda, [Nuovo valore:] richiede all'utente un valore che poi sostituisce tutti i record del Campo1 nella tabella temporanea
E' possibile mettere tutto in una query unica? Devo mettere delle parentesi e fare una query annidata?

john_revelator
25-09-2008, 01:00
Ciao. Per il primo problema prova a dare uno sguardo qui

http://www.rogersaccesslibrary.com/forum/forum_posts.asp?TID=389

questo sito è fenomenale.

Per il secondo non mi è chiaro tutto il giro che vuoi fare, ma magari è colpa mia vista l'ora. :fagiano:

Buona notte. :)

ciopin83
25-09-2008, 07:33
Ciao. Per il primo problema prova a dare uno sguardo qui

http://www.rogersaccesslibrary.com/forum/forum_posts.asp?TID=389

questo sito è fenomenale.

Per il secondo non mi è chiaro tutto il giro che vuoi fare, ma magari è colpa mia vista l'ora. :fagiano:

Buona notte. :)

Ciao. Stasera o più tardi provo a guardare il sito che mi hai dato.
Per il secondo problema, in breve vorrei riunire tutte le query in un'unica istruzione:
SELECT * INTO Temp FROM Tab WHERE (((Tab.[Campo1])=[Valore:]))
UPDATE Temp SET Temp.[Campo1] = [Nuovo valore:]
INSERT INTO Tab ( [Campo1], [Campo2], [Campo3] ) SELECT * FROM Temp
DROP TABLE Temp;
Ho provato come sopra, togliendo i ";" (punto e virgola), ma, una volta terminata la prima riga, mi restituisce un errore ed evidenzia l'UPDATE, dicendo che è un'istruzione non prevista :confused:

Edit: Ciao, john. Ho dato uno sguardo alla query sul sito. E' proprio quello che cercavo. Non sono riuscito ad applicarlo alla tabella, ma dovrebbe funzionare con le maschere. Grazie
P.S. Per quanto riguarda le istruzioni consecutive, mi sono arreso all'uso della macro. Ho disattivato gli avvisi di modifica alle tabelle per velocizzarne il funzionamento.