Newsgroup: it.comp.lang.delphi
Titolo: [OT] ma .... dbExpress Join con Firebird + Delphi

Il problema e' semplice , ma rognoso:
Ho 2 Tabelle , una con i dati (TB_X) che ha 2 Cap che si
riferiscono a Citta di Nascita e di Residenza.
La Seconda e' la TB_CITTA che ha i Cap e deve restituire il
Nome della Citta in Base al Cap corrispondente.
Il problema e' che Ottengo sempre lo stesso Nome per CittaNascita
e Residenza :
StrSQL:='SELECT MATRICOLA,CITTANASCITA,CITTARESIDENZA,TB_CITTA.CITTA '+
               'from TB_X ' +
               'JOIN TB_CITTA ON (TB_X.CITTANASCITA=TB_CITTA.CAP) ' +
               'JOIN TB_CITTA ON (TB_X.CITTARESIDENZA=TB_CITTA.CAP); ';
es record : AB100, 35100, 56100
anche questo non porta a nulla , sempre Uguali citta Nascita e Residenza
StrSQL:='SELECT MATRICOLA,CITTANASCITA,CITTARESIDENZA,TB_CITTA.CITTA as C1,
TB_CITTA.CITTA as C2 '+
come posso far distinguere la 1 dalla 2 citta ? nella dichiarazione Select
StrSQL:='SELECT MATRICOLA,CITTANASCITA,CITTARESIDENZA,C1.TB_CITTA '+
cosi' non e' accettata.
in un NG di Database mi hanno suggerito questa , ma non accetta
l'assegnazione TB_CITTA2
SELECT *,
TB_CITTA.*,
TB_CITTA2.*
from TB_X
JOIN TB_CITTA ON (TB_X.CAPNASCITA = TB_CITTA.CAP)
JOIN TB_CITTA AS TB_CITTA2 ON (TB_X.CAPRESIDENZA=TB_CITTA2.CAP)

StrSQL:='SELECT MATRICOLA,CITTANASCITA,CITTARESIDENZA,TB_CITTA.CITTA as C1,
TB_CITTA.CITTA as C2 '+ [...]
ti ho risposto nel thread di qualche giorno fa ... hai
provato la mia soluzione? E' un pò diversa da come
l'hai riscritta in questo post, si avvicina di più alla
soluzione che ti hanno proposto nel gruppo di sql ...
Comunuqe mi sa che hai qualche problema al livello di
comprensione della rinominazione di campi e tabelle
nella sintassi Sql ... come hai scritto tu l'sql,
prendi da una sola tabella di join le città (anche se
scrivi due volte il join la tabella è sempre la stessa)
quindi è abbastanza normale, credo, che ti restituisca
in tutti i casi lo stesso valore di campo.
Ti direi di riprovare la mia soluzione, non capisco
perchè non metti i nomi reali ... stai facendo un pò di
casino proprio per questo mi sa, prima era TB_A ora è
TB_X , prima era CITTA ora è TB_CITTA ... :-S
SELECT TB_A.*,C1.NomeCitta As NomeCitta1, C2.NomeCitta
As NomeCitta2 FROM TB_A, CITTA C1, CITTA C2 WHERE
TB_A.Citta1 = C1.Num AND TB_A.Citta2 = C2.Num;';
sostituisci semplicemente le occorrenze di TB_A con il
nome della tabella principale e CITTA con il nome della
tabella dove hai le città con i Cap.
	Ciao
	MassimoB
 
---------------------------
http://www.massimobeschi.it/

"MassimoB  scritto "
[...]
grazie ,  con la tua soluzione funziona, questa la situazione reale:
'SELECT TB_OPERAI.*, C1.Citta As NomeCitta1, C2.Citta As NomeCitta2 '+
'from TB_OPERAI, TB_CITTA C1, TB_CITTA C2 '+
'Where TB_OPERAI.CittaNascita=C1.Contatore And
TB_OPERAI.CittaResidenza=C2.Contatore;';
ho un piccolo inconveniente, con SQLDataSet , se chiedo Recordount>0,
da errore Columns Unknow C1.Contatore.
SQLDataSet non ha campi persistenti.
   if ClientDataSet.Active then ClientDataSet.Close; {chiude ClientDataSet}
   with SQLDataSet do
   begin
    Close;
    CommandText:=... la query sopra
    Active:=True;
    try
    except
    end;
   end;
   ClientDataSet.Active:=True; {Abilita Visualizzazione Dati}
.... con questo controllo da errore
   if SQLDataSet.RecordCount>0 then
    begin
      ...........
    end;