begin process at 2012 02 11 18:40:01
  Trouver un code source :
 
dans
 

5 commentaire(s) de fmicros sur des sources sur tout CodeS-SourceS

Déposé sur Un exemple de programme utilisant une base de données : utili...

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;
Posté le : 17/04/2007 16:05:54

Déposé sur Requete de texte integral avec mysql

source inaccessible
Titre peu precis
Commentaire incomprehensible
...
Posté le : 16/02/2005 15:11:54

Déposé sur Diaporama d'images jpeg, bitmaps et icônes.

1 erreur d execution : tbbutton n'existe pas il a l air pourtant ds la liste
2 ca fait quoi ce programme ?
3 peu de comment ds les programmes qui ont l air interesants

dommage je fatigue
Posté le : 14/11/2004 17:03:01

Déposé sur Création d'indexes à la volée

  GetIndexNames(IndexList);
  CreatedIndexList.Assign(IndexList);
les deux listes sont identiques et
si tu effaces CreatedIndex , ceux d'avant y passent aussi
Posté le : 31/10/2004 22:53:12

Déposé sur Abalone - projet université de nice sophia antipolis - printe...

inutile d'ajouter du code si on doit perdre son temps a comprendre de quoi il s agit et bosser quelques heures juste pour voir !
se mettre a la place du lecteur !!!!

consequence : je ne lit pas
Posté le : 07/09/2004 12:25:29

1


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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,218 sec (4)

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