Newsgroup: it.comp.lang.delphi
Titolo: Query Join Firebird + D7

Imposto questa Query, Firebird + D7 + componenti ClientDataSet, SQLDataSet, 
DataSetProvider
StrSQL:='SELECT TB_TESTAGESTIONE.CONTATORE, TB_TESTAGESTIONE.DATA, 
TB_TESTAGESTIONE.TIPOOPERAZIONE,
                TB_TESTAGESTIONE.CODICECLIENTE, TB_CLIENTI.CONTATORE, 
TB_CLIENTI.NOME, TB_CLIENTI.RAGIONESOCIALE'+
               'FROM TB_TESTAGESTIONE '+
              'INNER JOIN TB_CLIENTI ON (TB_TESTAGESTIONE.CODICECLIENTE = 
TB_CLIENTI.CONTATORE)';
eseguo la Query dopo aver impostato le proprieta'
ClientDatSet1.Close;
SQLDataSet1.Close;
SQLdataSet.CommandText:=StrSQL;
SQLDataSet1.Open;
ClientDataSet1.Open;
mi restiruisce il numero di record , vedo il campo Data di TB_testaGestione 
ma non vedo
i campi Nome e RagioneSociale di TB_Clienti.
dove ho sbagliato ? 

 i campi Nome e RagioneSociale di TB_Clienti.
cioč, li vedi vuoti?
Sicuro che ci sia effettivamente la corrispondenza tra i campi che sui 
sulla join?
AS

> sulla join?
direi di si in quanto TB_TestaGestion.CodiceCliente ha il valore su
Tb_Clienti.Contatore , entrambi di tipo Integer;
Tb_TestaGestione  ! Tb_Clienti.
------------------- ! ------------
CodiceCliente        ! Contatore
1                           ! 1
3                           ! 2
3                           ! 3
2                           ! 4
Tempo fa avevo usato le Join con i conponenti Ib ,ora non vorrei che ci
fosse qualche parametro diverso per ClientDataSet
ciao Paolo

> fosse qualche parametro diverso per ClientDataSet
dubbio confermato su ClientDataSet,SQLDataSet
applicando la stessa query su un componente TBQuery, funziona come mi
sarei aspettato, visualizzando ragSociale e Nome.
  IBQuery2.Close;
  IBQuery2.SQL.Clear;
  IBQuery2.SQL.Add(StrSQL);
  IBQuery2.Open;
Paolo 

dubbio confermato su ClientDataSet,SQLDataSet
...ma de che... una JOIN è una JOIN... è standard SQL, viene eseguita
allo stesso modo, sia che si tratti di TIBQuery, sia che si tratti di
altri componenti...

 ha scritto nel messaggio
news:hfr3u1d938tnhdkhg...@4ax.com...

era un problema legato ai campi persistenti , eliminati questi , si vedono i
dati della Join.
grazie Paolo

dati della Join.
Se si imparasse il "perché" che c'è dietro certi meccanismi, molte
cose risulterebbero più chiare.  Come già detto, una JOIN viene
eseguita sempre allo stesso modo e dal motore DB.  Non c'entra quindi,
il componente usato.  Mi sembra ovvio che non avendo i campi
persistenti relativi a quei due campi, quei due campi, nella griglia,
non li vedi.  Avresti anche potuto aggiungere i due campi persistenti,
evitando di eliminarli tutti.

> evitando di eliminarli tutti.
non ved cpme potrei aggiungere campi persistenti su un TDBGrid a dedign
time, se questi non appartengono al Dataset cui fa riferimento TDBGrid.
tramite Columns[x].NomeCampo, a runtime non ci sono problemi.
Paolo 

[...]non ved cpme potrei aggiungere campi persistenti su un TDBGrid[...]
E chi ha mai detto questo ?
Io ho detto che i valori dei campi non li vedi nella griglia, perché č
la griglia che mostra a video i dataset risultante.  Non ho affatto
detto che devi aggiungere i campi persistenti *alla TDBGrid*.  I campi
vanno aggiunti, semmai, al componente dataset associato (nel tuo caso,
il TClientDataSet).  Se si studiasse un po' di piů prima di
smanettare...