Deux BD et plus

Résolu
cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010 - 23 oct. 2004 à 12:14
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 6 nov. 2004 à 11:16
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

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
23 oct. 2004 à 13:42
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
3
lelahel08 Messages postés 36 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 24 octobre 2005
23 oct. 2004 à 14:17
Il est a préférer un inner join (ou left join etc...) a :
Where finance.numero_identifiant = abonne.numero_identifiant
3
cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010
24 oct. 2004 à 14:24
Salut Delphiprog.
Oui ça marche, mais comment faire quand ont cinq (5) Tables?

Merci de votre Aide.
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 oct. 2004 à 14:57
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 oct. 2004 à 10:41
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
0
cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010
25 oct. 2004 à 14:13
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
:)
0
cs_slim59 Messages postés 52 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 30 juin 2010
26 oct. 2004 à 10:30
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é.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
6 nov. 2004 à 11:16
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
0
Rejoignez-nous