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



اين الخطأ في هذا الكود - medreg - 06-01-2016

السلام عليكم ورحمة الله
لقد وضعت هذا الكود والمقصود منه هو بيحث في الجدول abstable2
اذا كان الرقم Cde يساوي القيمة 0 أو يساوي قيمة اكثر من 0
يجب ان يكون الحقل CdeN في الجدولabstable1  تساوي القيمة Cde + 1
والمشكلة التي اعاني منها الان هي اذا كان الجدول abstable2 فارغ
لا يجعل قيمة الحقل CdeN في الجدول abstable1 تساوي 1
والمطلوب لوكانت قيمة Cde تساوي 0 يجب ان تكون قيمة CdeN تساوي 1
كود :
procedure TForm1.Button1Click(Sender: TObject); var t01,t02,t03:string; MT:double; s01:integer; begin if abstable1.State=DSEdit then abstable1.Post;  abstable2.Open;  abstable2.First;  while not abstable2.Eof do  begin  {Keep Previous values}  s01   := abstable2.FieldValues['Cde'];  t01    := abstable2NAT.AsString;  t02    := abstable2NBT.AsString;  t03    := abstable2NCT.AsString;  MT  := abstable2MT_N.AsFloat;  abstable2.Next;    if abstable1.Locate('NAT;NBT;NCT',vararrayof([t01,t02,t03]),[locaseinsensitive,lopartialkey]) then    begin      abstable1.Edit;      if MT<>0 then      begin        If abstable1MT_RS.Asfloat<>0 then        begin        end else begin        abstable1.Edit;        abstable1MT_TO.AsFloat  := MT;        abstable1MT_NV.AsFloat  := 0;        abstable1CdeA.asinteger := s01;        abstable1CdeN.asinteger := s01+1;        end;      end else begin        abstable1.Edit;        abstable1MT_TO.AsFloat :=0;        abstable1MT_NV.AsFloat :=0;      end;      abstable1.Next;      end else begin    end;  end; end; end;
وبالتوفيق


RE: اين الخطأ في هذا الكود - محمد عبد العزيز - 06-01-2016

اخي medreg دائما طرحك ناقص
اذا كان abstable2 فارغ فلن ينفذ الكود لانك كتبت

كود :
while not abstable2.Eof do
الان ماذا ؟


RE: اين الخطأ في هذا الكود - medreg - 06-01-2016

إذا ماذا يجب علي فعله حتى يتم تنفيذ الكود
وحسب ما فهمت من ردك فإن المشاركة السابقة طرحها ناقص الى حد الآن
في هذه الحالة اشر علي بكبفية الطرح حتة يتمكن الجميع من فهمه وجزاكم الله عنا كل خير


RE: اين الخطأ في هذا الكود - محمد عبد العزيز - 06-01-2016

ما محتوى abstable2 و abstable1 وما العلاقة بينهما


RE: اين الخطأ في هذا الكود - medreg - 06-01-2016

السلام عليكم اتمنى ان اكون موفقا في هذا التوضيح
AbsTable2
هو عبارة عن بطاقة حساب
وتتكون من 5 حقول
Cde مفتاح AbsTable2
CdeA رقم البطاقة السابق
CdeN رقم البطاقة الحالي
NAT المادة
NBT الفصل
MT01 الرصيد
MT02 الزيادة
MTOT الرصيد الجديد
بمجرد الضغط على زر الحساب يتم تحويل رقم البطاقة CdeN والرصيد الجديد MTOT مع مقارنة المادة والفصل الى AbsTable1
وعند إضافة سجل جديد في AbsTable2
يجب ان يبحث في AbsTable1 عن NAT وNBT إذا كانا موجودان في هذا الجدول فمباشرة يجعل قيمة الحقل CdeA الموجود في AbsTable2 تساوي قيمة الحقل CdeN الموجودة في AbsTable1 وقيمة الحقل CdeN الموجودة في AbsTable2 تساوي قيمة CdeA + 1 أما MTOT يساوي قيمة MTSD الموجودة في AbsTable1
إذا كانت قيمة المادة NAT و الفصل NBT المحولان من AbsTable2 يساويان نفس القيمة الموجودة في الجدول AbsTable1
في هذه الحالة يتم تغيير رقم البطاقة مع الرصيد فقط cdeN و MTSD
وإن لم تكن المادة والفصل يساويان نفس القيمة يضاف سجل جديد بالقيمة الجديدة في AbsTable1
يعني ان AbsTable1 يتم فيه تغيير القيم حسب كل مادة وفصل كل ما اضيف سجل في AbsTable2 وتمت عملية الحويل
AbsTable1
هو عبارة عن حفظ رقم البطاقة الجديد والمبلغ الجديد من AbsTable2
Cde بساوي رقم البطاقة الموجود في AbsTable2 والمتمثل في CdeN
NAT يساوي المادة الموجودة في AbsTable2 والمتمثلة في NAT
NBT يساوي الفصل الموجود في AbsTable2 والمتمثلة في NAT
MTSD يساوي MTOT الموجود في AbsTable2
وبالتوفيق

اسف البطاقة تتكون من 08 حقول وليس 5حقول

البطاقة تتكون من 07 حقول والثامن مفتاح الجدول

عفوا الكود الذي سبق لي وان وضعته يعتبر
AbsTable2 هو AbsTable1 المشار اليه في التوضيح
وAbsTable1 هو AbsTable2 المشار اليه في التوضيح
بالتوفيق وآسف مرة أخرى على التكربر