[Access 2003] Query su nome campo

mercoledì 18 maggio 2011 - 10.07

AJet Profilo | Newbie

Ciao a tutti!
Avrei bisogno del vostro aiuto: io ho a disposizione un DB access 2003 e ho necessità di estrarre da alcune delle mie tabelle un certo campo, che è poi quello in cui è riportato il nome degli oggetti contenuti nei record.
Il problema è che questo specifico campo cambia denominazione a seconda della tabella a cui appartiene- per esempio, nella tabella "alimenti" il campo si chiama "nome_alimenti", nella "animali" è "nome_animali" e così via.

La mia domanda è: esiste una possibilità di avere una query "universale" che estragga questo specifico campo, magari applicando il comando LIKE ai nomi dei campi invece che al contenuto dei record?

Per intenderci, qualcosa che suoni tipo "select field like 'nome*' from tabella"

Oppure, in alternativa, esiste una tabella di sistema da cui io possa attingere i nomi dei campi delle mie tabelle, così da poter poi gestire in maniera elastica la selezione del campo?

Grazie sin d'ora a chi saprà darmi una mano- e anche a chi ci proverà!

dinoxet Profilo | Senior Member

prova con questa query :


SELECT* from MSysQueries where flag=0;

fammi sapere se ri è utile


DINOXET
__________________________________________
impossible is only a word

AJet Profilo | Newbie

Hmmm... Grazie del tentativo, ma no, in effetti purtroppo non mi è utile...

Quella tabella contiene, se ho capito bene, una codifica delle query che io ho utilizzato nel mio db.
Quindi applicando il tuo "SELECT* from MSysQueries where flag=0" riesco a recuperare qualcuno dei nomi che interessano a me, ma non tutti (suppongo si tratti dei campi che vengono effettivamente utilizzati in qualche query...)

Ho letto online che nella tabella msysobjects invece dovrebbero esserci TUTTI gli oggetti del mio db... Però boh, i nomi dei campi io non li trovo, riesco a vedere solo quelli delle tabelle.

Hai qualche idea al riguardo?

pedro1975 Profilo | Newbie

Io creo di solito una tabella e delle query di accodamento (faccio accodare quello che voglio nelle colonne che voglio) pilotate da un macro.Dalla tabella creo la query e sopra la query la maschera con il pulsante della macro.

Pedro

AJet Profilo | Newbie

>Io creo di solito una tabella e delle query di accodamento (faccio
>accodare quello che voglio nelle colonne che voglio) pilotate
>da un macro.Dalla tabella creo la query e sopra la query la maschera
>con il pulsante della macro.
>
>Pedro

Nel mio caso questa tabella che dici tu conterrebbe i nomi dei campi che voglio, se ho ben capito...
Perché se è così, il mio problema è a monte. Ti spiego... Nel DB ho delle tabelle con dei nomi che rispecchiano i contenuti- MEZZI_DI_TRASPORTO, COLORI ecc.
*In teoria* i campi contenenti i nomi dei record dovrebbero essere codificati in modo da chiamarsi NOME_nomedellatabella (quindi NOME_MEZZI_DI_TRASPORTO, NOME_COLORI ecc), e in questo modo da Visual Basic non avrei difficoltà a tagliare ed incollare le stringhe e costruirmi la query dinamicamente.
Il problema è che chi ha creato il DB in alcune tabelle (non so quali né quante) ha sbagliato la codifica e io adesso mi ritrovo con delle corrispondenze tipo (tabella "ANIMALI" e campo "NOME_ANIMALE").
Quindi mi servirebbe uno strumento che riesca a recuperare automaticamente tutti i campi che mi servono, altrimenti dovrei restarmene lì a scrivere query specifiche per ogni singola tabella... Il che non solo è mostruosamente dispendioso in termini di tempo, ma necessita aggiornamento ad ogni nuova tabella inserita!

pedro1975 Profilo | Newbie

SCusami se ti do magari una risposta tempestiva a freddo poi lo valuterò.
Quello che sto cercando di farti capire è che io posso incanalare tutto quello che voglio sono io che decido con le query di accodamento.
Esempio ho due tabelle una con campo macchine e una con il campo persone.
Voglio che questi due campi vadano sotto la stessa colonna per poterli filtrare lo posso fare con gli accodamenti.

DEvi solo identificare tutte le tabelle e le loro colonne.

AJet Profilo | Newbie

>SCusami se ti do magari una risposta tempestiva a freddo poi
>lo valuterò.
>Quello che sto cercando di farti capire è che io posso incanalare
>tutto quello che voglio sono io che decido con le query di accodamento.
>Esempio ho due tabelle una con campo macchine e una con il campo
>persone.
>Voglio che questi due campi vadano sotto la stessa colonna per
>poterli filtrare lo posso fare con gli accodamenti.
>
>DEvi solo identificare tutte le tabelle e le loro colonne.

No, non ti preoccupare, anzi, grazie della disponibilità!

Però è proprio quello che io non riesco a fare... Cioè, usando i tuoi esempi, io sono in una situazione tipo:
La tabella Macchine ha il campo nome_macchine (il che è corretto: da vb mi basta prendere la string nometabella, che conterrà la parola "macchine", appiccicare all'inizio i caratteri "nome_" e il gioco è fatto, posso recuperare tranquillamente il contenuto del campo)

La tabella Persone, invece, ha come campo "nome_personA". E qui vedi bene che non mi vale più il trucco di incollare un pezzetto alla stringa... Quindi non posso usare la stessa query di prima, ne devo costruire una ad hoc
(if nometabella = "persone" then
query_persone = "select nome_persona from persone"
end if).

Mi andrebbe anche bene se si trattasse di un'unica tabella, ma io devo lavorare su 50 (e su un DB in espansione)...

pedro1975 Profilo | Newbie

mandami il database a francescopedrini@cascinaalta.it e dimmi cosa vuoi ottenere come tabella finale.
Se vuoi stasera gli do un occhio

AJet Profilo | Newbie

Ehm... Non posso mandarti il db originale perché contiene anche dati personali di pazienti...

Se hai pazienza, nella pausa pranzo posso mettere insieme un DB ad hoc con solo quattro o cinque tabelle e un paio di record ciascuna, giusto per farti capire il problema!
Grazie mille per il tuo aiuto, sei davvero molto gentile!
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5