begin process at 2010 03 21 11:25:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > UN EXEMPLE DE PROGRAMME UTILISANT UNE BASE DE DONNÉES : UTILISATION DU SQL COMBINÉ AVEC UNE RELATION MAITRE-DETAIL

UN EXEMPLE DE PROGRAMME UTILISANT UNE BASE DE DONNÉES : UTILISATION DU SQL COMBINÉ AVEC UNE RELATION MAITRE-DETAIL


 Information sur la source

Note :
Aucune note
Catégorie :Base de Donnees Classé sous :tquery, relation Niveau :Débutant Date de création :11/04/2007 Vu / téléchargé :12 032 / 5 196

Auteur : jraine

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

cet exemple met en évidence la puissance du langage SQL pour simuler une
relation maitre/détail
- utilisation simultannée des controls non orientés données et orientés données
- utilisation de la propriété TabWidth d'un TlistBox
- utilisation d'un module de données
- utilisation de la propriété Align des TPanels
- utilisation de l'alias DBDEMOS livré en standard avec Delphi
- Cet exemple a été écris avec D5 entreprise il utilise les controls standards se compile très bien avec D7

-  suite possible :
  utilisation des propriétés Filter, Filtered d'une TTable
  le fonctionnement étant très similaire vous pouvez le mettre en oeuvre en d'exercice.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture VIDÉOTHÈQUE V1.0.0 par Christophe67
Source avec Zip Source avec une capture ANNUAIRE V1.0.0 par Christophe67
Source avec Zip INTERBASE FIREBIRD IBEXPERT par opgiat
Source avec Zip CREE ALIAS AUTOMATIQUEMENT CREATION REPERTOIRE ET TABLE AUSI par opgiat
Source avec Zip CRÉE UN RÉPERTOIRE ET CRÉE CES TABLES PAR PROGRAMME par opgiat

 Sources en rapport avec celle ci

Source avec Zip ENERGIE SOLAIRE AVEC TQUERY par yvessimon

Commentaires et avis

Commentaire de fmicros le 17/04/2007 16:05:54

Ca fait plaisir de voir du code propre, bien documenté, pour une élégante solution.
Si on veut faciliter la lecture du code:
-      // comment procedure et bloc de code
- repousser les begin end en fin de ligne
- faire des if ... then exit pour les cas limites
- ne pas renommer les objets Table1 DBGrid1 ...
  ça évite le dépaysement.
- utiliser Tab pour les répétitions
- po de prise de tet ecriture fonétik trankil moi j fé gaf a laure tograf; Po de je, nous, on ..
- regrouper tout ce qui concerne un objet comme par ex l'initialisation et le OnChange d'un ComboBox.

A titre d'exemle j'ai fait qqes transformations du code, j'attends vos comments avec plaisir.


//******************************************************************************
//* SQL pour simuler une relation maître/détail
//*
//* - Fichier|Nouveau|Module de données|Name|'DM'
//* Database1|DatabaseName='DBDEMOS' (alias livré avec Delphi)
//*     Table1|TableName='employee.db' DataSource1|DataSet='Table1' ListBox1
//*     Query2|SQL='SELECT * FROM orders DataSource2|DataSet='Query2'   DBGrid2
//*         WHERE EmpNo = :NoEmp
//*         ORDER BY AmountPaid DESC'
//*           (:NoEmp prendra la valeur de Query2.ParamByname('NoEmp').Value)
//*     Table3|TableName='items.db'       DataSource3|DataSet='Table3' DBGrid3
//*           |MasterSource='DataSource2'
//*           |MasterFields|OrderNO -> OrderNO
//* - ComboBox1|OnChange sélectionne un champ Employee
//* - ListBox1  reçoit la liste du champ Employee
//* - DBGrid2 Orders   Query SQL reçoit en paramétre l'employé sélectionné
//* - TDBGrid Items    Table détail  reçoit OrderNo du maître Orders
//*
//* - ToolBar avec Images
//* - Align des TPanels
//* - TabWidth d'un TlistBox
//* Remarques et commentaires à : julienraine@laetjr.com
//* Suite: utiliser Filter, Filtered d'une TTable
//******************************************************************************



//******************************************************************************
//* MainFrm OnShow
//******************************************************************************
procedure TMainFrm.FormShow(Sender: TObject); begin
  ComboBox1Change(nil);   // exécute le chargement de la liste
  ListBox1.TabWidth := 80;   // Tab ou #9  saut de ... caratères, incertain
  end;

//******************************************************************************
//* ComboBox OnChange
//* ComboBox liste les champs Employee
//* ListBox  chargement des valeurs en fonction du champ sélectionné
//* simule une relation maitre/détail avec N° d'employé comme champ commun
//******************************************************************************
procedure TMainFrm.ComboBox1Change(Sender: TObject);
  var i: integer; begin
   // Combobox1 liste les champs Employee
  if ComboBox1.Items.Count=0 then
    with ComboBox1.Items, DM.Table1 do begin
      Clear;
      if not Active then open;
      for i:=1 to FieldCount-1 do // 0 = N° de l'employé
        Add( Fields[i].FieldName);
      ComboBox1.ItemIndex := 0; end; // LastName par defaut
// Champ sélectionné
  i := ComboBox1.ItemIndex; if i<0 then exit;
   // ListBox1 liste extraite de la table Employee
  with DM.Table1, ListBox1.Items do begin
    Clear;
    if not Active then open;
    First;
    while not eof do begin
      Add( FieldByName( ComboBox1.Items[i]).AsString + #9+
           FieldByName('EmpNo'            ).AsString );
      Next; end; end;
  ListBox1.ItemIndex := 0; // par defaut, sélection 1er de la liste
  ListBox1.SetFocus;           //
  ListBox1Click(nil);           // exécute la relation maître/détail
  end;

//******************************************************************************
//* ExtractNum( Nom + tab + N°) -->  N°  ou  code d'erreur -1
//******************************************************************************
function TMainFrm.ExtractNum(s: string): integer;
  var x: string; begin
  Result := -1;
  if pos(#9,s)=0 then exit;
  x := Copy( s, pos(#9,s)+1, length(s));
  try
    Result := StrToInt(x);
  except
    Result := -1;
  end;
  end;

//******************************************************************************
//* ListBox OnClick
//* Affiche les commandes en fonction du N° de l'employé
//* simule une relation maitre/détail avec le N° de l'employé en commun
//******************************************************************************
procedure TMainFrm.ListBox1Click(Sender: TObject);
  var n: integer; begin
   // n° employé sélectionné dans ListBox
  n := ListBox1.ItemIndex;
  if n>-1 then
      n := ExtractNum( ListBox1.Items[n]);
  if n=-1 then exit;
   // passe le n° au paramétre SQL et exécute
  with DM.Query2 do begin
    Close;
    ParamByname('NoEmp').Value := n;
    Open; end;
     // s'assure que détail est dans le meme etat que maître
  DM.Table3.Active := DM.Query2.Active;
  end;

//******************************************************************************
//* ToolBar Buttons
//******************************************************************************
procedure TMainFrm.TbCloseClick(Sender: TObject); begin
  close;
  end;
procedure TMainFrm.TbGaucheClick(Sender: TObject); begin
  Pagauche.Align := alLeft;
  end;
procedure TMainFrm.TbDroiteClick(Sender: TObject); begin
  Pagauche.Align := alRight;
  end;

Commentaire de fatehkap le 11/11/2007 23:11:10

mois je veut seulement un code source pour la date et comment decomposser les colones de dbgrid et comment fair deux lignes sur une colone merci de me repondre sur mon adresse fateh.kap30@hotmail.com

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Sql et Bdd [ par viper ] Je cherche depuis qq temps à récupérer le resultat d'une requet SQL avec un TQuery et une base de donnée mais sans succès...J'aimerais donc savoir com Tri de données d'un Tquery [ par DeadSoul ] Salut à tous,Mon problème : Comment trier des données d'un TQuery présentées à l'aide d'un DBGrid. Sur base d'une ou plusieurs colonnes.Souhait ; je n requete SQL parametrée pour un tri.... [ par juan ] bjour tousje cherche à faire une requête paramétrée dans un TQuery du genre:SELECT * FROM MaBase WHERE (mes conditions)ORDER BY :MonIndexmais apparemm Nombre max d'enregistrements que peut supporter un TQuery [ par lirva ] Bonjour,Combien d'enregistrements au maximum peut contenir un objet TQuery ?Comment gérer une requête sur une "grosse table" ?(J'ai une limitation à 7 assignation dynamique d'une bde à un TQuery [ par usmok ] J'ai une application qui doit gérer plusieurs bases de données et j'aimerai donc pouvoir assigner dynamiquement à mon TQuery la bde à utiliserle chemi TQUERY LOGIN ??? [ par w38 ] Bonjour,JE souhaiterais me connecter à une Tquery sans qu'il y est la fenêtre de connexion, c'està dire le login, comment puis-je le zapper ?MERCICord TQuery et violation de cle [ par jonath ] bonjour, j'ai un probleme suite à l'execution d'une requete sql : des que je ferme une fenetre du prog, une erreur violation de cle apparait et fait b Tquery & DBCombobox [ par VashTheStampede ] Comment recupere-t-on le resultat d une Tquery dans une DBCombobox?La requete ressemble a :select distinct artistenom from artisteJe voudrais que ces Trier un TQuery et Ecrire dedans en même temps [ par wilouches ] Voilà j'ai besoin de trié une liste sur deux tables.Jusque là pas de prob, j'utilise un query avec la fonction SQL ORDER BY Mon_champMais je ne peux p TQuery et thread [ par Fandril ] Est ce que quelqu un a deja mis un TQuery (pour executer requete SQL select sur Paradox) dans un thread...Car ca marche mais ca met 10 secondes pour


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales