مشكل ترتيب قاعدة بيانات
#6
لقد قمت بإيجاد الحل على ما أعتقد و لكن يتطلب من حقل النقاط أن يكون فهرس رئيسي بالإضافة مع فهرس رئيسي آخر، لأن الفهرسة الثانوية لا تسمح إلا بالقراءة من الجداول (أي لا تسمح بتعديل البيانات).

المثال يتطلب مكونين من TTable واحد للبحث و الآخر لترقية البيانات.

كود :
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, Db, DBTables, StdCtrls; type TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; Table2: TTable; SmallintField1: TSmallintField; FloatField1: TFloatField; DBGrid1: TDBGrid; Table1Num: TSmallintField; Table1Note: TFloatField; procedure FormCreate(Sender: TObject); procedure Table1BeforePost(DataSet: TDataSet); procedure Table2BeforeOpen(DataSet: TDataSet); procedure Table1BeforeOpen(DataSet: TDataSet); private { Déclarations privées } public end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Table1.Open;Table2.Open; end; procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin Table2.IndexFieldNames:='Note'; if Table2.FindKey([Table1.FieldByName('Note').AsString]) then Table1.FieldByName('Num').AsInteger:=Table2.fieldByName('Num').AsInteger else Table1.FieldByName('Num').AsInteger:=StrToInt(Inputbox('إدخال الرقم','أدخل الرقم الجديد','0')); end; procedure TForm1.Table2BeforeOpen(DataSet: TDataSet); begin Table2.TableName:=ExtractFilePath(Application.exeName)+'data\notes.DB' ; end; procedure TForm1.Table1BeforeOpen(DataSet: TDataSet); begin Table1.TableName:=ExtractFilePath(Application.exeName)+'data\notes.DB' ; end; end.
و المثال التالي يقوم بإعطاء النقطة الأقل الرقم الأول و النقطة الأكبر الرقم الأخير.

كود :
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, Db, DBTables, StdCtrls; type TForm1 = class(TForm) Table1: TTable; DataSource1: TDataSource; Table2: TTable; SmallintField1: TSmallintField; FloatField1: TFloatField; DBGrid1: TDBGrid; Table1Num: TSmallintField; Table1Note: TFloatField; procedure FormCreate(Sender: TObject); procedure Table1AfterPost(DataSet: TDataSet); procedure Table1BeforePost(DataSet: TDataSet); procedure Table2BeforeOpen(DataSet: TDataSet); procedure Table1BeforeOpen(DataSet: TDataSet); procedure Table1AfterDelete(DataSet: TDataSet); private { Déclarations privées } public procedure Tartib; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Table1.Open;Table2.Open; end; procedure TForm1.Tartib; var Note: Real; I: integer; begin Table2.IndexFieldNames:='Note'; Table2.First; I:=1; Note:=Table2.FieldByName('Note').AsFloat; While not Table2.Eof do begin Table2.Edit; if Table2.FieldByName('Note').AsFloat=Note then Table2.FieldByName('Num').AsInteger:=I else begin I:=I+1; Table2.FieldByName('Num').AsInteger:=I; end; Note:=Table2.FieldByName('Note').AsFloat; Table2.Post; Table2.Next; end; Table1.Refresh; end; procedure TForm1.Table1AfterPost(DataSet: TDataSet); begin Tartib; end; procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin Table2.IndexFieldNames:='Note'; if Table2.FindKey([Table1.FieldByName('Note').AsString]) then Table1.FieldByName('Num').AsInteger:=Table2.fieldByName('Num').AsInteger; end; procedure TForm1.Table2BeforeOpen(DataSet: TDataSet); begin Table2.TableName:=ExtractFilePath(Application.exeName)+'data\notes.DB' ; end; procedure TForm1.Table1BeforeOpen(DataSet: TDataSet); begin Table1.TableName:=ExtractFilePath(Application.exeName)+'data\notes.DB' ; end; procedure TForm1.Table1AfterDelete(DataSet: TDataSet); begin Tartib; end; end.
و لكن إلى الآن لم أفهم ما الهدف من مثالك؟

المشروع الأول في الملحقات.


الملفات المرفقة
.rar   Classe1.rar (الحجم : 7.09 ك ب / التحميلات : 42)
الرد


الردود في هذا الموضوع
مشكل ترتيب قاعدة بيانات - بواسطة xinofix - 29-03-2008, 10:56 AM
مشكل ترتيب قاعدة بيانات - بواسطة merouane - 29-03-2008, 05:09 PM
مشكل ترتيب قاعدة بيانات - بواسطة xinofix - 29-03-2008, 06:26 PM
مشكل ترتيب قاعدة بيانات - بواسطة merouane - 29-03-2008, 07:22 PM
مشكل ترتيب قاعدة بيانات - بواسطة مهدي - 31-03-2008, 01:42 PM
مشكل ترتيب قاعدة بيانات - بواسطة xinofix - 31-03-2008, 07:32 PM
مشكل ترتيب قاعدة بيانات - بواسطة مهدي - 31-03-2008, 08:26 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم