اين الخطأ في هذا الكود
#1
السلام عليكم ورحمة الله
لقد وضعت هذا الكود والمقصود منه هو بيحث في الجدول 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;
وبالتوفيق
الرد
#2
اخي medreg دائما طرحك ناقص
اذا كان abstable2 فارغ فلن ينفذ الكود لانك كتبت

كود :
while not abstable2.Eof do
الان ماذا ؟
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#3
إذا ماذا يجب علي فعله حتى يتم تنفيذ الكود
وحسب ما فهمت من ردك فإن المشاركة السابقة طرحها ناقص الى حد الآن
في هذه الحالة اشر علي بكبفية الطرح حتة يتمكن الجميع من فهمه وجزاكم الله عنا كل خير
الرد
#4
ما محتوى abstable2 و abstable1 وما العلاقة بينهما
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#5
السلام عليكم اتمنى ان اكون موفقا في هذا التوضيح
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 المشار اليه في التوضيح
بالتوفيق وآسف مرة أخرى على التكربر
الرد


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


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