اين الخطأ في هذا الكود

إرسال موضوع جديد   إرسال مساهمة في موضوع

اذهب الى الأسفل

اين الخطأ في هذا الكود

مُساهمة  medreg في 17/3/2018, 8:25 pm

السلام عليكم ورحمة الله تعالى وبركاته
لقد استعملت هذا الكود حتى اتمكن من وضع قيمة حسب الشرط لكن لم يعمل
الكود:
procedure TForm1.Button1Click(Sender: TObject);
Var tPnt,Tx01,Tx02,Tx03,Tx04,Tx05,Tx06:real;
begin
 With DM do
 begin
   Table1.Open;
   Tx01:=Table1Tx_01.Value;
   Tx02:=Table1Tx_02.Value;
   Tx03:=Table1Tx_03.Value;
   Tx04:=Table1Tx_04.Value;
   Tx05:=Table1Tx_05.Value;
   Tx06:=Table1Tx_06.Value;

   Table2.first;
   while Not Table2.eof do
   begin
   tPnt:=Table2.fieldValues['Pnt_Prm'];
     Table2.Edit;
     If (tPnt<=36.10)Or(tPnt>=40.00) then Table2.FieldValues['TX_Prm']:=Tx01;
     If (tPnt<=32.10)Or(tPnt>=36.00) then Table2.FieldValues['TX_Prm']:=Tx02;
     If (tPnt<=28.10)Or(tPnt>=32.00) then Table2.FieldValues['TX_Prm']:=Tx03;
     If (tPnt<=24.10)Or(tPnt>=28.00) then Table2.FieldValues['TX_Prm']:=Tx04;
     If (tPnt<=20.10)Or(tPnt>=24.00) then Table2.FieldValues['TX_Prm']:=Tx05;
     If (tPnt=0.00)Or(tPnt>=20.00) then Table2.FieldValues['TX_Prm']:=Tx06;
   Table2.Next;
   end;
 end;
end;
كما انني استعملت هذا الكود الثاني لكن لم يقبل الفاصلة ووجود الفاصلة ضروري
case tPnt of
36.10..40.00 : table2.fieldvalues['TX_Prm']:=Tx01;
32.10..36.00 : table2.fieldvalues['TX_Prm']:=Tx02;

medreg
مبرمج ممتاز جدا
مبرمج ممتاز جدا

عدد المساهمات : 73
تاريخ التسجيل : 29/01/2015

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: اين الخطأ في هذا الكود

مُساهمة  ali1 في 22/3/2018, 10:06 pm


وعليكم السلام ورحمة الله

بسم الله الرحمن الرحيم
الصلاة والسلام على رسول الله

انا اسف على تأخر في الرد أخي medreg

حسب ما فهمت أنا من الكود الذي وضعته في المنتدى
أنه يتم أخذ قيم السجل الاول من الجدول الاول أي (Table1)
لهم Tx_01 و Tx_02 و Tx_03 و Tx_04 و Tx_05 و Tx_06

ثم نقرأ الجدول الثاني (Table2) من أول سجل الى أخر سجل
بواسطة حلقة تكرارية
ثم في كل مرة نأخذ قيمة حقل حتى أخر حقل في الجدول
ثم نقارن القيمة مع الارقام فاذا تحقق الشرط يتم وضع القيم مأخوذة من الجدول الاول
حتي نهاية الجدول

ملاحظة

عندما نستعمل Insert أو Append أو Edit
يجب وضع Post لقفل السجل

مثلا:
TableName.Edit;
TableName.FieldValues['Tx_Prm1']:=Tx01;
.....
.....
TableName.Post;

أو
وهذا من أجل القرآة بواسطة الحلقات التكرارية وهو واجب

TableName.DisableControls;
try
TableName.First;
while not TableName.Eof do
begin
TableName.Append; // Edit // Insert
TableName.FieldValues['Tx_Prm1']:=Tx01;
.....
.....
TableName.Post;
TableName.Next;
end;
finally
TableName.EnableControls;
end;




هذا هــو الكود الذي وضعت أنت في المنتدى أنا لم أعدل عليه كثيرا
إنه سليم 100 ب 100 الا تعليمة Post ولكن قد نستغنا عنها في بعض الاحيان
ويستحسن وضعها
انا أظن أنك لم تقم بملأ الحقل (Put_Prm) في الجدول الثاني لكي يتحقق الشرط أو الشروط



الكود:

procedure TForm1.Button1Click(Sender: TObject);
var
  tPnt, TX01, TX02, TX03, TX04, TX05, TX06: real;

begin
  with DM1 do
  begin
    Table1.Open;
    TX01 := Table1Tx_01.Value;
    TX02 := Table1Tx_02.Value;
    TX03 := Table1Tx_03.Value;
    TX04 := Table1Tx_04.Value;
    TX05 := Table1Tx_05.Value;
    TX06 := Table1Tx_06.Value;
////////////////////////////////
Table2.DisableControls; // من أجل تسريع القرآةبالحلقة التكرارية
////////////////////////////////
    Table2.First;
    while not Table2.Eof do
    begin http://Table2.Append; Table2.Insert;
      tPnt := Table2.FieldValues['Put_Prm'];
      Table2.Edit; // تعديل على السجل
      if(tPnt <= 36.10)or(tPnt >= 40.00)then Table2.FieldValues['Tx_Prm1']:=Tx01;
      // 37 38 39  الارقام التي يتم تجاهلها
      if(tPnt <= 32.10)or(tPnt >= 36.00)then Table2.FieldValues['Tx_Prm1']:=Tx02;
      // 33 34 35    الارقام التي يتم تجاهلها
      if(tPnt <= 28.10)or(tPnt >= 32.00)then Table2.FieldValues['Tx_Prm1']:=Tx03;
      // 29 30 31    الارقام التي يتم تجاهلها
      if(tPnt <= 24.10)or(tPnt >= 28.00)then Table2.FieldValues['Tx_Prm1']:=Tx04;
      // 25 26 27    الارقام التي يتم تجاهلها
      if(tPnt <= 20.10)or(tPnt >= 24.00)then Table2.FieldValues['Tx_Prm1']:=Tx05;
      // 21 22 23    الارقام التي يتم تجاهلها
      if(tPnt <= 00.00)or(tPnt >= 10.00)then Table2.FieldValues['Tx_Prm1']:=Tx06;
      // 1 2 3 4 5 6 7 8 9    الارقام التي يتم تجاهلها
////////////////////////////////
      Table2.Post; // قفل السجل الذي تم تعديله
      Table2.Next; //  التالي أو تنقل الى السجل التالي
//  وهذا الامر واجب وضعه لأن الحلقة تبدأ من أول سجل الى اخر
// سجل
//  قاذا لم يكن موجود فان البرنامج سوف يتوقف
////////////////////////////////
    end;
////////////////////////////////
Table2.EnableControls;
//////////////////////////////// 
  end;

end;



في هذا الكود سنقوم بملأ الجدول الثاني
لكي نتأكد من تحقق الشروط السابقة لأنها مبنية على قيم الحقل (Put_Prm)

الكود:

procedure TForm1.Button2Click(Sender: TObject);// Charge
var i: integer;
begin
  r1 := -10;
  with DM1 do
  begin
  Table2.DisableControls;
  Table2.First;
  for i := 0 to 1000 do
  begin
    if Frac(r1) = 0.00 then // 0,00
    begin
    Table2.Append; //.Edit;
    Table2.FieldByName('Put_Prm').AsFloat := Trunc(r1)+0.10;
    Table2.Post;
    Table2.Next;
    end;
    Table2.Append; //.Edit;
    Table2.FieldByName('Put_Prm').AsFloat := r1; // Pnt_Prm
    Table2.Post;
    Table2.Next;
    r1 := r1 + 0.25;
  end;
  Table2.EnableControls;
  end;
end;

_________________

ali1
مبرمج مجتهد

عدد المساهمات : 858
تاريخ التسجيل : 29/07/2013

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: اين الخطأ في هذا الكود

مُساهمة  medreg في 23/3/2018, 12:07 pm


شكرا لك اخي على الرد
لكن الكون يأخذ قيمة واحدة فقط ويعممها على الكل
والمفروض انه يأخذ القيمة حسب الشرط
اذا كان tpnt يساوي القيمة ما بين 15.10 و 20.00 إذًا
table2.tx_prm.value:= tx01
اذا كان tpnt يساوي القيمة ما بين 12.10 و 15.00 إذًا
table2.tx_prm.value:= tx02
اذا كان tpnt يساوي القيمة ما بين 08.10 و 12.00 إذًا
table2.tx_prm.value:= tx03
حسب الصورة المرفقة
وجزاكم الله عنا كل خير

medreg
مبرمج ممتاز جدا
مبرمج ممتاز جدا

عدد المساهمات : 73
تاريخ التسجيل : 29/01/2015

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: اين الخطأ في هذا الكود

مُساهمة  abas في 23/3/2018, 12:47 pm

هل تريد اذا تحقيق شرط واحد فقط ن ست شروط الباقية

If (tPnt<=36.10)Or(tPnt>=40.00) then Table2.FieldValues['TX_Prm']:=Tx01;
If (tPnt<=32.10)Or(tPnt>=36.00) then Table2.FieldValues['TX_Prm']:=Tx02;
If (tPnt<=28.10)Or(tPnt>=32.00) then Table2.FieldValues['TX_Prm']:=Tx03;
If (tPnt<=24.10)Or(tPnt>=28.00) then Table2.FieldValues['TX_Prm']:=Tx04;
If (tPnt<=20.10)Or(tPnt>=24.00) then Table2.FieldValues['TX_Prm']:=Tx05;
If (tPnt=0.00)Or(tPnt>=20.00) then Table2.FieldValues['TX_Prm']:=Tx06;

abas
مبرمج

عدد المساهمات : 56
تاريخ التسجيل : 06/06/2015

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: اين الخطأ في هذا الكود

مُساهمة  ali1 في 23/3/2018, 4:12 pm

كان السؤال الاول حسب الكود البرمجي وهو صحيح من الناحية البرمجية

السؤال:

والمفروض انه يأخذ القيمة حسب الشرط

اذا كان tpnt يساوي القيمة ما بين 15.10 و 20.00 إذًا
table2.tx_prm.value:= tx01

اذا كان tpnt يساوي القيمة ما بين 12.10 و 15.00 إذًا
table2.tx_prm.value:= tx02

اذا كان tpnt يساوي القيمة ما بين 08.10 و 12.00 إذًا
table2.tx_prm.value:= tx03

الجواب:

أعتقد  اذا لم أكن مخطأ أن الكود التالي يجيب على سؤالك

الكود:

procedure TForm1.Button10Click(Sender: TObject);
Var tPnt,Tx01,Tx02,Tx03,Tx04,Tx05,Tx06:real;
begin
 With DM1 do
 begin
   Table1.Open;
   Tx01:=Table1Tx_01.Value;
   Tx02:=Table1Tx_02.Value;
   Tx03:=Table1Tx_03.Value;
   Tx04:=Table1Tx_04.Value;
   Tx05:=Table1Tx_05.Value;
   Tx06:=Table1Tx_06.Value;

   Table2.first;
   while Not Table2.eof do
   begin
   tPnt:=Table2.fieldValues['Put_Prm'];
     Table2.Edit;
     If (tPnt>=15.10)and(tPnt<=20.00) then Table2.FieldValues['TX_Prm1']:=Tx01;
 ///    اذا كان tpnt يساوي القيمة ما بين 15.10 و 20.00 إذًا
///table2.tx_prm.value:= tx01

     If (tPnt>=12.10)and(tPnt<=15.00) then Table2.FieldValues['TX_Prm1']:=Tx02;
///اذا كان tpnt يساوي القيمة ما بين 12.10 و 15.00 إذًا
///table2.tx_prm.value:= tx02

     If (tPnt>=08.10)and(tPnt<=12.00) then Table2.FieldValues['TX_Prm1']:=Tx03;
///اذا كان tpnt يساوي القيمة ما بين 08.10 و 12.00 إذًا
///table2.tx_prm.value:= tx03

   Table2.Next;
   end;

///   If (tPnt<=24.10)Or(tPnt>=8.00) then Table2.FieldValues['TX_Prm1']:=Tx04;
///   If (tPnt<=20.10)Or(tPnt>=24.00) then Table2.FieldValues['TX_Prm1']:=Tx05;
///   If (tPnt = 0.00)Or(tPnt>=20.00) then Table2.FieldValues['TX_Prm1']:=Tx06;
 end;

end;

ملاحظة هامة:

اذا كان
tpnt
يساوي القيمة ما بين 12.10 و 15.00
tPnt>=15.10 and tPnt<=20.00
أو
tPnt>15.10 and tPnt<20.00

هذا هو المفهوم لكلمة بين

اذا قلنا الارقام بين 1 و 10

اما تكون
1 2 3 4 5 6 7 8 9 10
أو
2 3 4 5 6 7 8 9

هذا حسب فهمي

_________________

ali1
مبرمج مجتهد

عدد المساهمات : 858
تاريخ التسجيل : 29/07/2013

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: اين الخطأ في هذا الكود

مُساهمة  medreg في 23/3/2018, 5:24 pm

بارك الله فيكم وجزاكم الله عنا خير الجزاء
وجمعة مباركة إنشاء الله

medreg
مبرمج ممتاز جدا
مبرمج ممتاز جدا

عدد المساهمات : 73
تاريخ التسجيل : 29/01/2015

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
تستطيع الرد على المواضيع في هذا المنتدى