Newsgroup: it.comp.lang.visual-basic
Titolo: [MSDE - VB6 SP5 - Query] - Query tra due tabelle con il nome di un campo uguale

Ho le seg. tabelle in un db MSDE:
tbUtenti           tbPermessi
--------           ----------
IdUtente           IdPermesso
UserId             Descrizione  
Password
Descrizione
Permesso
NB. I campi Descrizione hanno lo stesso nome
Da VB6 SP5 ho effettuato una connessione OLEDB a tale db
ed effettuo la seg. query:
sql = "SELECT tbUtenti.*, tbPermessi.*" & _
    "FROM tbPermessi INNER JOIN tbUtenti ON " & _
    "tbPermessi.IdPermesso =  tbUtenti.Permesso"
Apro il recordset con successo, ma i valori 
rs("tbUtenti.Descrizione").value e 
rs("tbPermessi.Descrizione").value non sono accessibili.
Se utilizzo il valore
rs("Descrizione").value mi restituisce il contenuto
del campo Descrizione nella tabella tbPermessi.
Premesso che collegandomi ad un db Access 2000 non ho
di questi problemi, qualcuno sa dirmi se devo obbligatoriamente
cambiare i nomi dei campi o suggerirmi altre soluzioni?
Grazie,
Piero

 rs("tbPermessi.Descrizione").value non sono accessibili.
Utilizza un alias :
SELECT tbUtenti.*, tbUtenti.Descrizione as Descri1, tbPermessi.*,  ec...
Saluti

 SELECT tbUtenti.*, tbUtenti.Descrizione as Descri1, tbPermessi.*, ec...
Grazie Fox.
Considerazione:
A questo punto sembra quasi obbligatorio utilizzare
nomi di campi diversi in tabelle nei db MSDE, onde
evitare l'utilizzo fastidioso di troppi alias nelle query.
Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Da premettere il famoso concetto di univocità dei campi
che evita la rognosa questione degli alias, secondo te
quando tu fai una
select campo1, campo1 from tabella1, tabella2
sql come diavolo fa a sapere quale è il campo1 che vuoi
vedere per primo?? Non può ...
allora o usi un alias come ti è stato suggerito, o eviti
la selezione totale di tutti i campi con l'asterisco e li specifichi
passando con prefisso il nome della tabella.
-- 
Saluti
Andrea Moro

 ha scritto nel messaggio
news:bmjqi1$n7opj$1...@ID-61006.news.uni-berlin.de...

Per non incappare in tale problema solitamente i primi n caratteri di ogni
field.name
 li imposto all'acronimo del nome tabella  :
Tab : ArticoliClienti
Fields :
ACId    - Identity
ACCodice - Codice articolo
ACDescri -
ecc...
Certo che nel caso della tab CodiciAggiuntiviCaricoArticoliClienti
l'acronimo è particolarmente ridicolo : CACAC
Vabbè mica si chiamano tutte così le tabelle
Saluti

 passando con prefisso il nome della tabella.
Il problema non consiste nel fatto che non voglio usare gli
alias, ma bensì siccome non sono stato capace, in tutta la documentazione e
la guida di SQL, di trovare il paragrafo
dove mi dice che non posso usare due campi con lo stesso nome
in due tabelle correlate, volevo sapere se qualcuno ne fosse
certo.
Infine, se proprio è una regola che non conoscevo, perchè
quando effettuo la query tra due tabelle correlate con
alcuni campi aventi lo stesso nome, non ottengo un messaggio
di errore che mi segnala la presenza del nome campo ambiguo?
Ciao,
Piero.


 la guida di SQL, di trovare il paragrafo
CUT
Scusa ma quando parli di SQL ti riferisci a SQL Server ? ... dal resto del
tuo discorso sembra che tu ti riferisca ad Access.
I dialetti sono diversi e solitamnte si prende come riferimento il motore
più potente (ma questa non è una regola scritta) .. senza dubbio Access ti
consente di fare più diavolerie con i dati.
Saluti

 Saluti
Il modo in cui si accede ai database da VB, dipende molto
dai Driver ODBC o dai provider OLEDB.
Anche se la sintassi della query č la stessa,
in base a se il db č un Dbase,MS Access,MySql,MS Excel,Oracle o
MS Sql Server, la risposta del motore cambia, e su questo non
ci piove.
Il problema č che MS Sql Server ti costringe ad utilizzare
nomi di campi univoci per tutte le tabelle. Vorrei sapere perchč?
Qual č il beneficio?
Ciao,
Piero
PS. Scusate l'insistenza, ma cerco di risolvere i miei quesiti
in maniera definitiva.


[CUT]
Ho risolto l'enigma dei campi con nomi uguali.
Il problema non si presenta con Sql Server 2000,
ma solo con la versione ridotta per desktop di Sql ossia MSDE,
grande numero da circo della MS.
Ho effettuato una query tra tre tabelle aventi 3 campi con
lo stesso nome "IdContratto" utilizzando come suffisso il nome della
tabella, tutto funziona correttamente.
SELECT Utenti.*,Account.*,Contratti.* from Contratti,Utenti,Account where
Utenti.IdUtente = Account.IdUtente and
Contratti.IdContratto=Utenti.IdContratto and Utenti.IdUtente = 1063
rs("Utenti.IdContratto").value
rs("Account.IdContratto").value
rs("Contratti.IdContratto").value
Tutti e 3 questi campi mi restituiscono un valore.
Ciao,
Piero


 grande numero da circo della MS.
Sinceramente, sin dall'inizio di questo topic, non ho capito quale sia il
problema, se relativo a un database o a un altro (MySQL?).
Per me, da sempre (e da qualche parte č certamente scritto), l'omonimia dei
campi si risolve _solo_ anteponendo il nome della tabella di competenza. Mi
sembra assolutamente logico, cosě com'č logico che si debba essere liberi di
denominare i campi in modo identico fra una tabella e un'altra.
Per inciso, se si utilizzano diversi database nella stessa query e questi
prevedono campi con nome uguale (ovviamente in tabelle diverse) in tabelle
con nome uguale (ovviamente in database diversi), si deve anteporre al nome
della tabella il nome del database (secondo diverse sintassi in funzione del
tipo di database).

 tipo di database).
Sono completamente d'accordo con te. In tutti i db deve essere
possibile creare campi con nomi uguali in più tabelle.
