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

كيف تبني تطبيق قواعد بيانات في دلفي

مغلقرائج
بدأه Wael Dalloul في 30 أبريل 2006 · 46 رد · 50,416 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#26
اقتباس
لدي سؤال : الان عند الاتصال عن طريق الكود ، فهمت من كلامك انه لابد تكون الاداة موجودة على الفورم حتى لو كنت متصل عن طريق الكود ؟!

لا ليس من الضروري ان تكون الاداة موجودة على الفورم, فيمكن انشاءها بالكود وضبط الخصائص لها و هذا يمكنك عمله مع اي اداة سواء كانت مرئية او غير مرئية عند run time

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

اقتباس
ويا ليت توضح أيهما أفضل استخدام ADOTable أم ADOQuery

بشكل مبدأي كلهما يستخدم dataset للتعامل مع البيانات

adotable:

يستخدم للربط مع جدول و لا يمكن كتابة استعلامات بلغة SQL به

adoquery: تستخدم لكتابة استعلام SQL و جلب النتائج الخاصة به و هنا يمكن الربط بين اكثر من جدول

سوف يتم الشرح عنهما بالتفصيل في المستقبل القريب باذن الله

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

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

#27

السلام عليكم

الدرس الثامن: ربط تطبيق دلفي مع مخدم قواعد بيانات SQL Server

في هذا الدرس سوف نتعلم كيف نقوم بربط دلفي مع قاعدة بيانات SQL Server و عمل مثال بسيط نقوم من خلاله بالتعامل مع قاعدة بيانات

الفرق بين SQL Server, Access؟ او بمعنى اخر متى استخدم Access و متى استخدم SQL Server؟

بشكل مختصر جداً

الاثنين يستخدمان كمدير لقواعد البيانات و لكن هناك اختلافات كبيرة عليك اخذها بالحسبان عند تحليل مشروعك لكي تعرف اي منهما سوف تختار؟

Access: يعتبر مفيد جدا للمشاريع الصغيرة(لا تعمل على شبكة, حجوم البيانات صغيرة, لا تهم سرعة التنفيذ)

SQL Server: يعتبر مفيد للمشاريع المتوسطة و الكبيرة(تعمل على شبكة, حجوم بيانات كبيرة نوع ما, نحتاج الى سرعة في التنفيذ)

عند تحليل مشروعك تتعرف على الامور السابقة و بالتالي تستطيع تقرير على اي منهما سوف تعمل. و لكن لا تنسى انه هناك خيارات اخرى مثل Oracle او Paradox .....

ملاحظة: هناك شركات تجبرك على مخدم قاعدة بيانات مثلا في احد المناقصات قد يتم ذكر انّنا نريد قاعدة البيانات على مخدم Oracle او SQL Server او.... و هنا يكون الخيار لهم.

فكرة هامة: احببت ان اذكرها هنا

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

و لكن هناك اختلاف هام بين بناء البرج و بناء تطبيق قواعد البيانات

هو انه يمكنك في اي وقت تغيير مدير قواعد البيانات و وضع مدير قواعد بيانات اخر بينما اذا اردنا ان نغيير الاساسات في البرج علينا ان نهدم البرج و نعيد بناءه من جديد

طبعا الامر ليس بهذه السهولة مع تطبيق قواعد البيانات و لكن اسهل بكثير من هدم البرج

حيث لتغيير مدير قواعد البيانات علينا التعديل في البرنامج لكي يستخدم Driver او صلة وصل او واجهة تخاطب لكي تلائم مدير قواعد البيانات الجديد, امر اخر و هو انه هناك اختلاف في لغة SQL التي يتم من خلالها التخاطب بين التطبيق و بين قاعدة البيانات من مدير قواعد بيانات الى اخر, فإذا تم استخدام تعليمات SQL خاصة بمدير ما علينا تغييرها لكي تلائم المدير الجديد لذلك ينصح الابتعاد عن استخدام تعليمات SQL الخاصة بمدير قواعد بيانات ما قدر الامكان و استخدام تعليمات SQL ال Standard مثل(لمعيار SQL-99 أو ما يطلق عليه SQL3) طبعا اذا كانت تؤدي المطلوب و الا سوف نتضطر الى استخدم تعليمات SQL الخاصة.

الان بعد ان قررنا اننا سوف نعتمد على SQL Server كمخدم لقواعد بياناتنا دعونا نرى كيف يمكن ربطه مع دلفي او كيف يمكن ان نخاطب SQL Server من دلفي

طبعا علينا بناء قاعدة البيانات قبل البدء لذلك اعددت ملف word تتعرف من خلاله على كيفية بناء قاعدة بيانات بشكل بسيط مع معرفة كيفية بناء جدول لكي يتم الربط معه من خلال تطبيقنا.الملف موجود في المرفقات

ملاحظة: في الملف المرفق تم الاعتماد على الاداة Enterprise Manager لانشاء قاعدة البيانات, حيث انه من الممكن انشاء قاعدة البيانات باستخدام تعليمات SQL و لكن للسهولة تم الاعتماد على Enterprise Manager.

طبعا اذا اردت ان تبني قواعد بيانات تستند على SQL Server عليك معرفة المزيد المزيد من المعلومات عنه لذلك انصحك بالذهاب الى قسم SQL Server لحصول على مراجع و مشاركات مفيدة او يمكنك الاعتماد على الانترنت او قراءة كتب فهناك كتب كثيرة تشرح عن SQL Server.

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

و نقوم بوضع Adotable و DataSource و DBNavigator و DBEdit و Labels و DateTimerPicker كما في الشكل التالي:

pic1(1).JPG

الان نأتي الى مرحلة هامة و هي عمل Connection String للتخاطب مع SQL Server

قم بتعليم Adotable و من ثم اذهب الى الخاصية Connection String التي سبق و تحدثنا عنها قم بالضغط على الزر الذي عليه ثلاث نقاط في الخاصية Connection String سوف تظهر لك واجهة تم الحديث عنها سابقا قم باختيار Build بعدها سوف تظهر لك الواجهة التالية قم باختيار SQL Server كمزود لقاعدة البيانات كما في الصورة التالية:

pic2(1).JPG

و من ثم اذهب الى ال Connection سوف تلاحظ اختلاف بين ما هو مطلوب منك ان تعبئه في SQL Server و بين ما قمت بتعبئته مسبقا باستخدام Access.

الامور المطلوبة هنا هي

1- اسم المخدم(Sever Name)

اسم المخدم يعبر عن اسم الحاسب الذي يعمل عليه SQL Server و الذي عليه قاعدة بياناتنا لذلك عليك في هذا الحقل تعبئة اسم الحاسب الذي تعمل عليه

ملاحظة: عندما يكون هناك اكثر من نسخة SQL Server على نفس الحاسب يتم الوصول الى النسخة التي نريد التعامل معها عن طريق وضع اسمها بعد اسم الحاسب server name\Instance Name

يمكنك كتابة كلمة LocalHost للدلالة على انني اعمل على نفس الحاسب او استخدام نقطة(.) تعمل نفس الشيئ

2- نمط الحماية(Authentication Type)

هناك نوعين للحماية في SQL Server

الاول هو Windows Authentication و هنا يتم طلب حساب Windows للدخول الى SQL Server

الثاني هو SQL server Authentication و هنا يطلب منك اسم حساب login مع كلمة سر للسماح لك بالدخول الى SQL Server

بما انك تعمل من نفس الحساب الذي قمت من خلاله يتم اضافة هذا الحساب تلقائيا الى SQL Server

3- اسم قاعدة البيانات(Database Name)

كما رأيت عند انشاء قاعدة البيانات هناك اكثر من قاعدة بيانات تعمل على المخدم لذلك علينا تحديد قاعدة البيانات التي نريد التعامل معها

الان في الحقل Server Name قم بوضع نقطة(.)

ثم اختر Windows Nt Integrated scurity للدلالة على اننا سوف نستخدم Windows Authentication

و اختر اسم قاعدة البيانات التي قمنا بانشاءها MSQLDB كما في الشكل التالي:

pic3(1).JPG

بعد ذلك قم بالضغط على الزر Test Connection لكي تفصح هل تم الاتصال مع قاعدة البيانات بنجاح ام لا؟

ثم قم بالضغط على زر Ok و من ثم Ok.

تهانينا لك: فقد قمت الان باكمال عمل connection string ناجح مع قاعدة بيانات SQL Server

بعد الانتهاء من ضبط خاصية connection string قم الذهاب الى الخاصية TableName هنا سوف يظهر لك جميع الجداول الموجودة في قاعدة البيانات قم باختيار الجدول الذي قمنا بانشاءه عند انشاء قاعدة البيانات

الان قم بضبط الخاصية DataSet للاداة Datasource على القيمة ADOTable1 طبعا اذا لم تقم بتغيير الاسم

و من ثم قم بربط الخاصية DataSource للاداة DBNavigator على القيمة DataSource1

و من ثم قم بربط الخاصية DataSource للكل ادوات DBEdit على القيمة DataSource1 و قم باختيار اسماء الحقول المناسبة لك منها

سوف تلاحظ ان المكون DateTimePicker لا يحتوي على الخاصية DataSource؟ لا تستغرب فهذا المكون هو ليس مكون قواعد بيانات و علينا ربطه يدويا مع الحقل BirthDate الموجود في قاعدة البيانات

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

procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOTable1.Open;
end;

قم بعد ذلك بعمل Run اي F9 لتشغيل البرنامج

ملاحظة: لا تقم بتبئة قيم في الحقل ID لانه سوف يأخذ القيم بشكل تلقائي

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

وظيفة:

عمل التطبيق السابق مع ربط المكون DateTimePicker مع الحقل المقابل له في الجدول؟

اتمنى لكم المتعة في تطبيق ما سبق

في الدرس التالي سوف نتكلم عن كيفية عمل Connection String ل Sql server بشكل dynamic

و في الدرس الذي يليه سوف نتعرف على مفهوم DataSet و هنا سيتضح لك الكثير الكثير من الامور و سوف تعرف ماذا يعني Adotable ما هي Adoquery و بقية مكونات التخاطب مع قاعدة البيانات.

الى اللقاء و السلام عليكم

New_SQL_Server_Database.rar

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

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

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

#28

كيف يمكن الربط من خلال الكود ياريت لو بمثال و البحث

#29
اقتباس
شكرا أخ waeldalol

بصراحة ذكرت كل شيء عن قواعد البيانات

شكرا لك

نحن الى الان ما زلنا في بداية الطريق و هناك الكثير الكثير من الامور التي يجب ان نكملها :) ولكن ارى الناس نيام ولا يوجد تفاعل حتى في امور سهلة للغاية :huh:

اقتباس
كيف يمكن الربط من خلال الكود ياريت لو بمثال و البحث

غدا باذن الله سوف اتكلم عن الربط بشكل ديناميك مع SQL server حيث نحتاج الى عمل واجهة يتم من خلالها ادخال اسم المخدم و اسم قاعدة البيانات و نوع الحماية

و في حال كان نوع الحماية SQL Auth نحتاج الى username & password

البحث مهم جدا سوف اقوم بتغطيته بعد شرح مفهوم ال Dataset باذن الله

و لكن لي سؤال: هل هناك احد قرأ الدرس السابق وحاول تطبيق ما به؟ هل من احد يقوم بعمل الوظيفة التي اعطيت في الاسفل؟!!

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

و عندها سوف اكمل مشواري مع API (h)و sys internals التي شخصيا استمتع بقراءة كل شيئ عنها و لن اعود للحديث عن Database نهائيا :D

تم تعديل هذه المشاركة بواسطة waeldalol في 28 أكتوبر 2006 في 22:51

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

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

#30

السلام عليكم

الاخ وائل كان لدى بعض المشاكل مه ال sql server لهذا السبب تأخرت :(

المهم

لتخزين التاريخ من datetimepicker الى الجدول نكتب

	adotable1birthdate.value:=datetimepicker.date

بالنسبة الى استطيع عمل هذا اذا طلبت منى ان اكتب الكود فى ال button اما بالنسبة لل dbnavigator فلا اعلم بعد اين يمكننى كتابة الكود

ومكن ايضا كتابة

   adotable1birthdate.value:=formatdatetime('yyyy/mm/dd',datetimepicker.date);

انا بالانتظار لادرج المثال

#31

السلام عليكم

بعد بحث وهى ربما المرة الثانية التى ابحث فيها عن حل لمشكلة ما فى ال help ثم اجد له الحل

والحل كان فى onclick event وهذا الكلام لمن لم يكن يعرف اما من كان يعرف فالحمد لله

المثال فى المرفقات يا اخى وائل وارجو ان تتم الدروس جزاك الله خيرا

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

Project1.rar

_____________.rar

تم تعديل هذه المشاركة بواسطة c_vita في 18 نوفمبر 2006 في 19:34

#32
اقتباس
بعد بحث وهى ربما المرة الثانية التى ابحث فيها عن حل لمشكلة ما فى ال help ثم اجد له الحل

والحل كان فى onclick event وهذا الكلام لمن لم يكن يعرف اما من كان يعرف فالحمد لله

المثال فى المرفقات يا اخى وائل وارجو ان تتم الدروس جزاك الله خيرا

المثال الذي وضعته لا يعمل :D بسبب انك استخدمت الحدث Onclick و الذي يحصل بعد تنفيذ العملية على ال Dataset, وسوف يظهر لك رسالة خطأ بذلك

كما يجب فحص الزر اذا كان post ام لا

:) بالنسبة لوضع قيمة DateTimePicker في حقل ما و ذلك باستخدام DBNavigator هناك طريقتان:

1- الاولى استخدام الحدث BeforeAction لل DBNavigator حيث يشتعل هذا الحدث عند الضغط على زر ما و لكن قبل تنفيذ الحركة اي

مثلا لو ضغطنا حفظ post فسوف يشتعل الحدث قبل عمل post على dataset. كما يلي

procedure TForm1.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button= nbPost then
	ADOTable1BirthDate.Value:= DateTimePicker1.Date;
end;

2- استخدام الحدث BeforePost لل Adotable المستخدم لوضع القيمة و ذلك كما يلي:

procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
	ADOTable1BirthDate.Value:= DateTimePicker1.Date;
end;

كما يجب عرض القيمة الموجودة في الحقل في ال Datetimepicker و ذلك عند التنقل بين السجلات, و هنا يمكن استخدام الحدث AfterScroll لل Adotable او استخدام الحدث Onclick,,,,,,

لا تخف سوف اقوم باكمال هذه الدروس باذن الله, فصاحبكم لا يستسلم بسهولة,,, وانما فقط كنت اريد ان اعرف هل هناك من يستفيد من هذه الدروس ام لا :^)

ترقبوا الدرس القادم, في مدة اقصاها السبت القادم إن شاء الله

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

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

#33

السلام عليكم

هذا التعديل فى المرفقات وبالانتظار :rolleyes:

___________________________.rar

#34

بسم الله الرحمن الرحيم

على الرغم من أنني لم أكن أهتم ب SQL SERVER إلا أنا حرص الأخ وائل على خلق تفاعل في هذا الموضوع , دفعني إلى تطبيق ما في القسم الثاني من الدرس. فقد كنت أنوي التعامل مع الأكسس فحسب.

عموما, أنا لا أملك SQL SERVER كما هو الحال لكثير من الإخوة , لكنني قمت بإنشاء قاعدة بيانات بالأكسس و تحويلها إلى قاعدة بيانات SQL من نفس البرنامج المتوفر لدى الجميع بالطبع.ما أردت قوله هنا أن باقي الأخوة الذين لا يملكون SQL SERVER يستطيعون إستعمال الأكسس لبناء و تحويل قاعدة بياناتهم و هذا بعد تثبيت MicroSoft Desktop Engine التي تأتي مع حزمة الأوفيس. و هكذا يمكن متابعة الدروس دون أي عائق.

}النقطة الأخرى التي أود الإستفسار عنها هي أن مشكل مسار قاعدة بيانات أكسس لا يظهر مع SQL , فهل هذا يعني أن توزيع برنامج مرتبط بهذا النوع من قواعد البيانات يشترط و جود SQL SERVER في جهاز الزبون ؟.

إن كان كذلك هل من بديل شرط أن يكون أقوى من الأكسس؟ {

فيما يخص الوضيفة هي جد صعبة لمبتدئ في قواعد البيانات مثلي.حتى أن النقاش السابق لم أفهم منه شيئا . فمن أين أتى ADOTable1BirthDate.

باستخدام الكود السابق تظهر رسالة خطأ أن الأداة السابقة غير مصرح بها.

#35
اقتباس
عموما, أنا لا أملك SQL SERVER كما هو الحال لكثير من الإخوة , لكنني قمت بإنشاء قاعدة بيانات بالأكسس و تحويلها إلى قاعدة بيانات SQL من نفس البرنامج المتوفر لدى الجميع بالطبع.ما أردت قوله هنا أن باقي الأخوة الذين لا يملكون SQL SERVER يستطيعون إستعمال الأكسس لبناء و تحويل قاعدة بياناتهم و هذا بعد تثبيت MicroSoft Desktop Engine التي تأتي مع حزمة الأوفيس. و هكذا يمكن متابعة الدروس دون أي عائق.

هذا الكلام صحيح, حيث بعد تثبيت MSDE يمكنك التعامل معه من خلال access و حتى يمكنك عمل واجهات Access تستند على قاعدة بيانات SQL server

اقتباس
النقطة الأخرى التي أود الإستفسار عنها هي أن مشكل مسار قاعدة بيانات أكسس لا يظهر مع SQL , فهل هذا يعني أن توزيع برنامج مرتبط بهذا النوع من قواعد البيانات يشترط و جود SQL SERVER في جهاز الزبون ؟.
في SQL server لا يوجد شيئ اسمه مسار و انما هناك شيئ اسمه اسم المخدم و اسم قاعدة البيانات,

طبعا يجب تنصيب SQL Server عند الزبون و ذلك قبل تنصيب البرنامج لكي نستطيع عمل Attach لقاعدة البيانات التي لدينا عليه قبل تشغيل البرنامج

اقتباس
فيما يخص الوضيفة هي جد صعبة لمبتدئ في قواعد البيانات مثلي.حتى أن النقاش السابق لم أفهم منه شيئا . فمن أين أتى ADOTable1BirthDate.

باستخدام الكود السابق تظهر رسالة خطأ أن الأداة السابقة غير مصرح بها.

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

بالنسبة ل ADOTable1BirthDate هذا التعريف يتولد عند ضغط نقرتين على adotable و من ثم اختيار addfields لكي يتم تعريف الحقول كمتحولات

اذا لا تريد هذا يمكنك الوصول الى الحقل birthdate و ذلك من خلال ما يلي

ADOTable1.FieldByName('bithdate').value

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

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

#36

عسى ان يكون خيرا :unsure:

C_vita: هناك مشكلة في المنتدى البارحة كانت, و لم استطع اضافة المشاركة, سوف احاول اليوم باذن الله

#37

السلام عليكم

السلسة والحمد لله مفيدة أخ ولئل جزاك الله خيرا

بس في أمور ما وجدتها بين الأسطر وهي التالي

خليني ابدأ بمشروع لي سأبدؤه الأن تباعا وأرجو تصحيح أي خطأ وتوجيهي للحل الأمثل

أنا أريد انشاء قاعدة بيانات لادخال مشتريات (تتألف من بطاقات موبايل والبطاقات تتألف من أقسام عدة) أي برنامج محاسبة لكن الاصناف ستون بطاقات فقط

طريقة تصميم الجداول سأوردها بعد قليل لكن لي سؤال قبل البدء

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

لذا قبل الجداول ماذا اختار هل أكسس أم ماذا

للعلم حسب حاجتي انا اريد البرنامج على جهازي لاني اعمل بمجال البطاقات اي ليس للبيع او الشراء

على كل ان كان الحل الامثل هو اكسس فالجهاز اذا مو نازل عليه الاوفس فماذا احتاج بالضبط اي ما هو محرك الاكسس كملف او ملفات!! هي المعلومة لم تذكر بين الاسطر!!!

ثم سؤال اخر:

تعليمات ال sql الستاندرد هل هي نفسها اللي عطيت لمحة سريعة عنها بالمشاركة!!

لنفرض الان اني اخترت الاكسس (اذا لأ صوب لي رجاء) ونسخت الملفات لمحرك الاكسس لنبدأ بتخيل شكل الجداول

الجدول الاول: هو جدول المزودين (اي كل ما يخص الذين اشتري منهم البطاقات) ويتضمن:

رقم تعريفي id

اسم الموزع

عنوانه

هاتف الثابت

الهاتف الجوال

ملاحظات

(اذا ممكن معلومات اكثر خبروني)

الجدول الثاتي هو جدول الزبائن (اي ما يخص الذين ابيعهم البطاقات) ويتضمن:

رقم تعريفي

اسم الزبون

عنوانه

الهاتف الثابت

الهاتف الجوال

ملاحظات

(ممكن نزيد المعلومات)

الجدول التالت هو جدول الاصناف يتضمن:

(للعلم كما تعلم بما انك بدمشق نوجد بطاقات ياهلا واريبا وكل منها عدة اصناف حسب الوحدات) فهل اضع كل صنف لوحده؟؟؟

اي ياهلا 200 وحدة وياهلا 400 وهكذا!!! مع العلم ان السعر ل400 وحدة هو ضعف سعر 200 وحدة

انا اتوقع تفصيل الاصناف بالجدول بما انها ستحمل اي كل صنف له رقم تعريفي خاص به اليس كذلك؟

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

رقم تعريفي للصنف

اسم الصنف

لا اتوقع اني احتاج غير ذلك!!

الان بدأ الجد

شلون بدي ساوي جدول المشتريات والمبيعات ؟؟؟؟؟

وشو أحتاج جداول ايضا؟؟؟؟

لنفرض بدي ساوي جدول المشتريات

يتكون من :

الرقم التعريفي للمزود

الرقم التعريفي للصنف

الكمية

الخصم

السعر الاجمالي

التاريخ

(لنفرض اني اشتريت من المزود زيد الصنف ياهلا ذو 200وحدة والصنف اريبا ذو 1000 وحدة هل سيكتب ذلك بالجدول على سطرين!!!)؟

لن أستمر حتى اجد ان بداية عملي صحيحة

للعلم كل حقول الارقام التعريفية ستكون مفتاح اساسي

اكيد ساربط جدول المشتريات بجدول المزودين راس لراس

وايضا جدول المبيعات بجدول الزبائن راس لراس

وجدول الاصناف بجدولي المبيعات والمشتريات كل منهما راس لراس

شكرا اخ وائل وانتظر الاجابة

ارجو ان تعتبر هذه الاسئلة وهاذا المشروع هو اقصى درجات التفاعل معك :D

مو حلو ة وانا طالب معلوماتية اطلب من مبرمج يساويلي اياه صحيح!!! :D

والسلام عليكم

#38

السلام عليكم

الاخ عصام 7 اذا لم يخطىء ظنى قان المساعدة التى ستجدها فى منتدى قواعد البيانات سوف تغنيك لان ما طرخته هو قواعد بيانات اكثر من انه تصميم

ولا تقولى انك ما اتكلعت على هذا الموضوع الاكثر من رائع :unsure:

شوف الموضوع وقولى

/index.php?showtopic=35369

اما الاخ العزيز وائل فوالله انى لارجو ان يكون المانع خيرا :huh:

#39
اقتباس
السلام عليكم ورحمة الله وبركاته

أسس قواعد البيانات و الطريقة الصحيحة لتعلمها من الصفر للكاتب ( خبير قواعد البيانات ) InternetMaster ، دورة متكامله .

تجدون هذا الموضوع في الرابط التالي :

/index.php?showtopic=35237

بس للاسف الرابط قديم او معطل!!!

اما هالرابط

/index.php?showtopic=57390

فبالانكليزي وايضا الملفات كبيرة وكتيرة!!!

انا اعتبر مشاركتي او مشروعي كوظيفة وطبعا لا اريد الا المساعدة زاهم مساعدة لانه بعد اعتماد الجدداول ساكون تحت الامر الواقع وهو جداول محددة وساتعامل معها بعبارات sql اما الواجهات فهي مسؤوليتي

فقط أريد دفعة للامام حتى لا اجد اي ارباكات بمنتصف الطريق :s

#40

السلام عليكم, اسف جداً لتأخري وذلك بسبب ضيق الوقت,و بسبب انشغالي بمشاركة ال DLL, ارجوا ان تعذروني.

قبل البدء بالدرس: احببت ان اذكركم اين نحن الان:

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

كنت اريد ان استعرض كيفية الربط مع اغلب انواع مخدمات قواعد البيانات المعروفة و لكن سوف اقف فقط عند SQL Server و لن اكمل الى البقية و ذلك بسبب ما يلي:اولا: عدد الذين يدخلون قسم الدلفي قليلون نسبيا مقارنة بالاقسام الاخرى , و الثاني: بسبب ان من يهتم منهم بقواعد البيانات ايضا لا يشكلون الا جزء صغير,

السبب الثالث و الاهم: ان الربط بين نوع مخدم ما و بين اخر لا يختلف كثيرا لذلك سوف نقوم الان بالربط مع SQL Server بشكل ديناميكي و من ثم نقوم بالعودة الى اكسس لشرح المفاهيم المتعلقة بدلفي في التعامل مع قواعد البيانات, حيث انّ الفرق الاكبر في التعامل مع قواعد البيانات في دلفي هو فقط يكون بعمل الاتصال مع المخدم و باقي الامور متشابهة تقريبا.

الدرس التاسع: كيفية ربط SQL Server مع التطبيق بشكل Dynamic اي اثناء ال Run Time

لماذا نحتاج الى ان يتم الربط بشكل ديناميكي مع قاعدة البيانات و ليس بشكل ثابت؟

السبب في ذلك هو انه قد تختلف الاشياء و المسميات بيننا و بين الزبون الذي سوف نقوم ببيعه البرنامج فمثلاً في الدرس السابق قمنا بالربط بين تطبيق دلفي و بين مخدم قواعد بيانات SQL Server و عندما قمنا ببناء ال connection string قمنا بذلك في وقت ال Design time اي وقت التصميم

الان ماذا لو كان اسم المخدم(اقصد DBMS) لدى الزبون مختلف عن اسم المخدم الذي قمنا بوضعه اثناء تصميمنا للبرنامج؟, ماذا لو كان الزبون لا يريد ان يضع قاعدة البيانات على نفس الكمبيوتر و انما يضعها على حاسب اخر موجود عليه مخدم قاعدة البيانات ؟, ماذا لو اراد الزبون تغيير نمط الحماية؟ ماذا لو؟؟؟ هناك الكثير من الاسئلة و التي جوابها يجب ان تدع الزبون هو من يقرر ما هو اسم المخدم و ما هي اسم قاعدة البيانات و ما هو نمط الحماية الذي يريد ان يستخدمه و ان يستطيع ان يدخل اسم المستخدم(UserName) و كلمة المرور(Password) في حال كان نمط الحماية هو(SQL Authentication)

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

قبل البدء في عمل اتصال بشكل ديناميكي قد يخطر على بال احدكم السؤال التالي:

كيف سوف نقوم بربط قاعدة البيانات التي قمنا نحن بانشاءها على المخدم عند الزبون؟

هناك طريقتان : الاولى ان تقوم بارفاق ملفات قاعدة البيانات التي قمت بانشاءها مع التطبيق و من ثم تقوم بربطها على المخدم الذي عند الزبون و ذلك باستخدام تعليمة(Attach) طبعا اولا نتصل على قاعدة البيانات master لكي نستطيع ان ننفذ تعليمة الربط(Attach), هناك طريقة اخرى لربط قاعدة البيانات مع المخدم غير استخدام تعليمة attach و هي باستخدام DMO و هي عبارة عن ملف com مقدم من قبل مايكروسوفت تستطيع باستخدامه عمل كل ما يستطيع برنامج Enterprise manager .

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

الذي يحدد اي الطريقتين سوف نختار هو انت, وذلك بالاعتماد على الظروف التي تحيط ببرنامجك فمثلا لو كان البرنامج الذي سوف تبيعه للزبون هو برنامج لا يحتوي على بيانات و الزبون هو من يقوم بانشاء هذه البيانات مثل برامج المحاسبة مثلا, هنا يفضل انشاء قاعدة البيانات عند الزبون

اما اذا كانت قاعدة البيانات التي لديك تحتوي على بيانات هنا الطريقة الاولى - و هي ارفاق الملفات - هي التي يتم استخدامها,,سوف نتكلم في درسنا لهذا اليوم عن كيفية ربط قاعدة البيانات مع التطبيق وليس انشاءها من جديد.

هل تعلم ما هي الملفات المتولدة عن انشائك قاعدة بيانات في SQL Server و التي عليك ارسالها مع التطبيق؟؟

هناك بشكل مبسط نوعان الاول لاحقته MDF و الثاني لاحقته LDF و قد يكون هناك ملفات لاحقتها NDF لن اتحدث عن بنية ملفات قاعدة البيانات هنا, لانني افترض انه لديك خبرة في التعامل مع المخدم الذي تعمل عليه,,

في المثال الذي سوف يكون مرفقا مع هذا الدرس سوف تجد ملفان(mdf,ldf) و هما يشكلان قاعدة البيانات,

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

ما سوف نقوم بعمله هو واجهة شبيهة بالواجهة التالية تظهر عند اول مرة يقلع البرنامج بها و يمكن الوصول اليها من داخل البرنامج في اي وقت اراد المستخدم ذلك:

Pic4.GIF

هذه هي الواجهة التي نحتاج اليها لكي نجعل الامر يعمل بشكل ديناميك, حيث تحتوي على جميع البارمترات التي نريد ان نمررها في ال connection string الى المخدم

ماسوف نقوم بفعله هو ما يلي: عند اول اقلاع للبرنامج يكون اسم قاعدة البيانات مخفي و ذلك لانه نحن سوف نقوم بعمل Attach لها فلا داعي لكتابتها من قبل المستخدم و سوف تظهر الرسالة التي بالاحمر في اسفل الواجهة

اذا ضغط المستخدم على زر الغاء الامر سوف نقوم باغلاق التطبيق, اما اذا قام بكتابة اسم المستخدم و حدد نمط التحقق و بعد ذلك ضغط على زر موافق نقوم بتجريب عمل اتصال بالبارمترات المدخلة

هذا الامر يترتب عليه حالتين يا اما نجاح او فشل

الان اذا نجح الاتصال نقوم بعمل ربط(attach) لملفات قاعدة البيانات و بتسجيل هذه البارمترات في الريجستري , اما اذا لم ينجح الاتصال سوف نظهر رسالة خطأ للمستخدم تبين له اين الخطأ و تبقى واجهة الاتصال تظهر للمستخدم ما لم يتم عمل اتصال بشكل صحيح.

الان بعد الاتصال بشكل صحيح اذا اغلق المستخدم البرنامج و من ثم قام بفتحه مرة اخرى لن تظهر واجهة الاتصال له و انما سوف يعمل البرنامج بدون اي مشاكل, بعد عمل البرنامج يستطيع المستخدم اذا اراد ان يعدل على خصائص الاتصال و ذلك بالضغط على زر مخصص لذلك

المثال الذي يقوم بعمل كل ما سبق مع الكود في المرفقات, اتمنى ان تقوموا بتجربته و ان تناقشوني في اي نقطة غير مفهومة

ملاحظة: تأكد قبل تشغيل البرنامج من انّ SQL Server يعمل و ذلك بان تكون ايقونة ال SQL Server التي تظهر في الزاوية(notification area) لونها اخضر

في الدرس المقبل سوف نعود الى اكسس باذن الله, وسوف نأخذ كيف يتم عمل ازرار تؤدي نفس مهام ال DBNavigator.

و السلام عليكم

EX.rar

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

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

#41

السلام عليكم

يا اخ وائل ما هى الوحدة "uarman" ؟ او من اين اضيفها ؟ :(

#42
اقتباس
يا اخ وائل ما هى الوحدة "uarman" ؟ او من اين اضيفها ؟
هي مكون للاخ عروة لتعريب ال MessageBox

احذفها اذا اردت لن تؤثر إلا على التعريب الرسائل

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

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

#43

السلام عليكم

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

  Cmd.CommandText:=
	'IF EXISTS (SELECT * FROM master..sysdatabases ' +
	'WHERE  name = N' + '''' + 'MSQLDB' + '''' +')'
	+ ' EXEC sp_detach_db ' + '''' + 'MSQLDB' + '''' + ',' + '''' + 'true' + '''';
	Cmd.Execute;

	Cmd.CommandText:= ' EXECUTE sp_attach_db @dbname	= N' + '''' + 'MSQLDB' +'''' + ','
	+ ' @filename1 = N' + '''' + ExtractFilePath(Application.ExeName) + 'MSQLDB_Data.MDF'+ '''' + ','
	+ ' @filename2 = N' + '''' + ExtractFilePath(Application.ExeName) + 'MSQLDB_Log.LDF' + '''';
	Cmd.Execute;
  except
	MessageDlg('لا يمكن وصل قاعدة البيانات مع المخدم',mtError,[mbok],0);
	Result:= false;
  end;

علمت ماهو التابع cmd ولكن اختاج لفهم العبارات التى بين علامات التنصيص قبل ال cmd.execute فى الحالتين

#44
اقتباس
بعد دراسة الكود السابق الحمد لله فقد فهمته ما عدا جزئية لم يكتمل فهمها عندى بعد وهى

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

اقتباس
لمت ماهو التابع cmd ولكن اختاج لفهم العبارات التى بين علامات التنصيص قبل ال cmd.execute فى الحالتين

cmd هو ليس تابع و انما هو غرض(Object) من الصنف(Class)

AdoCommand و هو يستخدم عادة لارسال تعليمات الى قاعدة البيانات و لكن هذه التعليمات لا تعيد نتائج,,

بالنسبة ل Code T-SQL السابق: فهو يقوم بفحص وجود قاعدة البيانات على SQL Server DBMS , اذا وجدها يقوم بفك ارتباطها و ذلك باستخدام الاجرائية المخزنة(Stored Procedure) و التي اسمها sp_detach_db ابحث عنها في Books Online المرفقة مع SQL Server

اما التعليمة الثانية فهي تقوم بوصل قاعدة البيانات التي قمنا بتصميمها على DBMS و ذلك باستخدام اجرائية مخزنة اسمها sp_attach_db

ايضا ابحث عنها في Books Online لتعرف المزيد عن هذه التعليمة, و شكرا لك على المتابعة و انا جاهز لأي سؤال تريده :)

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

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

#45

طال الغياب اخونا العزيز وائل

#46

الاخوة الاعزاء ...

استاذي الكريم وائل ...

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

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

بسم الله ...

procedure TDatam.DataModuleCreate(Sender: TObject);// يتم الاتصال عند إنشاء سواء الفورم او الداتا مديول
var
f:string;

begin
try

Conn.Close;
 f:='FILE NAME='+ExtractFilePath(Application.ExeName) + 'cnn.udl';//تعريف مسار الملف الذي يحتوي على تعريفات الاتصال واسم الملف هو cnn.udl 
	Conn.ConnectionString:=f;

Conn.Open;//بافتراض ان اسم الاتصال conn

	except
	on exception do
	begin
	 MessageDlg('لم يستطع البرنامج الاتصال بالسيرفر', mtError, [mbOK], 0);
	  Conn.Connected :=false;
	 end ;
 end ;
end;

ماهو الملف الذي يكون امتداده udl؟ جرب ان تنشئ ملف txt جديد على سطح المكتب وغير اسمه بدلا من text.text إلى text.udl هل تغيرت ايقونة الملف ؟

جرب ان تضغط على الملف دبل كلك وإن لم تفلح اضغط الزر الايمن واختر خصائص :)

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

cnn.rar

تم تعديل هذه المشاركة بواسطة alswah في 3 مارس 2007 في 03:04

#47

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

اولا اود شكر الاخ وائل على الموضوع الممتاز

وثانيا اود شكر الاخ السواح على المشاركة الجميلة وكل الاخوة المشاركين

ثانيا انا كنت ماقراء الموضوع من الساعة 12 بليل والان الساعة 3 باليل

وكنت ماادعي يكون الموضوع مفتوح لليوم وكما لاحظت ماالو زمان واقف

وبما انه موضوع توب والاخ وائل وعد بدرس اخر عن الاكسل

اذا كان من الممكن ان تكمل الدروس اخ وائل ومشكور مسبقا

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

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