المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
السلام عليكم ورحمة الله تعالى وبركاته
المشكلة التي تواجهني هي عندما اضغط على زر اضافة وبدلا من ان يضيف الرقم الموالي يكرر نفس الرقم
مع العلم انه لا تظهر هذه المشكلة الا بعد وصول عدد السجلات الى رقم 49 سجل
الكود المستعمل هو كالاتي
كود : var
tan,result : string;
tNum,Err : integer;
tKey : variant;
begin
DM.Table1.IndexName:='';
DM.Table1.Last;
tan := DM.Table2Br.FieldValues['Annee'];
tKey := DM.Table1.fields[0].value;
DM.Table1.Append;
if (tKey = NULL) or (copy(tKey, length(tKey)-3, 4)<>tan)then tNum := 0
else begin
val(copy(tKey, 1, 4), tNum, Err);
if Err<>0 then tNum := 0;
end;
result := format('%4.3d/', [tNum+1]) + tan ;
DM.Table1.FieldValues['No_Brd']:=result;
جزاكم الله عنا كل خير
المشاركات : 628
المواضيع 72
:
: 211
الإنتساب : Jun 2010
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
وعليكم السلام ورحمة الله تعالى وبركاته
بعد تجريب الكود الذي وضعته فإنه يقوم بإعطاء الرقم الموالي ( الرقم/السنة ) بشكل صحيح
عليك بمراجعة event التي تتم قبل الحفظ ، أي أن التغيير يتم بعد إعطاء الرقم الصحيح
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
شكرا على المرور
بالنسبة الأخ لؤي : لقد جربت الأمر Insert قبل وضع الإشكال لكن ليس هو المشكل
اما بالنسبة للأخ ghostdz : لم افهم قصدك ممكن التغيير على الكود
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
(09-03-2020, 06:22 PM)medreg كتب : شكرا على المرور
بالنسبة الأخ لؤي : لقد جربت الأمر Insert قبل وضع الإشكال لكن ليس هو المشكل
اما بالنسبة للأخ ghostdz : لم افهم قصدك ممكن التغيير على الكود
الكود الذي وضعته نظريا صحيح لكن عليك مراجعة الأمور التالية :
1- الحقل no_brd يكون Index[size=small]
2- مراجعة BeforePost الخاص بـ Table1
جرب الكود التالي حيث قمت بحذف التعليمة التي تقوم بإلغاء index
[/size]
كود : var
tan,result : string;
tNum,Err : integer;
tKey : variant;
begin
DM.Table1.Last;
tan := DM.Table2Br.FieldValues['Annee'];
tKey := DM.Table1.fields[0].value;
DM.Table1.Append;
if (tKey = NULL) or (copy(tKey, length(tKey)-3, 4)<>tan)then tNum := 0
else begin
val(copy(tKey, 1, 4), tNum, Err);
if Err<>0 then tNum := 0;
end;
result := format('%4.3d/', [tNum+1]) + tan ;
DM.Table1.FieldValues['No_Brd']:=result;
وإذا لم نعمل معك ، إذا أمكن يمكنك وضع البرنامج مع الجدول لمعاينة المشكل (ليس بالضرورة كل المصدر بل الجزء الخاص بالمشكل مع datamodule)
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
10-03-2020, 09:57 PM
(آخر تعديل لهذه المشاركة: 10-03-2020, 10:00 PM بواسطة medreg.)
السلام عليكم ورحمة الله تعالى وبركاته
بارك الله فيكم اخي
هناك مشكل اخر وهو ان بعدما جربت الكود المعدل من طرفكم يعمل جيد الا انه يعمل على نفس السنة اما اذا غيرت السنة يبدأ بالرقم 1 للسنة الجديدة
لكن كل اضفت سجل جديد للسنة الجديدة يعيني رقم 1 اي لا يعطي الرقم الموالي
وبعدما فيرت نوع الحقل No_Brd كما اشرت في مداخلتك الى Smallint لا يقبل الرقم المضاف اليه السنة مثلا 001/2020 يعطيني رسالة خطأ
رسالة الخطأ هي كالتالي :
'001/2020' n'est pas une valeur entière correcte pour le champ 'No_Brd'
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
(10-03-2020, 09:57 PM)medreg كتب : السلام عليكم ورحمة الله تعالى وبركاته
بارك الله فيكم اخي
هناك مشكل اخر وهو ان بعدما جربت الكود المعدل من طرفكم يعمل جيد الا انه يعمل على نفس السنة اما اذا غيرت السنة يبدأ بالرقم 1 للسنة الجديدة
لكن كل اضفت سجل جديد للسنة الجديدة يعيني رقم 1 اي لا يعطي الرقم الموالي
وبعدما فيرت نوع الحقل No_Brd كما اشرت في مداخلتك الى Smallint لا يقبل الرقم المضاف اليه السنة مثلا 001/2020 يعطيني رسالة خطأ
رسالة الخطأ هي كالتالي :
'001/2020' n'est pas une valeur entière correcte pour le champ 'No_Brd'
لا تقم بتغيير نوع الحقل ، إليك الكود التالي يتكون من function تعطيك الرقم الجديد ، و procedure للإضافة
كود : function TForm2.GetNewNumero(Annee: Integer): string;
var
tan: string;
tNum,Err : integer;
tKey : variant;
PriorFilter: string;
PrierFiltered: Boolean;
begin
PriorFilter:= DM.Table1.Filter;
PriorFiltered:= DM.Table1.Filtered;
DM.Table1.Filter:= 'Annee=' + IntToStr(Annee);
DM.Table1.Filtered:= True;
DM.Table1.Last;
tan:= DM.Table2Br.FieldValues['Annee'];
tKey:= DM.Table1.fields[0].value;
if (tKey = NULL) or (copy(tKey, length(tKey)-3, 4)<>tan)then
tNum := 0
else
begin
val(copy(tKey, 1, 4), tNum, Err);
if Err<>0 then
tNum:= 0;
end;
Result:= Format('%4.3d/', [tNum+1]) + tan ;
DM.Table1.Filter:= PriorFilter;
DM.Table1.Filtered:= PriorFiltered;
end;
procedure TForm2.AddRecord;
var
NewNumero: string;
begin
NewNumero:= GetNewNumero(DM.Table2Br.FieldValues['Annee']);
DM.Table1.Append;
DM.Table1.FieldValues['No_Brd']:= NewNemoro;
end;
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
السلام عليكم ورحمة الله تعالى وبركاته
لقد اعدت نوع الحقل الى String
ووضعة هذه الدالة التي اعطيتني اياها
كود : function GetNewNumero(Annee: Integer): string;
var
tan: string;
tNum,Err : integer;
tKey : variant;
PriorFilter: string;
PrierFiltered: Boolean;
begin
PriorFilter:= DM.Table1.Filter;
PrierFiltered:= DM.Table1.Filtered;
DM.Table1.Filter:= 'Annee=' + IntToStr(Annee);
DM.Table1.Filtered:= True;
DM.Table1.Last;
tan:= DM.Table2Br.FieldValues['Annee'];
tKey:= DM.Table1.fields[0].value;
if (tKey = NULL) or (copy(tKey, length(tKey)-3, 4)<>tan)then
tNum := 0
else
begin
val(copy(tKey, 1, 4), tNum, Err);
if Err<>0 then
tNum:= 0;
end;
Result:= Format('%4.3d/', [tNum+1]) + tan ;
DM.Table1.Filter:= PriorFilter;
DM.Table1.Filtered:= PrierFiltered;
end;
ثم وضعت في حدث الزر اضافة هذا الكود
كود : procedure TForm2.Button1Click(Sender: TObject);
var
NewNumero: string;
begin
NewNumero:= GetNewNumero(DM.Table2Br.FieldValues['Annee']);
DM.Table1.Append;
DM.Table1.FieldValues['No_Brd']:= NewNumero;
end;
لكن لاضيف الرقم الموالي كلما اضفت سجل يعطيني رقم 2020/001
ربما هناك شيء ما في الكود لم افهمه والله اعلم
بارك الله فيكم
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
اليكم المرفق للإطلاع والتعديل
[attachment=4183]
علما انني استعمل قاعدة البيانات
absolute database
ونسخة الدلفي xe8
جزاكم الله عنا كل خير
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
(11-03-2020, 10:46 PM)medreg كتب : اليكم المرفق للإطلاع والتعديل
علما انني استعمل قاعدة البيانات
absolute database
ونسخة الدلفي xe8
جزاكم الله عنا كل خير
في قاعدة البيانات Bords عندك الحقل Annee فارغ لا يحمل السنة لأنه يجب أن يحتوي السنة التي على أساسها تتم الفلترة
إليك التعديلات التالية في الكود وإليك رابط لتحميل الملف المعدل
https://www.mediafire.com/file/8cy26cwuz...m.rar/file
ملاحظة : .dproj يحتوي على configuration المشروع ، أما .dpr فهو الذي يحتوي على مصدر المشروع.
كود : function GetNewNumero(Annee: string): string;
var
tan: string;
tNum,Err : integer;
tKey : variant;
PriorFilter: string;
PriorFiltered: Boolean;
begin
PriorFilter:= DM.Table1.Filter;
PriorFiltered:= DM.Table1.Filtered;
DM.Table1.Filter:= 'Annee=' + Annee;
DM.Table1.Filtered:= True;
DM.Table1.Last;
tan:= Annee;
tKey:= DM.Table1.fields[0].value;
if (tKey = NULL) or (copy(tKey, length(tKey)-3, 4)<>tan)then
tNum := 0
else
begin
val(copy(tKey, 1, 4), tNum, Err);
if Err<>0 then
tNum:= 0;
end;
Result:= Format('%4.3d/', [tNum + 1]) + tan ;
DM.Table1.Filter:= PriorFilter;
DM.Table1.Filtered:= PriorFiltered;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
NewNumero: string;
begin
NewNumero:= GetNewNumero(DM.Table2.FieldValues['Annee']);
DM.Table1.Append;
DM.Table1.FieldValues['No_Brd']:= NewNumero;
DM.Table1.FieldValues['Annee']:= DM.Table2.FieldValues['Annee'];
DM.Table1.Post;
end;
|