Deux BD et plus [Résolu]

Signaler
Messages postés
52
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
30 juin 2010
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Slut,
J'ai développé une application qui gère les noms, adresse, numero indentifiant, montant HT, Montant TVA et montant TTC. Auparavant j'ai utilisé une seul table et j'ai réussi à filtrer un enregistrement donné et l'imprimer facilement.

Maintenant je dispose de deux tables:
Champ Table1
Nom, adresse, numero_identifiant

Champ Table2
Montant_HT, Montant_TVA, Montant_TTC, numero_identifiant

En remarque que numero_identifiant se trouve dans les deux Tables, c'est le Champ clé par lequel les deux Tables sont reliées.

J'ai écrit une requête SQL:
Select* from abonne (Table1), finance (Table2)
Where numero_identifiant abonne = numero_identifiant abonne

Quand je lance l'application les données se trouvent dans Table1 s'affiche par contre ceux de Table2 rien.

Voila la procedure que j'ai écrit pour une Tables:

// Pour filtrer un enregistrement.

procedure Tfrmhb.Button1Click(Sender: TObject);
begin
Tablehb.active := False;Tablehb.Filter :'numero_identifiant '+QuotedStr(reche.Text);
Tablehb.Filtered := True;
Tablehb.Active := True;
end;

// Pour impression

procedure Tfrmhb.Button2Click(Sender: TObject);
begin
QRab1.Query1.Close;
if reche.Text <> '' then
QRab1.query1.ParamByName('num_ab2').AsString := reche.Text
else
QRab1.query1.ParamByName('num_ab2').AsString := '%';
QRab1.query1.Open;
QRab1.print;
end;

end.

merci+++

8 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Ou il s'agit simplement d'une erreur de frappe ou bien la requête SQL est réellement incorrecte.
Au lieu de :
Select* from abonne (Table1), finance (Table2)
Where numero_identifiant abonne = numero_identifiant abonne


Ne serait-ce pas plutôt :
Select* from finance (Table2), abonne (Table1)
Where finance.numero_identifiant = abonne.numero_identifiant


Autre solution : relier Table2 à Table1 par sa propriété DataSource et utiliser les requêtes paramétrées :
Select * from finance where numero_identifiant = :numero_identifiant

Dans ce cas, la liaison entre les ensembles de données est automatique.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
Messages postés
36
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
24 octobre 2005

Il est a préférer un inner join (ou left join etc...) a :
Where finance.numero_identifiant = abonne.numero_identifiant
Messages postés
52
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
30 juin 2010

Salut Delphiprog.
Oui ça marche, mais comment faire quand ont cinq (5) Tables?

Merci de votre Aide.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Quelles sont les relations entre les cinq tables ?
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
lelahel08 : je suis d'accord avec toi mais comme slim59 ne précise pas quelle base de données il utilise et vu les restrictions du localSql, j'ai préféré donner une solution passe-partout.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
Messages postés
52
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
30 juin 2010

Slut,
Il s'agit des mêmes champs, seulement chaque Table relatif à un Mois donné.
C'est à dire:
Les données de Table2, concerne le Mois de Janvier, Table3 Fevrier, Table4 Mars, Table5 Avril, ces Tables affectes les renseignement cocernant les finances (Montants HT,TVA et TTC), ça veut dire que les Tables se diffèrent entre eux dans les par rapport aux Mois. S'agissant de Table1 que j'utilise pour les informations personnel de chaque enregistrement(Nom,Prénom...)

Donc, ce que je désir c'est de faire afficher les données des Champs de toutes les Tables à la fois.

Je m'excuse de ne pas avoir préciser au début le type de BD que j'utilise, c'est DBASE.

Merci de votre aide
:)
Messages postés
52
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
30 juin 2010

J'ai oublié de rajouter ce qui suit:

J'ai écrit cette requête pour 5 Tables

Select* from finance_janv (Table2), finance_fev (Table3), finance_mar (Table4), finance_avr (Table5),abonne (Table1)Where finance_janv.numero_identifiant abonne.numero_identifiant and finance_fev.numero_identifiant abonne.numero_identifiant and finance_mar.numero_identifiant = abonne.numero_identifiant and finance_avrv.numero_identifiant = abonne.numero_identifiant

mais ça na pas marché.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Euh...pourquoi un tel découpage (une table pour chaque mois) ?

Ca complique les traitements et ça ralentit toutes les opérations et...tu te retrouves maintenant dans une voie peut-être sans issue ou du moins grandement complexifiée. DBase est largement capable de gérer plusieurs millions d'enregistrements par table.

Je suis désolé, mais soit tu revois ton analyse et l'organisation de tes données, soit tu demandes du secours à quelqu'un d'autre. Là, ça devient ingérable.
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you