اين الخطأ في هذا الكود
3 مشترك
صفحة 1 من اصل 1
اين الخطأ في هذا الكود
السلام عليكم ورحمة الله تعالى وبركاته
لقد استعملت هذا الكود حتى اتمكن من وضع قيمة حسب الشرط لكن لم يعمل
لقد استعملت هذا الكود حتى اتمكن من وضع قيمة حسب الشرط لكن لم يعمل
- الكود:
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- مبرمج ممتاز جدا
- عدد المساهمات : 81
تاريخ التسجيل : 29/01/2015
رد: اين الخطأ في هذا الكود
وعليكم السلام ورحمة الله
بسم الله الرحمن الرحيم
الصلاة والسلام على رسول الله
انا اسف على تأخر في الرد أخي 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;
ali- مبرمج مجتهد
- عدد المساهمات : 913
تاريخ التسجيل : 29/07/2013
رد: اين الخطأ في هذا الكود
شكرا لك اخي على الرد
لكن الكون يأخذ قيمة واحدة فقط ويعممها على الكل
والمفروض انه يأخذ القيمة حسب الشرط
اذا كان 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- مبرمج ممتاز جدا
- عدد المساهمات : 81
تاريخ التسجيل : 29/01/2015
رد: اين الخطأ في هذا الكود
هل تريد اذا تحقيق شرط واحد فقط ن ست شروط الباقية
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;
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- مبرمج
- عدد المساهمات : 62
تاريخ التسجيل : 06/06/2015
رد: اين الخطأ في هذا الكود
كان السؤال الاول حسب الكود البرمجي وهو صحيح من الناحية البرمجية
السؤال:
والمفروض انه يأخذ القيمة حسب الشرط
اذا كان 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
الجواب:
أعتقد اذا لم أكن مخطأ أن الكود التالي يجيب على سؤالك
ملاحظة هامة:
اذا كان
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
هذا حسب فهمي
السؤال:
والمفروض انه يأخذ القيمة حسب الشرط
اذا كان 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
هذا حسب فهمي
ali- مبرمج مجتهد
- عدد المساهمات : 913
تاريخ التسجيل : 29/07/2013
رد: اين الخطأ في هذا الكود
بارك الله فيكم وجزاكم الله عنا خير الجزاء
وجمعة مباركة إنشاء الله
وجمعة مباركة إنشاء الله
medreg- مبرمج ممتاز جدا
- عدد المساهمات : 81
تاريخ التسجيل : 29/01/2015
مواضيع مماثلة
» اين الخطأ في هذا الكود
» هذا الكود يحول بعض خصائص كل العناصر الموضوعة على النموذج (Form) الى كود برمجي .
» هذا الكود يحول بعض خصائص كل العناصر الموضوعة على النموذج (Form) الى كود برمجي .
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى