easyDelphi Q&A
+4 تصويتات
77 مشاهدات

السلام عليكم 

اعلم بانه الحل لمشكلتي هو ربط الجداول بالكود ثم اضعها في tquery 

لكن هنا المشكل بالضبط حاولت عن طريق inner join  ولكن دون فائدة 

لهذا وضعت الكود سورس وقاعدة البيانات معا على الميديافاير لتتضح الصورة 

كل ما اريده هو عندما اختار رقم المهمة تتغير بيانات الموضف  هذا كل ما اريده؟

http://www.mediafire.com/file/1y4whijuqj4nzkk/test.rar/file

وجزاكم الله خيرا 

سُئل في تصنيف Delphi بواسطة (340 نقاط) | 77 مشاهدات
 

2 إجابة

+1 تصويت

أولا هنلك عدة ملاحظات على الكود.

1- البحث الجزئي للسجلات بواسطة رفم يتطلب كود إضافي لتحسين الأداء مثلا أنت لا تتأكد من ان النص هو رقم بل حتى أنك لا تعالج اللإستثناءات. مع أنه يمكن حل المشكل بتفعيل  الخاصية NumberOnly  الخاصة بال Edit1

2- أنت تقوم بجلب سجلات من جدولين مرتباطان بحقل Num_Emp  لذا من الأحسن القيام بهذه العملية عنذما يطلب المستخدم ذلك (عند الضغط على الزر Enter أو زر البحث)مثلا لو قمت بإدخال الرقم 12345678 بإنك تراجع قاعدة البيانات كل مرة عندما يتم الضغط على كل زر.

3- من المستحسن نغيير إسم الجدول من Employé  إلى Employe (مراعاة قواعد التسمية)

بالنسبة لسؤالك  سنكتب الكود في في الحدث OnKeyPress ل Edit1 مع تفعيل الخاصية NumberOnly  الخاصة بال Edit1

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Const SQL='SELECT Num_Mission,Num_Emp,Nom-Mission, Nature-Mission, '+
          'Nom_Emp, Prenom_emp, Date_Nais FROM Mission INNER JOIN Employe ON '+
          'Mission.Enm_Emp=Employe.Num_Emp '+
          'WHERE (Mission.Num-Mission= %s) '+
          'ORDER BY Mission.Mission.Num-Mission,Employe.Nom';
begin
if (key=#13) then
begin
 ADOQuery1.Close;
 ADOQuery1.sql.clear;
 ADOQuery1.SQL.Add(Format(SQL,[Edit1.text]));
 ADOQuery1.open;
 Edit1.Clear;
end;
end;

 

تم الرد عليه بواسطة (7,420 نقاط)
لكن ماهو الكود الذي اكتبه داخل tquery الخاص بالموظف
وماهو الكود الذي اكتبه داخل tquery الخاص بالمهمة
وشكرا
هنا إستعملت مكون واحد فقط الذي يعرض المهمة والموظفين معا
استعملت 2 tquery واحد للموظف وواحد للمهمة انظر الى الكود سورس الذي وضعته
هو كود سورس + قاعدة بياناتي وجزاك الله خيرا فانا لا اعلم ماهو الكود الصحيح الذي اضعه في كلا tquery
http://www.mediafire.com/file/1y4whijuqj4nzkk/test.rar/file
اولا يوجد احد في المنتدى يساعدني في ايجاد الحل؟
+1 تصويت

سؤالك يعتبر من اساسيات وبديهيات التعامل مع قواعد البيانات في الدلفي .. ويجب ان تكون على معرفة بان وضع نقطتين فوق بعض قبل كلمة في الكوري تعني انها حقل او قيمة قادمة من خارج الكوري . اما من جدول اخر او قيمة تثبتها كبرمتر في الكود اثناء التشغيل . 
جواب سؤالك هو :

في tquery الـ detail . اضبط خاصية masterSource إلى tquery الـ master .
وفي الكوري الـ details اكتب الكوري بشكل طبيعي . وعندما تريد حقل من جدول الماستر اكتب اسمه وقبله نقطتين فوق بعض .

مثال :
 

mTable: الجدول الاول الماستر
  mid
  mf1
  mf2

dtable: جدول التفاصيل
  did
  dMasterId 
  df1
  df2

سيكون الكوري الخاص بالتفاصيل بهذا الشكل
select * from dtable 
  where dMasterId = :mid


 

لا تنسى ربط خاصية masterSource في التفاصيل مع جدول الماستر . فقط
 

تم الرد عليه بواسطة (18,180 نقاط)

اسئلة متعلقة

+1 تصويت
0 إجابة
سُئل منذ 4 أيام في تصنيف Delphi بواسطة Amar Gozim (10,350 نقاط) | 15 مشاهدات
+4 تصويتات
2 إجابة
+2 تصويتات
1 إجابة
+2 تصويتات
1 إجابة
سُئل أغسطس 23 في تصنيف Delphi بواسطة Amar Gozim (10,350 نقاط) | 49 مشاهدات
ادعُ اصدقائك في الفايسبوك لمشاركتك

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

268 سؤال
478 إجابة
838 تعليق
166 مستخدم