delphi4arab منتديات دلفي للعرب
كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية (/showthread.php?tid=8360)



كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - hamoudi075teq - 13-01-2017

اشتغل على برنامج لتسيير المرضى المنهوشين من طرف الحيوانات و واجهت مشكلة تتمثل في:
كيفية إحصاء عدد المرضى حسب البلدية و مجال السن و الجنس في نفس الجدول حيث أن قاعدة البيانات تحتوي على جدول واحد و هو malade (N°, nom&prénom,age,commune,date_accident,sexe)
أرجو من من عنده الحل ياعدني، و شكرا


RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - ALKO - 16-01-2017

السلام عليكم
للأسف لا يمكنك فعل ذلك بواسطة جدول واحد؟
ذلك ﻷمرين
اﻷول بشري و يتمثل في امكانية الخطأ أي لو كان اسم البلدية تيارت
و قمت أنت بكتابة مرة تيارت و أخرة تيرت و تيرة و....
حتى لو كان الامر غير متعمد فسيكون المشكل أن كل
اسم سوف يدل على بلدية مستقلة.
و مذا لو كان اسم البلدية متكرر في عدة ولايات ألن يكون خلط؟
اﻷمر الثاني علمي
المشكل هنا أولا في خلط الحقول داخل الجدول
أي جدول المرضى فيه البلدية و الحيوان و هما ليسا من نفس الجنس
المشكل الثاني التكرار أي لو كان لديك 1000 مريض من نفس البلدية و عضهم كلهم
كلب. لكن ليس نفس الكلب فكيف تفرق بين الكلاب ؟
على غرار أنك تعيد كتابة كلمة كلب و اسم البلدية 1000 مرة
و هذا هدر للذاكرة و ينافي القواعد العلمية لقواعد البيانات العلائقية
الحل
يلزمك ثلاثة جداول المرضى و البلديات و الحيوانات
و يكون اﻷمر جد سهل بواسطة استعلام بسيط
لكن لمذا البلديات فقط ؟ فليكن الولايات ثم الدوائر ثم البلديات
و يكون برنامجك صالح لكل ولايات الوطن
و ان أضفت البلدان سيكون برنامجك صالح لكل بلدان العالم؟
ان كانت كل بلدان العالم تتبع نفس التقسيم أي ولاية... دائرة... بلدية
Big Grin


RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - sabre - 16-01-2017

بارك الله فيك

شرح رائع ومفصل


RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - hamoudi075teq - 21-01-2017

(16-01-2017, 11:57 AM)ALKO كتب : السلام عليكم
بارك الله فيك
و لكني استعملت في البرنامج عناصر combo لتفادي هذه المشاكل فنوع الحيوان جعلت له combo ليختار الحيوان، و مثله للبلدية فيختارها و يتنقا إلى نافذة لكل منهما لإظافته إن كان غير موجود (البلدية أو الحيوان) و ذلك أيضا للجنس فيختار بين F أو M.
أي أن إحتمالية التكرار تكون صفر
 وشكرا



RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - ALKO - 22-01-2017

السلام عليكم
قم بارفاق قاعدة البيانات أو الجداول
و ان أمكن صورة للبرنامج
و سوف نبحث عن حل برمجي ان شاء الله


RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - sabre - 22-01-2017

بسم الله الرحمن الرحيم
الصلاة السلام على رسول الله  أخي   hamoudi075teq  أحببت أن أقوم ببعض على المثال السابقعسى أن أنال من أجرك الذي تقوم بهالى هولاء المرضى الذين تحصيهم وأتمنى لك توفيق 

PHP كود :
Projet Nom = malades
Alias nom 
= malad
C
:\malade 


هذا المثال تصورته حسب موضوعك الاول

----------------------------
 اسم الوحدة الاولى
----------------------------


PHP كود :
Nom de fichier = Unit1.pas 


كود :
unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons; type  TForm1 = class(TForm)    BitBtn1: TBitBtn;    BitBtn2: TBitBtn;    procedure BitBtn1Click(Sender: TObject);  private  public  end; var  Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject); begin Form2.Show; end; end.



---------------------------------
 اسم الوحدة الثانية
---------------------------------


Nom de fichier = Unit2.pas


كود :
unit Unit2; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, DB, DBTables, StdCtrls,  Buttons, ComCtrls; type  TForm2 = class(TForm)    Table1: TTable;    DataSource1: TDataSource;    BitBtn1: TBitBtn;    Table1N: TFloatField;    Table1Nom_prenom: TStringField;    Table1Age: TStringField;    Table1Commune: TStringField;    Table1Date_accident: TDateField;    Table1Sexe: TStringField;    Edit1: TEdit;    BitBtn2: TBitBtn;    Edit2: TEdit;    BitBtn3: TBitBtn;    DBNavigator1: TDBNavigator;    DBGrid1: TDBGrid;    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    BitBtn4: TBitBtn;    BitBtn5: TBitBtn;    Edit4: TEdit;    Edit5: TEdit;    Edit6: TEdit;    Edit7: TEdit;    BitBtn6: TBitBtn;    Label4: TLabel;    Label5: TLabel;    Label6: TLabel;    Label7: TLabel;    DateTimePicker1: TDateTimePicker;    ComboBox1: TComboBox;    Label8: TLabel;    Label9: TLabel;    ComboBox2: TComboBox;    BatchMove1: TBatchMove;    Table2: TTable;    SaveDialog1: TSaveDialog;    Button1: TButton;    OpenDialog1: TOpenDialog;    Button2: TButton;    Table4: TTable;    DBNavigator2: TDBNavigator;    procedure BitBtn1Click(Sender: TObject);    procedure Edit1Change(Sender: TObject);    procedure Edit3Change(Sender: TObject);    procedure Edit2Change(Sender: TObject);    procedure BitBtn2Click(Sender: TObject);    procedure BitBtn3Click(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure BitBtn4Click(Sender: TObject);    procedure BitBtn6Click(Sender: TObject);    procedure Edit4Change(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure FormActivate(Sender: TObject);  private  public  end;  procedure TForm2FormActivates(path: string);   var  Form2: TForm2; implementation {$R *.dfm} procedure TForm2.BitBtn1Click(Sender: TObject); begin Table1.First; Table1.Filter := 'Commune='+chr(39)+Edit1.Text+chr(39); Table1.Filtered := true; end; procedure TForm2.Edit1Change(Sender: TObject); begin BitBtn1.Enabled:=true end; procedure TForm2.Edit3Change(Sender: TObject); begin BitBtn3.Enabled:=true end; procedure TForm2.Edit2Change(Sender: TObject); begin BitBtn2.Enabled:=true end; procedure TForm2.BitBtn2Click(Sender: TObject); begin Table1.First; Table1.Filter := 'Age='+chr(39)+Edit2.Text+chr(39); Table1.Filtered := true; end; procedure TForm2.BitBtn3Click(Sender: TObject); var s: string; begin if ComboBox2.Text = 'ذكر' then s := '1'  else s := '0'; Table1.First; Table1.Filter := 'Sexe='+chr(39)+s+chr(39); Table1.Filtered := true; end; procedure enregistrements; begin   Form2.Table2.TableName := 'C:\malade\hamoudi075teq.db';   Form2.BatchMove1.Source :=Form2.Table1;   Form2.BatchMove1.Destination := Form2.Table2;   Form2.BatchMove1.Mode :=batCopy;   Form2.BatchMove1.Execute; { } end; procedure TForm2.FormCreate(Sender: TObject); function LoadFile(NomFichier: string): string; var MeList:TStringList; begin MeList:=TStringList.Create; try  MeList.Clear;  MeList.LoadFromFile(NomFichier);  Result:=MeList.Strings[0]; finally   MeList.Free;  end; end; begin  if not DirectoryExists('C:\malade') then   CreateDir('C:\malade'); Table1.Close; if FileExists('ttf')then begin  Table1.DatabaseName:=LoadFile('ttf');  Table1.TableType := ttParadox;  Table1.TableName := 'hamoudi075teq.db';  Table1.Open; end else begin try  Table1.DatabaseName:='malad';  Table1.TableType := ttParadox;  Table1.TableName := 'hamoudi075teq.db';  Table1.Open; except  on EDatabaseError do begin   Table1.DatabaseName:=ExtractFilepath(application.ExeName);   Table1.TableType := ttParadox;   Table1.TableName := 'hamoudi075teq.db';   Table1.Open; end; end; end; if (DirectoryExists('C:\malade'))and    (not FileExists('C:\malade\hamoudi075teq.db')) then   enregistrements; end; procedure TForm2.BitBtn4Click(Sender: TObject); begin  Table1.Filtered := false; end; procedure TForm2.BitBtn6Click(Sender: TObject); begin  if Table1.Filtered then Table1.Filtered := false;  Table1.Last;  Table1.Append;  Table1.FieldByName('N').AsString := Edit4.Text;  Table1.FieldByName('Nom_prenom').AsString := Edit5.Text;  Table1.FieldByName('Age').AsString := Edit6.Text;  Table1.FieldByName('Commune').AsString := Edit7.Text;  Table1.FieldByName('Date_accident').AsDateTime := DateTimePicker1.Date;  if ComboBox1.Text = 'ذكر' then    Table1.FieldByName('Sexe').AsString := '1'  else if ComboBox1.Text = 'أنثى' then  Table1.FieldByName('Sexe').AsString := '0'  else ;  Table1.Post;  BitBtn6.Enabled := false; end; procedure TForm2.Edit4Change(Sender: TObject); begin BitBtn6.Enabled := true; end; procedure TForm2.Button1Click(Sender: TObject); var F:TextFile; s: string; begin if OpenDialog1.Execute then begin AssignFile(F,ExtractFilepath(application.ExeName)+'ttf.txt'); Rewrite(F); s := ExtractFileDir(OpenDialog1.FileName); write(F,s); CloseFile(F); TForm2FormActivates(s); end; end; procedure TForm2.Button2Click(Sender: TObject); var F:TextFile; s: string; begin SaveDialog1.FileName := Table1.TableName; if SaveDialog1.Execute then begin    Table2.TableName := SaveDialog1.FileName;  BatchMove1.Source := Table1;  BatchMove1.Destination := Table2;  BatchMove1.Mode := batCopy;  BatchMove1.Execute;  AssignFile(F,ExtractFilepath(application.ExeName)+'ttf.txt');  Rewrite(F);  s := ExtractFileDir(SaveDialog1.FileName);  write(F,s);  CloseFile(F);  TForm2FormActivates(s); end; end; procedure TForm2FormActivates(path: string); const DbiP='malad'; var  AParam: TStringList; begin  AParam := TStringList.Create;  try    AParam.Clear;    AParam.Add('PATH='+path); //+GetCurrentDir    if Session.IsAlias(DbiP) then         Session.ModifyAlias(DbiP, AParam)    else     Session.AddStandardAlias(Dbip,GetCurrentDir,'Paradox');    Session.SaveConfigFile;  Finally    AParam.Free;  end; end; procedure TForm2.FormActivate(Sender: TObject); begin TForm2FormActivates('C:\malade'); end; end.



RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - sabre - 23-01-2017

أسف نسيت أن أضع ملف قاعدة البيانات
مع ملفات المشروع

يجب تحميل المرفق الاول  malade
والمرفق الثاني  hamoudi075teq

  hamoudi075teq.rar    ملف قاعدة البيانات
 malade.rar   ملفات المشروع

وقكهما في نفس المجلد


RE: كيفية احصاء عدد المرضى حسب مجال السن و الجنس و البلدية - hamoudi075teq - 30-01-2017

(22-01-2017, 05:33 PM)ALKO كتب : السلام عليكم
هذه صور لقاعدة البيانات و الجدول المطلوب منا انشائه في البرنامج