الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ربط قواعد البيانات BDE

مغلق
بدأه YACIN في 4 مايو 2006 · 14 رد · 1,443 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم جميعا ( واشكركم على هاالموقع )

انا مبتدئ في دلفي وارجو منكم المساعدة

أبدا مشاركتي الأولى بهذا السؤال في BDE

- اريد ان اضهر حقل موجود في الجدول الأول ان يضهر في الجدول الثاني بناء على الرقم من الجدول الأول يعني الرقم المشترك في الجدولين . وهذا الحقل حقل اسماء للموضفين مثلا :rolleyes:

تم تعديل هذه المشاركة بواسطة YACIN في 4 مايو 2006 في 23:07

#2

وضح سؤالك لأني مافهمت ماهو قصدك

وهذا الجواب على قد اللي فهمتو

يجب عليك استخدام خاصية القائد Master والتابع

حيث تنشأ عمود في الداتا بيس التابع ثم تجعله مفتاح أساسي ثاني Secondary Indexes بعد الـ id الذي تجعله رقم تلقائي (+)

وتعمل ربط حيث تذهب إلى التابع إلى خاصية Master Source وتحدد الداتا سورس القائد

ثم خاصية Master Fields حيث تظهر لك نافذة في أعلاها كومبو بوكس تحدد منه المفتاح الثاني

ثم يظهر لك حقل التابع على اليسار و القائد على اليمين تحدد الحقل المشترك بينهما ثم Add ثم موافق

وهكذا تكون قد أنشأت ربط بين قاعدتي بيانات

وهذا الملف يبين ذلك يجب فك ضغطه في قرص الـ C ليعمل بشكل جيد.

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

Master.rar

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#3

شكرا لك سيدي الكريم . ليس هذا المقصود بالضبط اعيد السؤال واملي في توضيح اكثر .

لدينا جدولين مثلا employees .events

مثلا في جدول الevents بدلا من تخزين اسم الموظف يتم تخزين رقمة لأن رقمة لن يتغيير ابدا , وبناء عليه تتم عملية الربط باستخدام الرقم , وعند الحاجة لاظهار الاسم يتم اظهار الاسم من جدول الemployees بناء على الرقم ,

- هنا كيف اضهر الأسم في الجدول events مع العلم استخدم DBgrid

للجدول events واريد ان تضهر جميع الأسماء وذلك بناء على الرقم

جزاكم الله كل الخير . والله اني في امس الحاجة لمعرفة كيف يتم ذلك

#4

الحل بسيط حيث أنني في المثال وضعت الحقل Fid مفتاح أساسي ثاني Secondary Indexes أنت فقط ضع اسم الموظف بدلا منه

واربط العنصر الذي تريد اظهار اسم الموظف فيه مع هذا الـ Field

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#5

هناك عدة طرق لفعل ما تريد

الطريقة الاولى:و هي الاسهل

قم بوضع Query سمها QueryempEvents قم بكتابة التعليمة التالية في الخاصية SQL لهذه ال Query

select Events.*,EmpName from Events inner join Employees on events.empnum = employees.empnum

ملاحظة: قم باستبدال اسماء الحقول بالاسماء التي قمت باستخدامها انت في جداولك.

ثم قم بوضع DataSource قم بربطها مع هذه Query و من ثم قم بربط ال DBGraide مع هذه ال Query

الان قم بوضع الخاصية Active = true لل Query سوف تلاحظ اسم الموظف بين الحقول

الطريقة الثانية:

قم بوضع Table للموظفين و Table اخر للEvents

قم النقر المزدوج على الجدول Events سوف تظهر لك قائمة باسماء الحقول التي اخترتها

قم بالنقر بالزر اليميني ثم اختر New Field ثم قم بوضع اسم الحقل = Emp مثل و النمط هو String و الحجم 20 مثلا

ثم اختر نوع الحقل Lookup Field و قم بوضع القيم التالية في Lookup definition

key fields = اسم الحقل من جدول Events الذي نوعه رقم و الذي نستخدمه للربط مع الموظف

DataSet = جدول الموظفين

Lookup Keys = رقم الموظف من جدول الموظفين

Result Field = اسم الموظف

ثم اضغط على Ok سوف تلاحظ حقل جديد تم اضافته حيث يمكنك معاملة هذا الحقل كأي حقل اخر قادم من قاعدة المعطيات

الان قم بوصل DBGraide مع DataSource لل Events سوف تلاحظ الحقل الجديد مع الحقول الاخرى

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#6

ألف شكرا لكم اخواني الأعزاء

ماشي الحال مع الطريقة الثانية الذي طرحه الأخ الكريم waeldalol وشكرا لك اخي على التوضيح الجيد .....

بدي استفسر على الرقم الذي من خلاله يتم أضافة الحقل

الرقم في جدول الموضفين مثلا employees هل نجعل نوع هذا الرقم . رقم تلقائي (+) وهل نعتمد عليه .

وشكرا لكم

#7

طبعاً طريقة الرقم التلقائي لتجنب الأخطاء عند تكرار الرقم

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#8
اقتباس
بدي استفسر على الرقم الذي من خلاله يتم أضافة الحقل

الرقم في جدول الموضفين مثلا employees هل نجعل نوع هذا الرقم . رقم تلقائي (+) وهل نعتمد عليه

لم افهم تمام ماذا تقصد هل ممكن ان توضح ما تريد اخي الكريم؟؟

شرحك مبهم تماماً

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#9

عفوا . كما تعلمون مبتدئ وفي بداية الطريقة تصعب بعض الأشياء شرحهاء

على العموم بخصوص الرقم

أي عند انشاء الجدول(جدول الموضفين) اول مرة وفي paradox7 نجعل نوع الرقم بدلا من (N) نجعله (+)

يصبح حقل عداد تصاعدي وهذا الحقل الذي من خلاله يتم أضهار

الأسم في الجدول الثاني ( طبعا بعد تخزينه في الجدول الثاني حتى يضهر الأسم)

عملت هذه الطريقة ناجحة والحمدلله انماء لتائكد من ذلك

وشكرا اخواني Aboalnoor و waeldalol وكل من في الموقع وفقكم الله

:lol: :lol: :lol:

#10

شي اخر وفي نفس الموضوع ومهم بالنسة لبرنامجي

الأن اريد عملية البحث في الجدول الثاني وبذات في الحقل المرتبط بالجدول الأول

يعني نوع الحقل Lookup Field .

وهذا الحقل أسماء للموضفين واريد البحث في Edit1 وحسب الحرف يعني إذا ادخلت في Edit1 حرف A تضهر الأسماء التي تبداء بالحرف A .

هذا الكود يقوم بعملية البحث مثل ما اريد لكن . لا يعمل مع Lookup Field

الكود

procedure TForm1.Edit1Change(Sender: TObject);
begin
with Query1 do
begin
close;
SQL.Text:='select * from employee where firstname like "'+edit1.Text+'%"';
open;
end;
end;

ارجو تعديل الكود أو شي أخر مشابه .

جزاكم الله كل الخير وسدد خطاكم في الدنياء والأخرة .

تم تعديل هذه المشاركة بواسطة YACIN في 11 مايو 2006 في 22:32

#11

لن يعمل الكود بسبب الخطأ في عبارة SQL و ليس بسبب و جود LookUp Field

procedure TForm1.Edit1Change(Sender: TObject);
begin
with Query1 do
begin
close;
SQL.Text:='select * from employee where firstname like' + '''%' + edit1.Text + '%''';
open;
end;
end;

في الدلفي لا يوجد شيئ اسمه دبل كوتاشين انتبه الى ذلك

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#12

الكود الذي ارفقته انا بالأعلى شغال ولا مشكلة فيه جربت ذلك . انما لا يعمل ضمن حقل Lookup Field .( تضهر رسالة تعلم بالخطاء على عدم وجود الحقل أصلا )

اخي الكريم waeldalol اريد البحث يكون في الحقل المرتبط بـــLookup Field

يعني الحقل الذي تم أضافته من الجدول الأول وذلك بناء على الرقم . كما عملناء في الطريقة الثانية اخي waeldalol

وقد ارفقت سابقا الكود بالأعلى كمثال فقط على عملية البحث بالحرف .

جزاك الله كل الخير waeldalol واني في انتضار ردك . وشكرا لك

#13
اقتباس
انما لا يعمل ضمن حقل Lookup Field .( تضهر رسالة تعلم بالخطاء على عدم وجود الحقل أصلا )

حقل Lookup field الذي قمنا بعمله سابقا كان فقط في Dataset و ليس في قاعدة البيانات سوف نشرح في دورة قاعدة البيانات ال dataset عما قريب.

بما انّ الحقل الذي قمنا باضافته في Dataset فبالتالي لا يمكن البحث عنه باستخدام تعليمات SQL لان الحقل كما قلت لك غير موجود في قاعدة البيانات و انما فقط في dataset

يمكنك البحث في ال dataset باستخدام التابعين lookup او locate

الافضل من ذلك اخي الكريم ان تقوم بعملية ربط بين الحقول في Query اي تعليمة SQL التي وضعتها في Query1

وذلك باستخدام عبارة inner join كما يلي

procedure TForm1.Edit1Change(Sender: TObject);
begin
with Query1 do
begin
close;
SQL.Text:='select * from employee inner join Events on employee.id = events.empid where firstname like' + '''%' + edit1.Text + '%''';
open;
end;
end;

و لكن انت لا تبحث عن حقل lookup field الذي وضعناه في dataset مسبقا في ال Query غريب فعلا..!!

ارجوا ان تكون قد فهمت فكرة الربط بين الجداول :)

تم تعديل هذه المشاركة بواسطة waeldalol في 14 مايو 2006 في 11:06

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#14

الله أكبر نجحت العملية الكود يعمل 100% أخي العزيز waeldalol . فقط قمت بتعديل له

like' + '''%' + edit1.Text + '%''';

إلى

like "'+edit1.Text+'%"';

من خلال هذا الموضوع عرفت كيفية الربط بين الجدوال بطريقتين ايضا والبحت في الحقل المرتبط

في الحقيقة لا اعرف كيف اشكركم . وان الشكر قليل عليكم لطالما كنت احاول سابقا دون جدوى واخيرا بفضلكم أخي waeldalol حققت ما اريد وزيادة

تحياتي لناس سوريا الشقيقة

و ألف شكر

#15

يمكن أيضا إستخدام QuotedStr لتكون الأمور أوضح و تفادي الأخطاء

'select * from employee where firstname like ' + '''%' + edit1.Text + '%'''

إلى

'select * from employee where firstname like ' + QuotedStr('%'+edit1.Text + '%')
d4baa0.gif

هذا الموضوع مغلق.

مواضيع مشابهة