Domanda

È possibile inserire i risultati di più di una query su più di una tabella in un TClientDataset?

Solo qualcosa del genere

SELECT * from t1;
SELECT * from t2;
SELECT * from t3;

Non riesco a capire un modo per convincere un fornitore di dati (SetProvider) a ottenere risultati da più di una tabella alla volta.

È stato utile?

Soluzione

Non esiste un modo per avere più dati di tabella nello stesso TClientDataSet a cui si fa riferimento. TClientDataSet contiene un singolo cursore per un singolo set di dati.

Altri suggerimenti

ClientDatasets può contenere campi che sono essi stessi altri set di dati. Quindi, se si desidera creare tre tabelle in un singolo set di dati, creare tre ClientDataset che contengono i tre set di risultati desiderati, quindi è possibile inserirli in un singolo ClientDataSet .

Questo articolo:

http://dn.codegear.com/article/29001

ti mostra come farlo sia in fase di esecuzione che in fase di progettazione. Prestare particolare attenzione alla sezione intitolata:

" Creazione di una struttura ClientDataSet in fase di esecuzione utilizzando TFields "

L'unico modo sarebbe quello di unire i tavoli. Ma poi devi fornire i criteri del join tramite chiavi esterne unite.

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;

Ora supponiamo che ti sia venuta in mente una chiave (come LineNr) che consenta tale join. È quindi possibile utilizzare un join esterno completo per includere tutti i record (importante se non tutte le tabelle hanno lo stesso numero di righe). Ma questo sarebbe in qualche modo un trucco. Assicurati di non prendere auto_number per la chiave, poiché non riutilizza le chiavi e quindi tende a lasciare buchi nella numerazione, risultando in molte righe riempite solo parzialmente di valori.

Se si desidera popolare un clientdataset da più tabelle con lo stesso set di campi, è possibile utilizzare l'operatore UNION per farlo. Questo utilizzerà solo le stesse colonne e combinerà tutte le righe in una tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top