Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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

Le : 17/04/2007 16:05:54
Source : UN EXEMPLE DE PROGRAMME UTILISANT UNE BASE DE DONNÉES : UTILISATION DU SQL COMBINÉ AVEC UNE RELATION MAITRE-DETAIL
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;


Le : 16/02/2005 15:11:54
Source : REQUETE DE TEXTE INTEGRAL AVEC MYSQL
source inaccessible
Titre peu precis
Commentaire incomprehensible
...


Le : 14/11/2004 17:03:01
Source : 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


Le : 31/10/2004 22:53:12
Source : 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


Le : 07/09/2004 12:25:29
Source : ABALONE - PROJET UNIVERSITÉ DE NICE SOPHIA ANTIPOLIS - PRINTEMPS 2004
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



1


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.