2010-06-25 35 views
1

J'ai une ADOQuery1 qui est ma table principale et maintenant je veux utiliser une autre ADOQuery2 pour ma table de détail mais vraiment je ne trouve pas la bonne manière de travailler la solucion.fonctionne avec ADOQuery1 & ADOQuery2

ADOQuery1 NR- Autonum nom locale quant. ADOQuery2 Nro _ Autonum Nom
l1 l2
l3

peut aider quelqu'un thank's

Répondre

1

Pour AdoQuery, vous devez utiliser la propriété DataSource. Voici ce que vous devez faire:

1- Déposez une requête AdoQuery sur le formulaire en tant qu'ensemble de données maître et écrivez la requête à l'aide de sa propriété SQL.

2- déposez un composant de source de données sur la forme, et le connecter au maître AdoQuery vous créé dans l'étape 1.

3- Déposer une autre AdoQuery sur la forme que l'ensemble de données détail.

4- Définissez la propriété DataSource de votre jeu de données détaillé sur la source de données connectée à l'ensemble de données maître (reportez-vous à l'étape 2).

5- Écrivez la requête SQL pour votre jeu de données de détail , en utilisant sa propriété SQL; Dans la requête, vous devriez avoir une clause WHERE qui filtre votre ensemble de données détaillées en utilisant un paramètre qui a le même nom que l'un des champs de la source de données principale. Par exemple, supposons que vous ayez un champ ID dans votre ensemble de données maître et un champ appelé MasterID dans votre ensemble de données détaillé qui est une clé étrangère pour le champ ID de l'ensemble de données maître. Maintenant, pour connecter l'ensemble de données de détail à celui de maître, l'utilisation de ces champs, vous pouvez écrire une requête pour l'ensemble de données de détail comme celui-ci:

SELECT * FROM DetailTable WHERE MasterID = :ID 

Comme vous pouvez le voir, nous avons un paramètre SQL nommé ID, qui a même nom que le champ ID dans la source de données principale. Désormais, chaque fois que vous parcourez des enregistrements dans la source de données principale, Delphi récupère automatiquement la valeur du champ ID et l'utilise comme valeur du paramètre ID dans l'ensemble de données de détail, et réinterroge l'ensemble de données de détail. Vous n'avez pas besoin de définir la valeur du paramètre et requery explicitement. Cela sera fait automatiquement pour vous. J'espère que cela vous clarifiera la façon de créer une relation maître-détail à l'aide des jeux de données AdoQuery.

Cordialement

0

J'ai quelques composants qui automatisent, mais lorsque vous utilisez la TADOQuery brute, voici comment Je le mettre en œuvre:

Sur événement Maître TADOQuery.AfterScroll faire ceci:

myDetailQuery.Active := False; 
myDetailQuery.Params.ParamByName('ID').Value := DataSet.FieldsByName('ID').AsString; 
myDetailQuery.Active := True; 

La requête pour Détail TADOQuery ressemble à ceci:

SELECT * FROM DetailTable 
WHERE ID = :ID; 

S'il y a une meilleure façon, j'aimerais le voir aussi.

TADOTable a cette fonctionnalité intégrée, donc vous pourriez envisager d'utiliser cela à la place. Définissez TADOTable.MasterSource. Il y a plus d'informations sur cette propriété dans l'aide Delphi.

+0

merci beaucoup.je vous remercie beaucoup –