Newsgroup: it.comp.lang.delphi
Titolo: Master Detail

Ciao a tutti, 
ho due oggetti TADOQUERY che effettuano 2 semplicissime query
su un db SQLSERVER2000.
Tali query si riferiscono a Testata e Dettaglio Ordini.
Quindi, tramite due ClientDataSet (usando logicamente anche
2 Provider) sparo su due DBGrid i dati delle 2 query.
Ho utilizzato la tecnica del Master&Detail 
(come già ho fatto tante volte su altri database) ma non riesco ad 
aggangiare i dati di dettaglio.
Eppure ho verificato che su SQLSERVER la query di dettaglio viene 
effettuata.
Vi riporto le operazione prima del lancio della 
query:                               
    clnDetail.IndexFieldNames := 'ORDID2';
    clnDetail.MasterFields := 'ORDID1';
    clnDetail.MasterSource := dtsMaster;
    clnDetail.PacketRecords := 0;
Non riesco a spiegarmi il motivo per cui non funzione....
Qualcuno ha qualche dritta da darmi?
Ve ne sarei infinitamente grato!
Ciao
Rino
p.s.Ho provato anche a Desing-Time...ma niente!!!
Inviato da 
www.mynewsgate.net

 Qualcuno ha qualche dritta da darmi?
Ti consiglio di spostare la relazione M/D dientro il provider.
CIao
  Gabriele

 dalla stessa tranzazione.
Gabriele, 'sta cosa mi incuriosisce.
Come fai a usare lo stesso provider per 2 cds che devono puntare a 2 
tabelle diverse?
A

 Ti consiglio di spostare la relazione M/D dientro il provider.
Come??
Grazie Mille.
Inviato da 
www.mynewsgate.net

Ma qualcuno ha mai usato una tecnica Master Detail con questa
configurazione ?
TADOQUERY_MASTER --> TPROVIDER_MASTER --> TCLIENTDATASET_MASTER
TADOQUERY_DETAIL --> TPROVIDER_DETAIL --> TCLIENTDATASET_DETAIL
Con un DB SQL SERVER 2000 ?
Inviato da 
www.mynewsgate.net

 tabelle diverse?
Rispondo ad entrambi allora i CLientDaset può puntare oltre che ad un
provider anche ad un dataset field.
Per creare una relazione M/D con un solo provider bisogna mettere:
Prendiamo ad esempio il db employee.gdb
Componente Connection;
Componente Query --- qryMaster
qryMaster.sql.text := 'select * from employee'
Componente Query --- qryDetail
qryDetail.sql.text := " select * from EMPLOYEE_PROJECT where EMP_NO
=:EMP_NO"
/* La query di dettaglio DEVE avere un parametro che permette di stabilire
la relazione M/D
con la qryMaster.*/
Componente DataSource dsMaster
dsMaster.Dataset := qryMaster
qryDetail.datasource :=  dsMaster;
Componente DataSetProvider -- provider
provider.dataset := qryMaster;
Componente CDS --cdsMaster;
CdsMaster.ProderName := 'provider';
Componente CDS --cdsDetail;
CdsDetail.DataSetField := cdsMasterqryMaster; <-- se è tutto ok lo trovate
già nell'elenco.
In questo modo c'è un solo provider quindi una sola transazione e questo
discorso dei nesteddataset si può estendere
anche a più di 2 client dataset.
ciao
   Gabriele

 tabelle diverse?
http://www.geocities.com/andrealaforgia/myfiles/cdsmd.zip

 
Ok, non avendo ora quì con me il progetto e SQL SERVER forse non riuscirò a 
provarlo.
L'unico dubbio che ho è....: SIAMO SICURI CHE SI POSSA FARE CON TADOQUERY 
e SQLSERVER 2000?
Non è che bisogna impostare qualche proprietà particolare sul TADOQUERY?
Preciso che io non passo per BDE, tramite CONNECTION STRING vado
sparato sul RDBMS.
Grazie ancora...
Inviato da 
www.mynewsgate.net

 e SQLSERVER 2000?
Non usare le maiuscole, per cortesia.
Non c'entra nulla il DBMS specifico o il componente dataset specifico a cui
fai puntare il provider.

A
io  ho trovato questa struttura su un tutorial Borland
per le applicazioni DB su Kylix ma credo che sia la
stessa cosa :)
http://bdn.borland.com/article/images/28558/kylix_dbapps.pdf
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

ma come si crea un DataSetField ?
io ho creato uno nuovo field con type DataSet e con nome uguale al nome 
dell'oggetto Query_Detail.
Ma quando avvio il cds_master mi dice che non trova il field. 
Inviato da 
www.mynewsgate.net

> ma come si crea un DataSetField ?
Se tu guardassi l'esempio che ho scritto, lo sapresti.

ma se non l'avessi guardato come farei a sapere
del DataSetField?
solo, che non essendo state settate le proprietà degli oggetti da codice 
credo proprio di non accorgermi di qualcosa!
Pensavo che il post era chiaro, ma forse non era così!
Inviato da 
www.mynewsgate.net

 credo proprio di non accorgermi di qualcosa!
La proprietā DataSetField elenca tutti i componenti di tipo TDataSetField e
i componenti di questo tipo sono i campi persistenti di tipo, appunto,
TDataSetField.
I campi persistenti di questo tipo vengono creati in virtų della relazione
master/detail che esiste tra i TDataSet puntati dal TDataSetProvider.
Gabriele Santomaggio ha illustrato, in una parte del thread, come inserire i
componenti ed impostarne le proprietā.  Cerca il suo messaggio.

credo proprio di non accorgermi di qualcosa!
in un post precedente ti ho inviato il link ad un
tutorial Borland su come creare una struttura con
nested Dataset ... tempo fa ho seguito l'articolo alla
lettera (con VCL perņ) č non ho avuto problemi di
sorta.


chiarissimo, grazie mille a tutti 
coloro che hanno partecipato.....
Inviato da 
www.mynewsgate.net

Ciao a tutti,
volevo solo comunicarvi che sono riuscito ad impostare tutto da codice.
Ho creato un datamodulo standard con tutti gli oggetti che mi servono
per gestire il master&detail.
Imposto tutte le proprietà per il loro collegamento tranne il 
DataSetField del cdsDetail.
Dalla unit richiamante eseguo le seguenti operazioni :
1.aggiungo il testo sql alle 2 query (in quella di dettaglio aggiungo la 
where con paramento).
2.Creo a volo i fields sui cds (creando un field di tipo DataSetField 
sul master con nome 'qryDetail')
3.Attivo il cdsMaster
4.Imposto il DataSetField sul cdsDetail :
     cdsDetail.DataSetField := TDataSetField(cdsMaster.FieldByName
('qryDetail'))
5.Attivo il cdsDetail
ed il gioco è fatto.
Ragazzi tutto questo....grazie a voi.
Ciao 
Rino
Inviato da 
www.mynewsgate.net