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=10697)

الصفحات: 1 2


مشكلة تواجهني في عملية اضافة سجل - medreg - 08-03-2020

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

جزاكم الله عنا كل خير



RE: مشكلة تواجهني في عملية اضافة سجل - لؤي - 09-03-2020

و عليكم السلام 
جرب :


PHP كود :
DM.Table1.insert 



RE: مشكلة تواجهني في عملية اضافة سجل - ghostdz - 09-03-2020

وعليكم السلام ورحمة الله تعالى وبركاته
بعد تجريب الكود الذي وضعته فإنه يقوم بإعطاء الرقم الموالي  ( الرقم/السنة ) بشكل صحيح
عليك بمراجعة event التي تتم قبل الحفظ ، أي أن التغيير يتم بعد إعطاء الرقم الصحيح


RE: مشكلة تواجهني في عملية اضافة سجل - medreg - 09-03-2020

شكرا على المرور
بالنسبة الأخ لؤي : لقد جربت الأمر Insert قبل وضع الإشكال لكن ليس هو المشكل
اما بالنسبة للأخ ghostdz : لم افهم قصدك ممكن التغيير على الكود


RE: مشكلة تواجهني في عملية اضافة سجل - ghostdz - 10-03-2020

(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)


RE: مشكلة تواجهني في عملية اضافة سجل - medreg - 10-03-2020

السلام عليكم ورحمة الله تعالى وبركاته
بارك الله فيكم اخي
هناك مشكل اخر وهو ان بعدما جربت الكود المعدل من طرفكم يعمل جيد الا انه يعمل على نفس السنة اما اذا غيرت السنة يبدأ بالرقم 1 للسنة الجديدة
لكن كل اضفت سجل جديد للسنة الجديدة يعيني رقم 1 اي لا يعطي الرقم الموالي
وبعدما فيرت نوع الحقل No_Brd كما اشرت في مداخلتك الى Smallint لا يقبل الرقم المضاف اليه السنة مثلا 001/2020 يعطيني رسالة خطأ

رسالة الخطأ هي كالتالي :
'001/2020' n'est pas une valeur entière correcte pour le champ 'No_Brd'


RE: مشكلة تواجهني في عملية اضافة سجل - ghostdz - 11-03-2020

(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;



RE: مشكلة تواجهني في عملية اضافة سجل - medreg - 11-03-2020

السلام عليكم ورحمة الله تعالى وبركاته
لقد اعدت نوع الحقل الى 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
ربما هناك شيء ما في الكود لم افهمه والله اعلم
بارك الله فيكم


RE: مشكلة تواجهني في عملية اضافة سجل - medreg - 11-03-2020

اليكم المرفق للإطلاع والتعديل
[attachment=4183]

علما انني استعمل قاعدة البيانات 
absolute database
ونسخة الدلفي xe8
جزاكم الله عنا كل خير


RE: مشكلة تواجهني في عملية اضافة سجل - ghostdz - 12-03-2020

(11-03-2020, 10:46 PM)medreg كتب : اليكم المرفق للإطلاع والتعديل


علما انني استعمل قاعدة البيانات 
absolute database
ونسخة الدلفي xe8
جزاكم الله عنا كل خير

في قاعدة البيانات Bords عندك الحقل Annee فارغ لا يحمل السنة لأنه يجب أن يحتوي السنة التي على أساسها تتم الفلترة
إليك التعديلات التالية في الكود وإليك رابط لتحميل الملف المعدل
https://www.mediafire.com/file/8cy26cwuzw6ja5r/Exemple_Num.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;