delphi4arab منتديات دلفي للعرب

نسخة كاملة : مشكلة تواجهني في عملية اضافة سجل
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله تعالى وبركاته
المشكلة التي تواجهني هي عندما اضغط على زر اضافة وبدلا من ان يضيف الرقم الموالي يكرر نفس الرقم 
مع العلم انه لا تظهر هذه المشكلة الا بعد وصول عدد السجلات الى رقم 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;

جزاكم الله عنا كل خير
و عليكم السلام 
جرب :


PHP كود :
DM.Table1.insert 
وعليكم السلام ورحمة الله تعالى وبركاته
بعد تجريب الكود الذي وضعته فإنه يقوم بإعطاء الرقم الموالي  ( الرقم/السنة ) بشكل صحيح
عليك بمراجعة event التي تتم قبل الحفظ ، أي أن التغيير يتم بعد إعطاء الرقم الصحيح
شكرا على المرور
بالنسبة الأخ لؤي : لقد جربت الأمر Insert قبل وضع الإشكال لكن ليس هو المشكل
اما بالنسبة للأخ ghostdz : لم افهم قصدك ممكن التغيير على الكود
(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)
السلام عليكم ورحمة الله تعالى وبركاته
بارك الله فيكم اخي
هناك مشكل اخر وهو ان بعدما جربت الكود المعدل من طرفكم يعمل جيد الا انه يعمل على نفس السنة اما اذا غيرت السنة يبدأ بالرقم 1 للسنة الجديدة
لكن كل اضفت سجل جديد للسنة الجديدة يعيني رقم 1 اي لا يعطي الرقم الموالي
وبعدما فيرت نوع الحقل No_Brd كما اشرت في مداخلتك الى Smallint لا يقبل الرقم المضاف اليه السنة مثلا 001/2020 يعطيني رسالة خطأ

رسالة الخطأ هي كالتالي :
'001/2020' n'est pas une valeur entière correcte pour le champ 'No_Brd'
(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;
السلام عليكم ورحمة الله تعالى وبركاته
لقد اعدت نوع الحقل الى 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
ربما هناك شيء ما في الكود لم افهمه والله اعلم
بارك الله فيكم
اليكم المرفق للإطلاع والتعديل
[attachment=4183]

علما انني استعمل قاعدة البيانات 
absolute database
ونسخة الدلفي xe8
جزاكم الله عنا كل خير
(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;
الصفحات : 1 2