برنامج بدلفي شبه متقدم وقاعدة البيانات بارادوكس

اذهب الى الأسفل

برنامج بدلفي شبه متقدم وقاعدة البيانات بارادوكس

مُساهمة  ali1 في 19/5/2018, 3:30 pm


بسم الله الرحمن الرحيم
الصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

برنامج بدلفي شبه متقدم وقاعدة البيانات بارادوكس

هذا برنامج بالدلفي وقاعدة البيانات من نوع بارادوكس

ماذا يفعل هذا البرنامج؟
1 ينشئ ملفان تلقائيا الاول من أجل أن نقوم بحفظ معلومات عن شخص، وكل سنة ينشئ ملف جديد
الثاني يحفظ فيه السنوات مثلا لو أردنا أن نرجع من السنة الحالية الى السنة السابقة

2 ملف معلومات شخص هو متكون مثلا من رقم التسجيل والاسم والتاريخ
التسجيل: نكتب رقم والاسم و التاريخ ونضغط فوق Add من أجل حفظ المعلومات
البحث: نكتب الاسم ونضغط فوق بحث أو ننقر مرتين في الشبكة فوق الاسم المراد
التعديل: نبحث ثم نعدل في مربعات النص ونضغط فوق تعديل

ملا حظة: تستطيع ان تزيد في عدد الحقول حسبما تشاء بكل سهولة
هذه المهام التي يقوم بها البرنامج


واجهة البرنامج متكونة من 3 مربعات نص من نوع TEdit
و 5 لافتة من نوع TLabel و مربع من نوع TDateTimePicker
و مربع ذو قائمة من نوع TDBLookupComboBox
و 4 ازرار من نوع TBitBtn و الشبكة من نوع TDBGrid

ونافذة غير مرئية اثناء التنفيذ من نوع TDataModule1 وضعت فيها
2 من نوع TTable و 2 TDataSource

من الناحية البرمجية
البرنامج يعطي فكرة عن البرمجة الموجهة بالكائنات
أنشأت في الوحدة unt_data1 تسجيلة record سميتها TPersonRec
تضم الرقم وللاسم التاريخ

وفئة class وسميتها TPerson المنهج أو الاجراء الذي ينفذ أولا Create
يلقي تنشيط Table1 و Table2 تهيئتهما من أجل اعطى القيم ك لاليا ونوع قاعدة البيانات
اذا كان الملف قاعدة البيانات غير موجود سيقوم بانشائه واذا كان لا سيتعامل مع الملف الموجود

المنهج CreateTables ينشئ اولا ملف يحمل اسم السنة الحالية وثانيا ملف Year1 يخزن فيه ملف اسم السنة الحالية

المنهج أو الدالة AddFunc تسند القيم حسب الترتيب النوع أي كل حقل من حقول الجدولTable1
يخذ الحقل الذي يتناسب معه في نوع من حقول التسجيلة

المنهج AddToTabe يجعل Table1 يأشر على آخر سجل و بالامر Last و يفتح سجل جديد بالامر Append
ثم يستدعي الدالة AddFunc وفي الأخير يتم قفل السجل بالامر Post

المنهج destroy نستطيع الاستغناء عنه لأن موجود في class
المنهج FindTable في ملف قاعدة البيانات وجلب القيمة ان وجدت وجعلها في التسجيلة PRec

المنهج Modify و يعدل سجل بالامر Edit
ثم يستدعي الدالة AddFunc وفي الأخير يتم قفل السجل بالامر Post

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]


_________________
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

ali1
مبرمج مجتهد

عدد المساهمات : 861
تاريخ التسجيل : 29/07/2013

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: برنامج بدلفي شبه متقدم وقاعدة البيانات بارادوكس

مُساهمة  ali1 في 19/5/2018, 3:36 pm

ملف الوحدة unt_data1

الكود:

unit unt_data1;

interface

uses
  SysUtils, Classes, DB, DBTables, Controls;

type
  TPersonRec = record
    Num: integer;
    Nom: string[20];
    DateE: TDate;
  end;

  TPerson = class
  private
    procedure CreateTables;
    function AddFunc(PRec: TPersonRec): TPersonRec;   
  public
    constructor create(ATableName: string);
    destructor destroy; override;
    procedure AddToTabe(PRec: TPersonRec);
    procedure Modify(PRec: TPersonRec);
    procedure FindTable(search: string; var PRec: TPersonRec);
  end;

  TDataModule1 = class(TDataModule)
    Table1: TTable;
    DataSource1: TDataSource;
    Table2: TTable;
    DataSource2: TDataSource;
  private
  public
  end;

const NomTab = 'Year1.DB';
      dbas = '';
var
  DataModule1: TDataModule1;
 

implementation

{$R *.dfm}

{ TPerson }

function TPerson.AddFunc(PRec: TPersonRec): TPersonRec;
begin
 with DataModule1 do
 begin
  Table1.FieldByName('Num').AsInteger := PRec.Num;
  Table1.FieldByName('Nom').AsString := PRec.Nom;
  Table1.FieldByName('DateE').AsDateTime := PRec.DateE;
 end;
 Result := PRec;
end;

procedure TPerson.AddToTabe(PRec: TPersonRec);
begin
 with DataModule1 do
 begin
  Table1.Last;
  Table1.Append;
  AddFunc(PRec);
  Table1.Post;
 end;
end;

constructor TPerson.create(ATableName: string);
begin
 with DataModule1 do
 begin
  Table1.Active := False;
  Table2.Active := False;
  Table1.DatabaseName := dbas;
  Table1.TableType := ttParadox;
  Table2.DatabaseName := dbas;
  Table2.TableType := ttParadox;
  if not FileExists(ATableName)then CreateTables
  else begin
    Table1.TableName := ATableName;
    Table1.Open;
    Table2.TableName := NomTab;
    Table2.Open;
  end;
 end;
end;

procedure TPerson.CreateTables;
var s1: string;
begin
 with DataModule1.Table1 do
 begin
  s1 := FormatDateTime('"data"yyyy',Now);
  TableName := s1;
  if not Exists then
  begin
  with FieldDefs do
  begin
      Clear;
      with AddFieldDef do
      begin
        Name := 'Num';
        DataType := ftInteger;
        Required := True;
      end;
      with AddFieldDef do
      begin
        Name := 'Nom';
        DataType := ftString;
        Size := 20;
      end;
      with AddFieldDef do
      begin
        Name := 'DateE';
        DataType := ftDate;
      end;
  end;
  CreateTable;
  end;
  Open;
 end;

 if not FileExists(NomTab)then
 begin
  with DataModule1.Table2 do
  begin
  TableName := NomTab;
  if not Exists then
  begin
    with FieldDefs do
    begin
      Clear;
      with AddFieldDef do
      begin
        Name := 'Nom';
        DataType := ftString;
        Size := 20;
      end;
    end;
    CreateTable;
  end;
 end;
 end;
 with DataModule1 do
 begin
  Table2.TableName := NomTab;
  Table2.Open;
  Table2.Last;
  Table2.Append;
  Table2.FieldByName('Nom').AsString := s1;
  Table2.Post;
 end;
end;

destructor TPerson.destroy;
begin
 with DataModule1 do
 begin
  Table1.TableName := '';
  Table1.Close;
 end;
  inherited destroy;
end;

procedure TPerson.FindTable(search: string; var PRec: TPersonRec);
begin
 with DataModule1 do
 begin
  Table1.Locate('Nom',search,[]);
  PRec.Num := Table1.FieldByName('Num').AsInteger;
  PRec.Nom := Table1.FieldByName('Nom').AsString;
  PRec.DateE := Table1.FieldByName('DateE').AsDateTime;
 end;
end;

procedure TPerson.Modify(PRec: TPersonRec);
begin
 with DataModule1 do
 begin
  Table1.Edit;
  AddFunc(PRec);
  Table1.Post;
 end;
end;

end.


ملف الوحدة unt_obdb

الكود:

unit unt_obdb;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids,unt_data1, Buttons,
  ComCtrls, DBCtrls, Mask;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    btnAdd: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    BitBtn1: TBitBtn;
    Edit4: TEdit;
    DateTimePicker1: TDateTimePicker;
    BitBtn2: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    BitBtn3: TBitBtn;
    Label5: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    procedure FormShow(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
    procedure DBLookupComboBox1Click(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
  private
  public
    { Public declarations }
    Person: TPerson;
    PRec: TPersonRec;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Person:= TPerson.create(FormatDateTime('"data"yyyy',Now)+'.DB');
  DBLookupComboBox1.ListSource := DataModule1.DataSource2;
  DBLookupComboBox1.KeyField := 'Nom';
  DBLookupComboBox1.ListField := 'Nom';
  caption := FormatDateTime('"Year "yyyy',Now);
end;

procedure TForm1.btnAddClick(Sender: TObject);
begin  // Ajoute
  PRec.Num := StrToInt(Edit1.Text);
  PRec.Nom := Edit2.Text;
  PRec.DateE := DateTimePicker1.Date;
  Person.AddToTabe(PRec);
  btnAdd.Enabled := false;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin  // recherche
  Person.FindTable(Edit4.Text,PRec);
  Edit1.Text := IntToStr(PRec.Num);
  Edit2.Text := PRec.Nom;
  DateTimePicker1.Date := PRec.DateE;
  BitBtn2.Enabled := true;
  btnAdd.Enabled := false;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin  // Modifie
  PRec.Num := StrToInt(Edit1.Text);
  PRec.Nom := Edit2.Text;
  PRec.DateE := DateTimePicker1.Date;
  Person.Modify(PRec);
  BitBtn2.Enabled := false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Person := nil;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 if (Edit1.Text <> '') and (Edit2.Text <> '') then
 btnAdd.Enabled := true else btnAdd.Enabled := false;
end;

procedure TForm1.Edit4Change(Sender: TObject);
begin
if Edit4.Text <> '' then
 BitBtn1.Enabled := true else BitBtn1.Enabled := false;
end;

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
 Person:= TPerson.create(DBLookupComboBox1.Text+'.DB');
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  Edit1.Text := DBGrid1.Fields[0].Text;
  Edit2.Text := DBGrid1.Fields[1].Text;
  DateTimePicker1.Date := DBGrid1.Fields[2].AsDateTime;
  BitBtn2.Enabled := true;
  BtnAdd.Enabled := false;
end;

end.


_________________
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

ali1
مبرمج مجتهد

عدد المساهمات : 861
تاريخ التسجيل : 29/07/2013

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى