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

برمجة Master and Details Tables

مغلق
بدأه Whale في 29 مارس 2006 · 9 رد · 1,307 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي طلبين:

1- كيف يمكن ربط جدول Master ب Details عن طريق استخدام TAdoQuery

2- ما هي الطرق التي تستخدمونها في عملية الاضاف و التحرير و الحدف و البحث للجداول من النوع اعلاه.

واي توضيح او امثله لمساعدتي في حل السؤال انا مستعد.

ومشكورين مقدما

#2
اقتباس
كيف يمكن ربط جدول Master ب Details عن طريق استخدام TAdoQuery

يمكن ذلك باستخدام خاصية ال Datasource الموجودة في Adoquery و ذلك عن طريق وضع بارميتر في الكود

انظر هنا

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

يمكنك استخدام كتابة تعليمات مباشرة ضمن خاصية SQl

ممكن ان تكون Insert,Update,delete,select حسب ما تريد و

لكن انا انصحك بوضع Adotable اذا كان لديك DBControls

بتريح نفسك من عناء سحب القيم و من عناء كتابتها حيث فقط عليك ان تقف على السجل المطلوبة لتقوم DBCotrols بعرض القيم لك

بشكل مباشر

حيث ان هناك Method في Adotable تساعدك بذلك مثل

Adotable.insert;
adotable.edit;
adotable.delete;
adotable.post;
adotable.cancel
adotable.next;
adotable.prier;
adotable.last;
adotable.first;
adotable.refersh;

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

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

#3

الاخ waeldalol شكرا جزيلا لك

سأجرب ما ذكرت ...بالمناسبة لدي سؤال ولكن ليس الان بعد ان اطبق ماذكرت :lol:

تحياتي

#4

بالنسبة للجدول Details غالبا ما اضطر لأستخدام adoQuery مع استعلام SQL من اجل عرض البيانات بصورة مفهومة للزبون. ما اعنيه هو ربط الجول بجداول اخرى. هذه الطريقة جيدة جدا و لكن تأتي المشكلة الكبرى عندما نرغب بالتحديث و الحدف و الاضافة. ف adoQuery يرفض ذلك عندما استخدم Method الخاصة بيه.

مثال:

لدينا جدول هو MASTER وجول اخر هو Details وجدول ثالث Test

لنفترض ان Details يتكون من الحقول التالية:

1- master_ID

2- test_id

3- detailts_date

لنفترض ان Test يتكون من الحقول التالية:

1- test_id

2-Test_name

هنا عبارة SQL ل adoQuery من اجل عرض بيانات الجدول Details هي:

SELECT D.master_id, T.Test_Name, D.Details_date
FROM 
Details D 
INNER JOIN
Test T
ON D.Test_id = T.Test_Id

ما هي افضل طريقة في رايكم لتسهيل التعامل مع adoQuery

تحياتي

#5

بالنسبة لل Adoquery لا يمكن استخدام الاضافة او التعديل او الحذف التابعين لها اي استخدام ال Method خاصيتها

اذا كانت Adoquery تجلب البيانات من اكثر من جدول مثل الحالة التي ذكرتها

لحل المشكلة يمكنك استخدام Adocommandيقوم بادخال البيانات في كل جدول على حدى

قم بوضع Adocommand وقم بربطه مع ال Connection ثم قم بكتابة تعليمات الاضافة و الحذف لك جدول حسب ما تريد

Adocommand.commandtext:= 'insert into details values(1,1,'1/1'/2006')'
adocommand.excute;
adocmmand.commandtext:= 'insert into Test values(1,'Salem')';
adocommand.excute;

سؤال ما هو DBMS الذي تعمل عليه؟

تم تعديل هذه المشاركة بواسطة waeldalol في 1 أبريل 2006 في 15:40

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

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

#6

شكرا لك .... طريقة جميلة وهي تسهل العمل فعلا :)

على العموم انا استخدم SQL Server 2000

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

اذا كانت Adoquery تجلب البيانات من اكثر من جدول مثل الحالة التي ذكرتها

بلفعل حدث ذلك معي فحاولت ان اتحايل عليها عن طريق عمل View و من ثم انشاء triggers INSTEAD OF

ولكن لم تعمل مع رغم انني استطيع ببساطة ان استخدم adoConnection.Execute لتنفيذ عبارات TSQL (INSERT, UPDATE, and Delete) بدون اي مشاكل

في البداية لم ادري ما هو السبب بالضبط فمن المفترض ان adoQuery سوف يتعامل مع View كما لو كان جدولا. وكل عمليات ال تحديث سوف تتم تحت اشراف ال Triggers!! وكان السبب بعد ذلك هو الدلة CONVERT التي استخدمتها في احد الحقول لم تلروق لل adoQuery و لكن لحسن الحظ فأن adoConnection شغال تماما.

الان لدي سؤال هل تم حل السؤال بالكامل؟؟

اقتباس
2- ما هي الطرق التي تستخدمونها في عملية الاضاف و التحرير و الحدف و البحث للجداول من النوع اعلاه.

نعم ولكن احتاج بعض التوضيح .. عندما بدأت اتعامل مع برمجة Master and Details Tables واجهة مشكله بسسبب طبيعة ER-Diagram وذلك لان الجدول Details هو من نوع Weak Entity

اي ببساطة وجودها يعتمد على وجود الجدول Master . هذا اولا

ثانيا ان الجول Master يرتبط بعلاقة Full Relationship مع الجدول Details اي لابد (MUST) لكل سجل في الجدول Master من سجل واحد على الاقل Details.

استطعت ان اكتب كود يتقيد بالشروط اعلاه و لكن الطريقة التي استخدمتها :wacko: سيئة جدا و صعبة الفهم يعني بأختصار هي اقرب لصيني من اي لغة اخرى

فكيف انت تتعاملون مع هذه الحالة

شاكرا لكم حسن تجاوبكم معي

تحياتي

تم تعديل هذه المشاركة بواسطة Whale في 1 أبريل 2006 في 19:27

#7
اقتباس
ما هي الطرق التي تستخدمونها في عملية الاضاف و التحرير و الحدف و البحث للجداول من النوع اعلاه.

سوف اسرد لك كل الطرق التي تمكنك من عمل العمليات الثلاثة الا وهي الاضافة و الحذف و التعديل

اولا:

استخدام Adotable مع Method مثل Insert,Edit,Delete,Post

ثانيا:

وضع عبارة SQL بAdoquery او Adocommand و من ثم تنفيذها

في حال استعملت Adoquery للتنفيذ استخدم التابع ExecSQL للتنفيذ

في حال استخدمت Adocommand المثال في الاعلى يوضح طريقة الاستخدام

حيث يمكنك وضع تعليمات DML او DDL او DCL ضمن خاصية SQL و الذي يحدد صلاحية SQL المكتوبة هو DBMS المستخدم

DML تعني Insert,update,delete,select

DDL تعني Create table, create database ...

DCL تعني استخدام مثل Revoke,deny

ثالثا:

استخدام Stored Procedure مبنية في SQL server و من ثم الربط معها عن طريق المكون Adostoredproc

حيث يمكنك مثلا بناء اجرائية تقوم بالعمليات الثلاثة (Insert - update - delete) بنفس الوقت على كل الجداول

حيث تمرر لهذه الاجرائية بارمترات تدل على ماذا سوف تفعل الاجرائية و من ثم تقوم بالادخال او الحذف او التعديل

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

و يمكن ايضا عمل ثلاثة اجرائيات تقوم كل واحدة بعمل احد ما سبق اما اضافة او حذف او تعديل

اي الطرق السابقة هي الافضل:

الطريقة الاولى هي الاسهل و الاسرع في بناء التطبيق و لكن بالنسبة للأداء فتعتبر الطريقة الثانية و الثالثة هي الافضل خصوصا اذا كنت تتعامل مع شبكة

اقتباس
استطعت ان اكتب كود يتقيد بالشروط اعلاه و لكن الطريقة التي استخدمتها  سيئة جدا و صعبة الفهم يعني بأختصار هي اقرب لصيني من اي لغة اخرى

هل تقصد اخي الكريم كيفية ضبط الاخطاء اي منع المستخدم من عدم اختراق قواعد تماسك وسلامة قاعدة البيانات؟

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

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

#8

اخي waeldalol شكرا جزيلا لك

اقتباس
هل تقصد اخي الكريم كيفية ضبط الاخطاء اي منع المستخدم من عدم اختراق قواعد تماسك وسلامة قاعدة البيانات؟

كنت اقصد كيف اجعل الكود الخاص بي قابل للصيانه :) وقد اجبت عليه و خصوصا استخدام Store Procedures.

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

على العموم الف شكر لك و حقيقة استفدت كثير من مشاركتك

اخوكم Whale

:)

تم تعديل هذه المشاركة بواسطة Whale في 2 أبريل 2006 في 09:59

#9

الحمد لله انك استفدت من مشاركتي و هذا ما سوف يكسبني اجر إن شاء الله

بالمناسبة ما هو اسمك لم افهم ما هو Whale

هال او وهال او هالي او هو اسم رمزي لك

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

هذا طبعا يحدده الزبون عند العقد و يتم الاتفاق عليه مسبقا

وكل شيئ له ثمنه :lol: :lol:

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

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

#10
اقتباس
هذا طبعا يحدده الزبون عند العقد و يتم الاتفاق عليه مسبقا

وكل شيئ له ثمنه

حياك الله فعلا اصبت :D

اه اسمي معناه الحوت و ينطق ويل (h)

تحياتي

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

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