المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تعاريف و أمثلة بسيطة حول ق البيانات و ربط جدول بالدلفي،و بعض العمليات عليه/-1


nabilkeb
11-12-2008, 09:59 AM
السلام عليكم و رحمة الله و بركاته

هذا تعاريف و أمثلة بسيطة حول قواعد البيانات و ربط جدول بيانات بمشروع دلفي
بعض العمليات عليه: سنتناول إن شاء الله :
تعريف قواعد البيانات .
- الجداول : أساسيات + الإنشاء و التعديل
-إدراج جدول بمشروع دلفي و الاطلاع على محتوياته DbGrid مع التعديل.
- استعمال بعض المكونات الأخرى للاطلاع على محتويات الجدول ، و ادخال أو تعديل البيانات.
-استعمال (ادخال) قيم حقل لجدول معين ، من جدول آخر.
- خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة.
-برنامج بسيط لفتح أي ملف بيانات Paradox بالجهاز .

تعريف قواعد البيانات هي تركيب تستطيع من خلاله تخزين كمية ضخمة من المعطيات التي تربطها علاقات معينة، وحقيقة الأمر ما هي إلا ملف ككل الملّفات العادية، ولكن ما يميزها عن باقي الملّفات، هو قدرتك على كتابة المعطيات فيها وقراءتها منها، باستخدام الوسائل التي تمنحها لك برامج قواعد المعطيات، دون الحاجة إلى التعامل مع الملف مباشرة ، وهو ما يجعل الأمر أكثر سهولة وتنظيما بالنسبة لك. /- ولا مانع أن تخزن بياناتك في ملف خاص بك بالطريقة التي تريحك، ولكن استخدام قواعد المعطيات يوفر لك الكثير من الوقت والجهد. /-وهناك أنواع كثيرة من قواعد المعطيات، تبعا للشركة التي تنتجها والبرامج التي تنشئها، فهناك قواعد بيانات برنامج Access و برنامج SQL Server وهما من إنتاج ميكروسوفت، وهناك عشرات البرامج غيرهما من إنتاج شركات أخرى.../ يتبع /..

nabilkeb
11-12-2008, 12:51 PM
وتسمى هذه البرامج أنظمة إدارة قواعد المعطيات (Database Management Systems ، (DBMS
ومهمتها الأساسية أن تمنحك الوسائل والأدوات اللازمة لإنشاءِ قواعد المعطيات والتعامل معها،بأسهل طريقة وأفضل إمكانيات، بحيث تقوم بدور الوسيط بينك وبين المعطيات المخزنة في ملف قاعدةالمعطيات. ومهما كا ن نوع قاعدة المعطيات التي تتعامل معها، ومهما كانت طريقة تخزينها في الملف،فإن كل قواعد المعطيات تتبع قواعد أساسية وتحقق شروطا معينة متعارفا عليها دوليا، كما أنها كلها بلااستثناء تستخدم لغة الاستعلام المركبة Structured Query Language -SQL

وهي لغة خاصة لحفظ واسترجاع وتحديث المعطيات في قواعد المعطيات.


-الجداول : العنصر الأساسي في أي قاعدة بيانات هو الجدول ويتألف الجدول من أعمدة وأسطريدعى كل سطر سجل وكل عمود بحقل وبالتالي فإن السجل مكون من عدة حقول.
السجل الحالي : هو السجل الذي يقف مؤشر قاعدة البيانات عنده والحقل الحالي هو تقاطع السجلالحالي مع العمود الحالي حيث يمكنك دائمًا تحرير قاعدة البيانات عند السجل الحالي وفي الحقلالحالي (انظر الصورة 001)
يمكن أن تتكون قاعدة المعطيات من عدة جداول وهذه الجداول قد تكون مخزنة في ملف واحد (قاعدة بيانات أكسيس مثلا ) أو أن يكون كل جدول في ملف على حدة كما في قاعدة بيانات بارادوكس .
يعرف كل حقل (عمود) في قواعد المعطيات نوع المعطيات التي سيحويها فمثلا الحقل (الإسم) يكون من النوع نص ، و الحقل (تاريخ الإزدياد) من النوع Date .

*/ يوجد العديد من برامج بناء قواعد البيانات ويعتمد الأمر على نوع القاعدة التي تريد استخدامهافلبناء قاعدة محلية تستخدم جداول باردوكس هناك البرنامج Borland Paradox ولبناء جداولتستخدم Oracle هناك البرنامج Oracle 9i، ... وهكذا.
وقد زودتنا دلفي بأداة سهلة لإنشاء قواعد البيانات وتعديل الجداول بدون العودة إلى تلك البرامج ،حيث يوجد ضمن مجموعة أدوات دلفي البرنامج (DataBase Deskto)
(Module Base de données ) الذي يمكن عن طريقه تصميم العديد من أنواع جداول البيانات .

(انظر الصورة 002)


Field Name - 1 : اسم الحقل.
يوضع في هذا القسم اسم الحقل، وأسماء الحقول في جداول الباردوكس يجب أن لا تتجاوز 25 حرف،كما يمكن أن تحتوي على فراغات ويمكن أن يكون اسم الحقل باللغة العربية ولكن ينصح باستخدامأسماء حقول إنكليزية دائمًا وعدم احتوائها على فراغات وخاصة عند استخدام SQL ، كما يجب الابتعادعن بعض الأسماء المحجوزة في لغة SQL مثل SELECT أو From أو... Date


......../ يتبع /......

nabilkeb
11-12-2008, 02:58 PM
2-Type: نوع الحقل
يصف هذا الأخير نوع المعطيات التي ستخزن في هذا الحقل ، وهناك عدد من الأنواع التي يمكن أن ينتمي إليها الحقل ولمعرفة هذه الأنواع إضغط بزر الفأرة اليميني في العمود Typeأو اضغط على مفتاح المسافة Space عندما يكون العمود Typeفعالا، والجدول التالي يبين الأنواع التي توفرها جداول Paradox (انظر الصورة003)


-/ المفتاح الرئيسي (الأساسي) Key : اضغط بزر الفأرة الأيسر في هذا الحقل إذا أردت أن يكون هذا الحقل مفتاح رئيسي (شكل أو رمز نجمة ).
فما هو المفتاح الرئيسي ؟



-تأتي فاعلية نظام قاعدة البيانات العلائقية من القدرة على العثور على المعلومات المخزنة في جداول منفصلة بسرعة وتجميعها معًا باستخدام استعلامات ونماذج وتقارير . لكي يتم ذلك، يجب أن يحتوي كل جدول على حقل أومجموعة حقول تقوم بتعريف كل سجل مخزن في الجدول بشكل فريد، وتسمى هذه المعلومة المفتاح الأساسي للجدول.
متى قمت بتعيين مفتاحًا أساسيًا للجدول، يمنع إدخال أي قيم مكررة أو قيم "خالية .
هناك ثلاثة أنواع من المفاتيح الأساسية التي يمكن تعريفها :


المفاتيح الأساسية من نوع الترقيم التلقائي ، يمكن إعداد حقل الترقيم التلقائي لإدخال رقم تسلسلي تلقائيًا عند إضافة كل سجل إلى الجدول
. تعد أبسط طريقة لإنشاء مفتاح أساسي هي تعيين مثل هذا الحقل كمفتاح أساسي ولتعريف حقل ترقيم تلقائي اختر Auto Increment .
المفاتيح الأساسية من نوع الحقل المفرد :إذا كان لديك حقل لا يتضمن قيم فريدة مثل رقم الهوية الشخصية، يمكنك تعيين هذا الحقل على أنه المفتاح الأساسي .
ويمكنك تحديد مفتاح أساسي لحقل يحتوي بالفعل على بيانات طالما لا يحتوي هذا الحقل على قيم مكررة أو قيم خالية Null .
المفاتيح الأساسية من نوع الحقل المتعدد ، في الحالات التي لا يمكنك فيها ضمان وجود حقل فردي، قد يكون بإمكانك تعيين حقلين أو أكثر باعتبارهما مفتاحا أساسيا ، والحالة الأكثر شيوعا التي يحدث فيها ذلك هي الجدول المستخدم لربط جدولين آخرين في علاقة أطراف بأطراف Many to Many - على سبيل المثال، يمكن أن يربط جدول "مؤلفي الكتب" بين جدولي "الكتب " و"المؤلفين". ويتكون مفتاحه الأساسي من حقلي: "رقم الكتاب" و"رقم المؤلف". (و للمزيد من التفاصيل ، ارجع إلى كتاب لغة البرمج دلفي - ص69 - محمد خالد ناصر آغا )


*/ لفتح الجدول نختار File__Open__Table
*/ لتعديل الجدول نقوم بفتح الملف File__Open__Table ثم Restructure

ملاحظات:
1/ تخزن قواعد البيانات( Paradox) في نوعين من الملفات :
-ملفات من الامتداد Db حيث يتم تخزين معظم بيانات الجدول .
- ملفات من الامتداد Mbحيث يتم تخزين الأجزاء الكبيرة مثل المفكرات و الصور .....
2/ سرية المعلومات في قواعد المعطيات المحلية مثل Paradox, dBASE, FoxPro, Access. : ضعيفة جدًا يمكن كسرها بسهولة. فهناك مئات البرامج التي تستطيع اكتشاف كلمة سر القاعدة ، ويستطيع أي هاوي أن يدخل إلى جداولك والحصول على معلوماتها وتعديلها .عمليا أقوى قواعد البيانات من حيث السرية والسماحيات أيضا هي قواعد البيانات MS SQL Server- Oracle-MySQL

و هذه الأخيرة يمكن أن يصل حجم قواعد المعطيات فيها إلى كميات هائلة ( بلغ حجم معطيات إحدى شركات التسويق في أمريكا 3.6 تيرا بايت_ مأخود من الكتاب المذكور أعلاه). كما أنه يمكن لقواعد المعطيات هذه أن توجد على أجهزة مختلفة .
سرية المعلومات في هذه القواعد قوية جدًا ، كما أنها تعطي سماحيات للمستخدمين ، فموظف المكتبة المسئول عن إدخال أسماء الكتب لا يحق له الإطلاع على كمية المبيعات ......


- إدراج جدول بمشروع دلفي: نبدأ مشروعا جديدا و نضع العناصر التالية:
Table : _ الخاصية DatabaseName مسار ملف قواعد البيانات (Alias) يمكن انشاؤه أولابشكل مستقل ، تحت اسم معين وكتابة اسمه في هذا المكان ، أو ادراج المسار مباشرة . وللمزيد استعمل ميزة البحث بالمنتدى حول موضوع Alis.

_ الخاصية TableName ندرج اسم ملف قواعد البيانات .
_ نفعل الخاصية Active .
DataSource : نعطي الخاصية DataSet القيمة أو الإسم Table1
DBNavigator - DBGride: نربط هذين العنصرين مع DataSource1 من الخاصية DataSource

__ بهذه الطريقة نكون قد أدرجنا الجدول بالمشروع ، و يمكننا الإطلاع على محتوياته . كما يمكننا التعديل بإدخال المعطيات مباشرة على عنصر DbGrid ، و باستعمال العنصر DbNavigator (الإدراج-التعديل-الحفظ-السجل التالي،السابق.... كما يمكن على هذا العنصر استعمال كل الأزرار أو بعضها من الخاصية VisibleButtons)
......../ يتبع /......

nabilkeb
11-12-2008, 11:48 PM
- استعمال بعض المكونات الأخرى للاطلاع على محتويات الجدول ، و ادخال أو تعديل البيانات.


إنشاء عناصر الحقول TField :
يمكن استخدام محرر الحقول لتعريف لائحة من الحقول ضمن الجدول ( عنصر الجدول Table)
ومن أجل كل حقل تنشئ دلفي عنصر من النوع Tfield وهذا العنصر غير مرئي ولكن يمكن من خلاله الوصول إلى قيمة الحقل والتحكم بمواصفاتها .


_ لفتح صندوق حوار محرر الحقول اضغط مرتين على العنصر Table لتظهر النافذة المجاورة ، إضغط بزر الفأرة الأيمن في وسط هذه النافذة لتظهر قائمة اختر منها Ajouter tous les chapms - Add All Field عندها ستظهر حقول الجدول في هذه النافذة ، وفي هذه الحالة يمكنك تحديد حقل أو أكثر أو كل الحقول ثم تقوم بعملية سحب عادية بالزر الأيسر للفأرة إلى الفورم ، و سوف تلاحظ العنصر DataSource ينشأ تلقائيا و يربط بالعنصر Table.
كما يمكنك تعديل ترتيب الحقول (التي ستظهر على DbGrid) ، أو حذف أو إنشاء حقل معين

(ملاحظة : لا يحذف الحقل من ملف الجدول بذاته ، يعني بامكانك الحذف من هنا و عند فتح الجدول بطريقة أخرى سوف تجد كل الحقول المنشأة سلفا بواسطة DataBase Descktop موجودة ، كما بامكانك الإستعادة عن طريق خيار Ajouter des champs او Add Fiels).



_ بعد سحب الحقول إلى الفورم ، يخطر ببالك أنه بإمكانك عرض حقول الجدول و الإطلاع على البيانات بدون العنصر DbGrid ، ثم لاحظ إسم كل عنصر ، هل مرت معك هذه الأسماء ؟
إنها أسماء مكونات متواجدة بـالقائمة ControleBD ، ماذا يعني هذا ؟ يعني أنه بإمكانك إستعمال هذه المكونات على الفورم لتعرض فيها بيانات الجدول على طريقتك ، و تربط ما تحتاج إليه . و بدون توضيح للطريقة ، نقول لاحظ خواص نفس المكونات التي قمت بسحبها آنفا و اربط بنفسك ما تحتاج إليه من العناصر. و إن شئت اضف أيضا DbGrid +DbNavigator ومارس بعض العمليات ليتسنى لك معايشة الأمر.


_ هناك مكونات أخرى لك أن تجرب ما تسنى لك ، و سنتعرض للمكون DblookupCombobox في العنصر الموالي من الدرس أو الموضوع.
_ الآن : إذا استعملنا العنصر DbEdit أو DbComBobox ، و كان بالمشروع إحدى مكونات التجميل Skins التي لا تحتوي على تلك العناصر ، (ارجع إلى: http://www.delphi4arab.com/forum/showthread.php?t=481 )

_ فهل مظهر الواجهة بالعنصر DbComBobox أو sComBobox وكذلك DbEdit و sEdit يبدو نفسه (جميلا) ، لسبب بسيط جدا كهذا أو لأسباب برمجية ، نحتاج إلى إدراج عناصر غير عناصر DbNavigator فكيف الربط و التحكم بالجدول عن طريق هذه المكونات ؟

_ الأمر سهل ، سنجرب تطبيق بسيط جدا بواسطة العنصر MaskEdit :
انشئ كمثال نفس الجدول الموضح بالصورة 001 أعلاه ، الذي يحتوي على حقلين (بالإنجليزية) : Name - - B_Day . ضع العناصر Table - DataSource – DbGrid - DbNavigator و اربط الخصائص كما مر معنا ، ضع عنصرين Maskedit تحت اسم MaskEdit1 - MaskEdit2 ، ضع 6 أزرار تأخد الكابشن :
جديد – حفظ – تعديل – التالي – السابق – حذف.
*/ ملاحظة : لم نقم بوضع العناصر DbGrid – DbNavigator إلا لملاحظة التحكم في الجدول ، وإلا فلسنا بحاجة لها .
على الزر الأول حرر Table1.Insert;
على الزر الثاني حرر begin
{ Ajouter les donées / add data}
Table1.FieldValues['Name']:=Maskedit1.Text;
{ou bien / or
Table1.FieldByName('Name').AsString:=Maskedit1.Tex t; }
Table1.FieldValues['B_Day']:=Maskedit2.Text;
Table1.Post; { pour sauvegarder / for save }
end;
على الزر الثالث حرر Table1.ُEdit; على الزر الرابع حرر Table1.next;
على الخـامس حرر Table1.Prior; على السادس حرر Table1.Delete كما توجد أكواد عديدة أحرى ، و كما يمكنك استبدال العناصر المستعملة بعناصر أخرى مثل استبدال MaskEdit2 بـ : DateTimePIcker
فتحرر الكود البديل :
Table1.FieldValues['B_Day']:=DateTimePicker1.Date;

الآن نفد المشروع وجرب ادخال و تعديل البيانات مع الحفظ و الحذف . مارأيك ؟
/ ...يتبع ..../


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

nabilkeb
14-12-2008, 12:15 PM
استعمال (ادخال) قيم حقل لجدول معين ، من جدول آخر (2/1) :

- أثناء تصميمك لأي برنامج يستخدم قواعد البيانات ، فإنك لا تكاد تستغني عن شيء مهم ، و هو ربط جدول بآخر ، مهما كانت طبيعة هذا الربط و مهما كان الدافع لذلك . و لعل بعض الأمثلة كفيلة لتستوعب الحاجة و الطريقة.
لنفرض أن عندك جدول مركب من ثلاثة حقول : إسم الزبون - السلعة - تاريخ الشراء.
بحيث كلما اشترى زبونا أي سلعة ، يدرج بالجدول ، مثلا: الزبون (مصطفى محمد الأمين ) اشترى ( تلفازا) بتاريخ ( 14/12/2008) . فستقوم أنت بادخال هذه المعلومات بالجدول ، حسب الحقول .

كما أن الحقل الأول (اسم الزبون) من نوع نصي ، و فرضا أن أطول اسم لا يتعدى 25 حرفا ، فسيكون الحقل نصي بقيمة 25 .
و إذا علمنا أن كل حرف يخزن ، فسوف يحجز مساحة تخزين تقدر بــ2بايت (يعني 1 أوكتي أو إن شئت قل 8 بت) ، على هذا مساحة تخزين اسم الزبون (مصطفى محمد الأمين ) فستكون 17Byte .
بينما مساحة التخزين للعدد يصل إلى 32000 لا تزيد عن 2Byte ، و أظن ان الفرق بين القيمتين واضح جدا ، خصوصا إذا قلنا أن اسم الزبون سوف يتكرر معنا 1000 مرة مثلا.

ما رأيك الآن لو ننشئ الجدول المذكور بطريقة أخرى ، عوضا عن اسم الزبون ، سنضع رقم الزبون . و جدول آخر يحوي أسماء الزبائن ، كل زبون له رقم فريد مخصص له ، يميزه عن غيره ، يعني جدول آخر بحقلين (رقم الزبون) - (إسم الزبون) .

في هذه الحالة فإننا ندرج اسم الزبون (مصطفى محمد الأمين ) ، في الجدول الأول برقم و ليكن مثلا 133 . و حتى لو تكرر معنا 1000 مرة فلن يتعدى 2000 بايت ، على غرار الحالة الأولى التي يصل حجم التخزين فيها إلى 17000 . ( و بهذا نربح مساحة التخزين بالأضعاف المضاعفة ).
إلا أنك سوف تتسائل : ما الفائدة و نحن قد أضفنا حقولا للأرقام ، وبأي حال سوف ننشئ حقل لإسم الزبون ؟
....../ يتبع /.....

nabilkeb
14-12-2008, 03:08 PM
استعمال (ادخال) قيم حقل لجدول معين ، من جدول آخر (2/2) :

الجواب : الظاهر كذلك لكنك مخطئ .
التفصيل (نحسب الفرق بين الحالتين) : في الحالة الأولى لدينا اسم الزبون و السلعة (لا داعي للتعرض لحقل تاريخ الشراء مادام لا يوجد تغيير عليه) ،اسم الزبون يصل إلى 25 بايت ، و إذا فرضنا السلعة تأخد حجم 10 بايت ، فسيكون حجم التخزين الكلي إذا تكرر معنا الزبون 1000 مرة :
(25+10)*1000 النتيجة250000 .
في الحالة الثانية لدينا رقم الزبون + السلعة في الجدول الأول أي (2+10)*1000 النتيجة 20000 ، و في الثاني رقم الزبون + اسم الزبون أي( 2 + 25 ) النتيجة 50 و لا نضرب في 1000 لأن الإسم يحرر مرة واحدة فقط. . فيكون حجم التخزين الإجمالي في هذه الحالة 20000+50 النتيجة 20050
فهل 250000 أصغر من 20050 ؟ ثم كرر الأمر مع عدة زبائن ، هذا يتكرر 100 مرة و الآخر700 مرة و ....

هذه فائدة ، و هناك العديد من الفوائد نذكر مثلا:
- في الحالة الأولى على المستخدم ادخال في كل مرة اسم الزبون و في الثانية رقم الزبون ، فأي الحالتين أقرب لوقوع الخطأ ؟ و إذا كتب المستخدم (خطآ) في اسم الزبون ، فإن عليه تصحيح الإسم عدد مرات التكرار يعني لو ضل يكتب (مصطفى محمد أمين ) عوضا عن (مصطفى محمد الأمين ) فإن عليه تصحيح كل الأخطاء . و في هذه الخالة أيضا سنجم خطآ آخر ، فلو أراد البحث عن المبيعات المحققة مع الزبون (مصطفى محمد الأمين ) ، فإن كل الحقوق المحررة بصيغة (مصطفى محمد الأمين ) ، سوف تستثنى من البحث.
أما لو خطأ في الإسم في الحالة الثانية سوف يقوم بعملية التصحيح مرة واحدة . كذلك لو لم ينتبه لهذا الخطأ و أراد البحث عن المبيعات المحققة مع الزبون (مصطفى محمد الأمين ) فسوف تكون النتيجة لا شيء و هكذا سوف ينتبه للخطأ ، على غرار الحالة الأولى فلن ينتبه إذا أخطأ 10 مرات من 1000 .
- كذلك خفة البرنامج و سرعة التنفيد : فالبحث عن الرقم 133 أسرع بكثير من البحث عن (مصطفى محمد الأمين ) . . . . و هكذا . . . .

-// طبعا نستطيع أن نفعل نفس الشيء مع حقل السلع .
و القاعدة: كلما كان ممكنا ، قم بتقسيم المعطيات التي تتكرر كثيرا على أكثر من جدول ، و كلما زاد هذا التكرار زادت الحاجة لهذا التقسيم و عظمت الفائدة . و هذه العملية تسمى بالتطبيع Normalization .



العنصر DBLookupCombobox // الآن لدينا مثال مبسط :
لدينا 3 جداول . الأول به مجمل السلع يسمى المخزون - الثاني البيع - الثالث الشراء
الإستعمال: نريد إدخال نوع السلع بالجدول الأول ، بحيث لا نبيع (جدول البيع) و لا نشتري (جدول الشراء) إلا السلع المعينة أو الموجودة بجدول المخزون ، إضافة إلى مراعات الكمية التي تزيد بالشرلء و تنقص بالبيع .
التفصيل : الجدول الأول يحتوي حقلين : Produit- Qut. الثاني 3 حقول : مثل الأول + Client.
الثالث مثل الأول + Fournisseur.

لدينا 3 صفحات (فورم) .الرئيسية نربط بها جدول البيع . الثانية للمخزون . الثالثة للشراء.
- على الفورم الرئيسية نضع العناصر : لحجز أسم الزبونEdit1
لحجز السلع المراد بيعها DBLookupComboBox1
لحجز الكمية Edit2
و كذلك : Table1 - DataSource1 و نقوم بعملية الربط مع جدول البيع.
- نفس الشيء مع فورم الشراء.
- أما فورم المخزون : فنحتاج إلى : Table1 - DataSource1 - DBGrid1 و نقوم بالربط .

-الآن : العنصر DBLookupComboBox1 بالفورم الرئيسية نربطه بجدول البيع (حقل : السلعة) ، و يأتي بالمعطيات من الجدول (المخزون) بفورم المخزون (الفورم3) . بهذه الطريقة :
من الخاصية DataSource لهذا المكون نعمل DataSource1 يعني DataSource الذي يربط Tabla1 الخاص بالبيع (على هذه الفورم) ، ثم الخاصية التي تعلو الأولى مباشرة DataField نحدد الحقل (Produit) . نكون بهذا ربطنا العنصر ليؤدي قيمته بجدول البيع . الآن كيف يأتي بالقيمة من جدول المخزون : من الخاصية ListSource نضع القيمة Form3.DataSource1 يعني نربطه بالجدول المتواجد بالفورم 3 (المخزون) ، و نحدد حقل هذا الأخير من الخاصية keyField نعطيها اسم الحقل بجدول المخزون و هو Produit .
بهذه الكيفية لا نبيع إلا السلع الموجودة بالمخزن . نفس الشيء بالنسبة للشراء. و إذا أردنا شراء منتج جديد (غير متوفر بالمخزن) نضيف اسم المنتج بجدول المخزون من الفورم3 ، لنستطيع القيام بالعمليات عليه ، من بيع و شراء.
أما بخصوص الكمية: نضع زرين بالفورم الأولى واحد نعطيه الكابشن تأكيد أو حفظ- الآخر جديد:
على الأول begin
table1.Edit;
table1.FieldValues['client']:=edit1.Text;
table1.FieldValues['produit']:=DBLookupCombobox1.Text;
table1.FieldValues['Qut']:=edit2.Text;
table1.Post;

form3.Table1.Edit;
form3.table1.FieldValues['Qut']:=form3.table1.FieldValues['Qut']-form1.table1.FieldValues['qut'];
form3.table1.Post;

edit1.Enabled:=False;
edit2.Enabled:=False;
DBLookupComBobox1.Enabled:=False;
end;

على الثاني
edit1.Enabled:=true;
edit2.Enabled:=true;
DBLookupComBobox1.Enabled:=true;
table1.Insert;

ولا نمكن المستخدم من ضغط الزر حفظ إلا بعد إكمال ملئ كل الفراغات ، نعمل OnChange للـ Edit1
if (edit1.text<>'') and (edit2.text<>'') and (DBLookupComBobox1.text<>'')
then begin Button3.Enabled:=true end else Button3.Enabled:=false ;
حيث Button3 هو حفظ أو تأكيد . و نفس الشيء للفورم2 (achat) ، مع تبديل عملية الطرح بالجمع، و الحقل Client بــ Fournisseur
الباقي بالمشروع المرفق.
.../ يتبع /....

nabilkeb
14-12-2008, 04:53 PM
و هذا المشروع الخاص بالمثال بالمرفقات


تحياتي .

nabilkeb
14-12-2008, 07:14 PM
خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة ( 5/1 )

البحث باستخدام المنهج Locate :


يقوم هذا المنهج بوضع مؤشر السجل الحالي عند أول سجل يطابق شروط البحث، باستخدام هذه الطريقة يمكننا البحث عن قيمة لحقل ما حيث يأخذ هذه المنهج الشكل :

Locate ( 'FieldName',SearchValue,Option); حيث :
FieldName : اسم الحقل الذي سيتم البحث فيه .
SearchValue : القيمة التي سيتم البحث عنها.
Option : تحدد خيارات البحث وتأخذ القيم التالية :
_ عدم التميز بين الأحرف الكبيرة والصغيرة ( [loCaseInsensitive ] )
_ البحث في جزء من الكلمة أي أن البحث عن قيمة (عم) يمكن أن يعيد (عمار) أو عمر أو أي قيمة توجد بالجدول على هذا النحو .
( [ loPartiaKey ] ) .
و إذا أردت دمج الخيارين ( [ loCaseInsensitive , loPartiaKey ] ). أما الإستغناء عنهما ( [ ] ).

- كم يمكن البحث عن عدة قيم في الجدول الواحد و تقييد الشروط ، مثلا تريد البحث عن الموظف الذي يحمل اسم x و له أقديمية 10سنوات و .... بواسطة التابع VarArrayOf الذي ينشئ مصفوفة من النوع Variant . انظر الملف المرفق . .../ يتبع / ...

nabilkeb
14-12-2008, 08:27 PM
خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة ( 5/2 )

البحث باستخدام المنهج Lookup :

يعيد هذا المنهج مصفوفة من القيم لمجموعة من حقول الجدول دون أن تغير موضع السجل الحالي.
كأن تكون بصدد البحث عن الكمية مثلا الخاصة بـ السلعة المعينة ، كما يمكن أولا أو سلفا عدة حقول ، مثلا تريد قيمة حقل واحد (الكمية) الخاصة بحقل آخر (السلعة) التي تتعلق بحقل ثالث (الممون) يعني :
**** كمية المنتج المسمى تلفاز الذي اشتريته من طرف الممون أحمد .
أو العكس (حقلين مقابل واحد) يعني : تريد كمية و ممون السلعة (تلفاز) . و هكذا بدون تغيير موضع السجل الجالي . و تكون النتيجة عبارة عن Message أو في Edit .....
- لديا الحقول Code_Produit - Produit - Qut - Fournisseur .
1/ procedure TForm1.Edit1Change(Sender: TObject);
var x: Variant;
begin
x := Table1.Lookup('Code_Produit',(edit1.Text ),'Produit; qut');
if Not VarIsnull(x) then
Showmessage( 'Produit: '+ vartostr(x[0]) + ' / ' + 'Qut: ' + vartostr(x[1] ) );
end;

2/ procedure TForm1.Button1Click(Sender: TObject);
var x: Variant;
begin
x:=Table1.Lookup('Produit;Fournisseur_Produit',Var Arrayof([edit2.Text,Edit3.text]),
'code_Produit;Qut');
if Not VarIsnull(x) then
edit4.text:=(vartostr(x[0])+' / ' + vartostr(x[1] ) );
end;

القيمة المراد البحث عنها متواجدة بــ Edit حيث يحولها هذا المنهج إلى Variant ، و يعيد القيمة Null إذا لم تكن هناك نتائج. و التابع VarIsNull يستخدم لمعرفة المتغير Var إذا كان يحتوي على قيمة أو لا. التابع VarToStr لتحويل قيمة الــ Variant إلى نص .

* من أهم مزايا المنهجين Locate و Lookup أنهما يستطيعان التعامل مع حقول مفهرسة و غير مفهرسة ، ويستخدمان أيضا خوارزميات متقدمة للبحث حيث يستفيدان من الحقل إذا كان مفهرسا و يطبقان عمليات الفرز (الفلترة ) في حال كان غير مفهرس .

راجع الملف المرفق . ..../ يتبع / ....

nabilkeb
15-12-2008, 11:38 PM
خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة ( 5/3 )

البحث باستخدام المنهج FindKey :

هذا المنهج خاص بالتعامل مع الحقول المفهرسة حيث تكون عمليات البحث أسهل ، يأخذ المنهج Findkey
قيمة الحقل التي سيبحث عنها ويعيد قيمة بوليانية تدل على عثور هذا المنهج على السجل المطلوب ، ويقوم بنقل مؤشر السجل الحالي إلى السجل المطابق لشروط البحث مثل :
If not Table1.FindKey( [ Strtoint ( edit1.text)]) Then
Showmessage ( 'the Record is not Found');
يقوم هذا المنهج في الحقل المفهرس ، بالبحث عن قيمة الحقل المطابقة للقيمة المدخلة بالعنصر Edit1 ، و إذا وجد النتيجة إيجابية يعيد القيمة البوليانية True و إن لم يجد النتيجة مطابقة يعيد القيمة False.

- كما يمكن البحث عن قيمة بالحقل المفهرس (الفهرس رئيسي) من غير تحديده .
و يمكن البحث عن قيمة بالحقل المفهرس ( فهرس ثانوي) ، بتحديد الخاصية IndexName للـ Table ، كما يمكن تحديدها أثناء التصميم أو برمجيا.
و المثال (1)المرفق يوضح كل شيء.

- يمكن حين عندما تنشئ فهرسين ثانويين أن تبحث عن قيمتين لحقلين بآن واحد . على النحو :
TableName.FindKey ( [SearchValue1 ,SearchValue2]) ;
حيث القيمة SearchValue1 - SearchValue2 هي القيم المراد البحث عنها (يمكن أن تكون مدخلة بــ Edit مثلا أو القيمة مباشرة على الشكل النصي ). كما يمكن فهرسة أكثر من حقلين و البحث عن القيم للفهارس الثانوية ، و التمييز بين كل قيمة و أخرى بفاصلة
Table1.FindKey ( [SearchValue1 , ... , SearchValue3]) ;
و المثال (2)المرفق يوضح كل شيء.

سؤال : هل يمكن البحث في أكثر من حقل رئيسي ، و هل يمكن فهرسة أكثر من حقل فهرسة رئيسية ؟
... / يتبع / ...

nabilkeb
16-12-2008, 12:18 AM
خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة (5/4)

البحث باستخدام المنهج FindNearest :
هذا لمنهج يشبه المنهج السابق و يقوم أيضا على الفهرس ، إلا أنه لا يعيد أي قيمة البوليانية ، فقط يقوم بالبحث عن الطابق الكلي بدآ بالتطابق الجزئي ، و يعيد القيمة مثلا NabilKeb في حال البحث عن Nab . مع تحديد السجل الحالي.
_ فقط استبدل التعليمة السابقة بالأمر FindNearest لترى الفرق.
... / يتبع / ...

STRELiTZIA
16-12-2008, 01:02 PM
بارك الله في نشاطك اخي العزيز :)
الى الأمام...

بالتوفيق ان شاء الله

nabilkeb
16-12-2008, 01:40 PM
بارك الله في نشاطك اخي العزيز :)
الى الأمام...

بالتوفيق ان شاء الله
و فيك كل البركة أخي الكريم .

ألن تجيب عن السؤال ؟ سؤال : هل يمكن البحث في أكثر من حقل رئيسي ، و هل يمكن فهرسة أكثر من حقل فهرسة رئيسية ؟ عموما : كي تغيبلك راني هنــا ! ! !

أمير الدلفي
16-12-2008, 03:26 PM
بارك الله فيك حبيبي نبيل
أحسنت صنعا
وفي انتظار المزيد

ممكن محاولة الاجابة عن السؤال
نعم يمكن أن نفهرس أكثر من حقل فهرسة رئيسية ولكنها محدودة
كما يمكن البحث في أكثر من خقل رئيسي

nabilkeb
16-12-2008, 04:55 PM
بارك الله فيك حبيبي نبيل
أحسنت صنعا
وفي انتظار المزيد

ممكن محاولة الاجابة عن السؤال
نعم يمكن أن نفهرس أكثر من حقل فهرسة رئيسية ولكنها محدودة
كما يمكن البحث في أكثر من خقل رئيسي

و فيك بركة ، أهلا و سهلا بك معنا ، بمنتداناالحبيب.
و إذا أمكن القليل من التفصيل في الإجابة ، مع مثال مصغر مرفق.

أهلا و سهلا بك مجددا .

nabilkeb
17-12-2008, 09:38 PM
خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة (5/5)

التصفية ( الفلترة) Filter :

كثيرا ما يمر معنا هذا المنهج في برنامج أو غيره ، فهو معروف نظرا لاستخدامه المتعدد . و بقي لنـا تعريف استخدامه (بالدلفي ) .
إن هذا المنهج ضروري جدا في تحديد معطيات معينة من جدول البيانات و فرزها ، و لا يكاد يستغني عنها أي مبرمج و مستعمل لقواعد البيانات ( خصوصا كل مبتدأ أو من لا يستخدم أو لا يجيد لغة الإستفسار أو الإستعلام البنيوية ) .

- نبدأ مشروعا جديد ، و مع نفس الجدول الذي مر معنا مسبقــا :
(Code_Produit - Produit - Qut - Fournisseur)
نضيف العناصر : Table - DataSource - DbGrid - DBNavigator و نصيف زرين : نكتب على الأول الكابشن : Filtered-True و الآخر Filtered-False .
نربط العناصر كالمعتاد.

- الآن نريد أن نقوم بعملية الفرز على اسم منتج (Produit) معين . أول شيء أود الإشارة إلى خاصيتي الفرز الخاصتين بالعنصر Table و هما : Filter - Filtered
أما فلترد : فهي قيمة بوليانية نريد من خلالها تفعيل الفرز أو لا.
و الثانية خاصة بكتابة صيغة الفرز و هو الأهم. و تأخد القيمة :
( اسم الحقل='القيمة النصية للحقل' ) مثلا نريد الفرز على الحقل Produit إذا كانت قيمته :
HDD_80G نكتب القيمة : Produit='HDD_80G'
ثم نقوم بتفعيل الفلترة باعطاء القيمة True . هذا أثناء التصميم (من قسم الخصائص). كما يمكن التفعيل أو التعطيل برمجيا : نكتب على الزر الأول :
Table1.Filtered:=True;
و الثاني False
- ننفد البرنامج و نجرب الضغط على الزرين .
--- انظر المرفق1-----

- إذا أردنا الفلترة على حقل الكمية مثلا : Qut='50'
يعني التصفية حول كل منتوج تساوي كميته 50. إذا أردنا أكبر أو أصغر من قيمة 50 ، نفس الكود مع استبدال = بــ < أو >

- إذا أردنا نفس العمل برمجيا (Filtered-Filter) نترك القيم فارغة بالخصائص ، و نكتب على كودسورس الزر الأول :
table1.Filter:='Qut<' + '50' ;
Table1.Filtered:=True ;
أو عمل = بدلا من > مثلا.

- و إذا أردنا نفس الشيء مع ترك الخيار للمستخدم بادخال القيم المناسبة ، نعم زر و Edit ، و على كود سورس الزر نكتب :
table1.Filter:='Qut<' + Edit1.text ;
Table1.Filtered:=True ;


--- كل هذا مع القيم العددية ، أما القيم النصية (برمجيا) فلا بد من التابع QuotedStr .
و يقوم هذا التابع بإعادة نفس القيمة النصية مع و ضع إشارتين للحصر ، فقولك مثلا
QuotedStr(Edit1.text)='(Edit1.text)'
و بما أن الــ Edit هو قيمة نصية ، يكافئ:
QuotedStr(Edit1.text)=''HDD_80G''
كل هذا الكلام يشمل الفرز برمجيـــا ، أما أثناء التصميم (الخواص) فنكتب الكود كما مر معنا دون الحاجة إلى الحصر (QuotedStr).
- و على هذا الأساس إذا أردنا الفلترة عن القيمة النصية HDD_80G الخاصة بالحقل Produit ، برمجيا ، فنكتب على الزر كود سورس :
table1.Filter:=' Produit= ''HDD_80G'' ' ;
table1.Filtered:=true;
باللون الأزرق : القيمة النصية
باللون الأحمر : القيمة النصية+الحصر يعني استخدام التابع المذكور.
- كما يمكن (على ما سلف شرحه) استعمال الكود :
table1.Filter:=' Produit='+Quotedstr('HDD_80G') ;
table1.Filtered:=true;
- كما يمكن استبدال ('HDD_80G') بـــ Edit1.text لتحرير القيم اختياريا.

آسف ، أردت إدراج مرفقات أخرى ، لكن بعد هذا التفصيل في الشرح ، أرى أنه لا داعي لذلك.

...../ يتبع /.....

nabilkeb
20-12-2008, 12:10 AM
كيف لي أن أتوصل لجلب نتائج البحث في نفس المكان الذي أحرر فيه عبارة البحث ?

انظر الصورة . مجرد تحرير الحرف الأول من عبارة البحث ، يتم ارجاع القيمة (مثل FindNearst) لكن في نفس مكان تحرير عبارة البحث .
http://www.vip700.com/up/index.php?action=viewfile&id=6306


مثلا أنت تريد معرفة كمية منتوج معين ، و لا تريد في كل مرة تحرير كامل اسم المنتج ، تريد بمجرد تحرير الحرف أو الحروف الأولى ، و إذا تطابقة النتيجة تعمل Enter لتصل إلى مرادك ، سواء معرفة الكمية أو أي شيء ؟

انظر المرفق .

إذا أمكن عدم استعمال أي منهج من المناهج التي مرت معنا ، و إلا فلابأس.

في انتظار الردود.

hanipino
20-12-2008, 10:47 AM
السلام عليكم . بارك الله فيك اخى NabilKeb ممتاز دروس رائعة و مفيدة جدا . بالتوفيق اخى . ;):)

nabilkeb
20-12-2008, 10:30 PM
السلام عليكم . بارك الله فيك اخى nabilkeb ممتاز دروس رائعة و مفيدة جدا . بالتوفيق اخى . ;):)
و فيك كل البركة أخي العزيز ، تشكر جدا على المشاركة و التشجيع .

و سيكون ما نقدمه أكثر نفعا و فائدة لي و لنا جميعا إن شاء الله ، لو تشاركنا (وغيرك) ، و نحن بالإنتظار .


سبق :
سؤال : - هل يمكن البحث في أكثر من حقل رئيسي ، و هل يمكن فهرسة أكثر من حقل فهرسة رئيسية(مع المرفق) ؟
-كيف لي أن أتوصل لجلب نتائج البحث في نفس المكان الذي أحرر فيه عبارة البحث ?


تشكر جزيلا أخي ، مرة أخرى على الإهتمام و المشاركة .

talal
26-12-2008, 09:54 PM
السلام عليكم ورحمة الله وبركاته

مشكور أخ nabil على هذا المجهود , وأعتذر عن التأخير
سأبدأ من بداية الدروس وإنشاء الله سأشارك معكم

بالتوفيق إنشاء الله

يوسف
01-01-2009, 04:53 PM
بارك الله فيك لكن لو اتبسط الشرح اشوي اذا باستطاعتك

nabilkeb
02-01-2009, 08:19 PM
بارك الله فيك لكن لو اتبسط الشرح اشوي اذا باستطاعتك

مشكوور أخي على المشاركة :
أنا و أنت هنا لنتعلم ، فأي إشكال يمكنك الاستفسار و السؤال ، فإن لم تكن معي إجابة فالمنتدى الحبيب لا يخلو من الأساتذة ألو الفضل و الكرم ، علمهم الله و إيانا ما جهلنا ، و نفعنا بما علمنا .
مشكووووور .

nabilkeb
11-02-2009, 12:52 PM
السلام عليكم : و هذه المرفقات لما سلف طرحه (بعد أن تم حذفها من غير قصد)

http://www.4shared.com/file/87121635/11529b10/DelphiDownload_BDE.html?dirPwdVerified=90116b87

kachwahed
01-03-2009, 06:05 PM
بارك الله فيك أخي نبيل وجزاك كل خير.
موضوع رائع فعلا، كنت أبحث في Google فأخذني إلى هذا الموضوع، حتى Google اعترف بذلك :D
شكرا كثيرا.

AL-MOB4RM3G
03-03-2009, 06:09 PM
السلام عليكم ورحمة الله
اخي ما شاء الله موضوع هائل ومفيد...

لدي سؤال الله يكرمك
ذكرت انت في الموضوع...
Locate ( 'FieldName',SearchValue,Option);

وكان هذا بنسبة لل Locate
وهنا الخاصيّة المهمة بنسبة لي هي ال [loCaseInsensitive ]

لكن السؤال هو...
كيف ممكن ان استخدم ال loCaseInsensitive ولكن مع الفرز Filter ؟
هل هذا ممكن بارك الله فيك ؟

وان اردت اكثر من التوضيح فأنا جاهز ان شاء الله...
بارك الله فيكم والسلام عليكم ورحمة الله

nabilkeb
03-03-2009, 06:27 PM
السؤال واضح .ولا يحتاج للمزيد.
كيف ممكن ان استخدم ال locaseinsensitive ولكن مع الفرز filter ؟السؤال أو الفكرة رائعة جدا ، و لم تخطر ببالي من قبل.
و لا أملك جوابا لذلك . فقط أعدك أني سوف أبحث و أحاول. (و إلا فالمنتدى الحبيب لا يخلو من الأساتذة)



موضوع رائع فعلا، كنت أبحث في google فأخذني إلى هذا الموضوع، حتى google اعترف بذلك اخي ما شاء الله موضوع هائل ومفيد... بارك الله فيكم جميعا.

nabilkeb
03-03-2009, 07:01 PM
بسيطة :
بتحديد المكون Table تلاحظ في الخصائص FilterOptions يمكنك تفعيل الخاصية foCaseInsensitive أو برمجيا :
table1.FilterOptions:=[foCaseInsensitive];


يمكنك أيضا الاطلاع على الخاصية foNoPartialCompare

AL-MOB4RM3G
03-03-2009, 07:11 PM
بارك الله فيك اخي..
طيب في الحقيقة كان عندي كمان سؤال...
ظننت انني طرحته في مشاركتي السابقة...
ولكن تذكرت انني قد نسيت طرحه ...

وهو التالي...
في المثال الذي ذكرته انت وهو...
table1.Filter:='Qut<' + '50' ;


كيف يتم عمل ذلك... اي البرنامج... كيف ينفذ هذا الكود ؟
لو افترضنا انه قاعدة البيانات بها اسمآء او قيم كثيرا...
ونحن قد وضعناها ولكن ليس في الترتيب...
اي مثلا...
1
4
2
7
5
3

وو الى آخره...

طيب لو استخدمنا الكود المذكور اعلاه...
معناها انه يقرا مثلا اول سطر...
وهو 1... ان كان اقل من خمسين معناها اضف على الفرز...
ثم يقرأ سطر رقم 2.. والقيمة فيه 4...
ويقارن...

وو الى آخره حتى ينتهي...
النتيجة ماذا ستكون... تكون ان كل قيمة تحت ال 50 سيتم وضعه في الفلتر..
واضح لحد الآن؟؟؟

لو اطلعنا الآن على النتيجة في مثلا DBGrid او شئ آخر...
فستكون النتيجة ان كل الأرقام فوق ستظهر بنفس الترتيب اعلى..

طيب... سؤالي هو...
كيف ممكن عمله تدريجيّة ؟
يعني حتى تصير النتيجة
1
2
3
4
5
7

لاحظ انه لا يوجد رقم ستة

هذا بنسبة للأرقام
لكن سؤال هو بنسبة للأحرف :rolleyes:... يعني عدد من ال string مخزنين في قاعدة البيانات...
يعني حتى يصير اسم ahmad قبل اسم mahmoud رغم ان اسم احمد تم كتابته بعد اسم محمود

ان شاء الله السؤال واضح...
وان اردت اكثر توضيح فأنا جاهز...

بارك الله فيك
وآسف على الإطالة
والسلام عليكم ورحمة الله

AL-MOB4RM3G
03-03-2009, 07:23 PM
اخي الكريم...
بتحديد المكون Table تلاحظ في الخصائص FilterOptions يمكنك تفعيل الخاصية foCaseInsensitive

هممم...
حيّرتني اخي...
اليس المكون Table هو نفسه ADOTable ؟ بارك الله فيك...
لأني لم اجدها عندي في المكون ADOTable....

بارك الله فيك اخي على كل حال..
وآسف على الغلبة :eek:
والسلام عليكم

nabilkeb
03-03-2009, 11:37 PM
- سؤالك بخصوص الترتيب ، رغم أني لم أفهمه جيدا ، لكني أستطيع أن أقول لك بفهرسة الحقل تتخلص من الاشكال ، رغم وجود حلول عديدة. كما أنك استفسرت (في قسم الاسئلة)عن Sql و بجوابي لك عن ذلك سوف لن تحتاج Filter اطلاقا.

- بخصوص المكون Table تجده بـــالــــــــ Bde (ليس AdoTable بـــــالـــــ Ado )

AL-MOB4RM3G
05-03-2009, 07:18 PM
- سؤالك بخصوص الترتيب ، رغم أني لم أفهمه جيدا

اشكرك اخي الكريم...
كان الجواب في مشاركتك

- إستخدام Order By
تستخدم هذه التعليمة لترتيب البيانات حسب حقل معين

في موضوعك عن ال sql (http://www.delphi4arab.com/forum/showthread.php?t=998)

بارك الله فيك مجددا

nabilkeb
05-03-2009, 07:49 PM
و فيك بركة أخي ، بالتوفيق واصل

T.ALKATHIRI
11-03-2009, 02:23 PM
الأخ نبيل
السلام عليكم ورحمة الله وبركاته

تحية طيبة ومباركة

تعجز الكلامات عن شكرك يأخي الفاضل ، وجعلها الله في ميزان حسناتك
وبارك لك وعليك

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

هذا ولك خالص الشكر والتقدير

طارق الكثيري

nabilkeb
11-03-2009, 09:10 PM
كل العفو سيدي الكريم ، و أهلا و سهلا بك في منتداك .
الله يوفقنا جميعا لكل خير.

أبوصفاء
21-04-2009, 01:09 PM
الله يكرمك ويتقبّل الله عملك ويجعله في ميزان حسناتــك

AL-MOB4RM3G
22-04-2009, 07:39 AM
الله يكرمك ويتقبّل الله عملك ويجعله في ميزان حسناتــك

آمين,,, بارك الله فيك,,

في الحقيقة,, نفتقد الأخ nabilkeb,, اين انت يا اخي ؟

لا ترحل عنّا بارك الله فيك :(

nabilkeb
09-06-2009, 11:39 AM
شكرا لك أخي AL-MOB4RM3G (http://www.delphi4arab.com/forum/member.php?u=852) ، و الشكر موصول لكل الأحبة المشاركين معنا و كل أعضاء المنتدى الحبيب ، منعتنا بعض الضروف المهنية البعيدة عن الإعلام الآلي ، مع الضيق الشديد في الوقت ، و لكن لنــا عودة قريبة إن شاء الله ، فكلنــــا هنا لنتعلم ، و ليس بوسعنـــا الإبتعاد عن المنتدى و لا أعضائه الكرام ، فضلا عن أساتذتنــا القائمين عليه.
و السلام عليكم و رحمة الله و بركاته.

AL-MOB4RM3G
11-06-2009, 08:45 PM
شكرا لك أخي al-mob4rm3g (http://www.delphi4arab.com/forum/member.php?u=852) ، و الشكر موصول لكل الأحبة المشاركين معنا و كل أعضاء المنتدى الحبيب ، منعتنا بعض الضروف المهنية البعيدة عن الإعلام الآلي ، مع الضيق الشديد في الوقت ، و لكن لنــا عودة قريبة إن شاء الله ، فكلنــــا هنا لنتعلم ، و ليس بوسعنـــا الإبتعاد عن المنتدى و لا أعضائه الكرام ، فضلا عن أساتذتنــا القائمين عليه.
و السلام عليكم و رحمة الله و بركاته.

اـــــــــــهــــــــــــلا و ســـــــــــــــــــــــهــــــــــــلا بك اخي الكريم,, اسعدتني كثيرا بعودتك اخي الحبيب,,

لقد كنت على وشك كتآبة موضوع,, عن اخوة لنا في المنتدى,, اختفوا عنّا,,, وكنت سأضعك في أول هذا الموضوع,, ;),,

شكرا لعودتك اخي الكريم,, بعد شهرين كاملين :cool: ونحن بنتظار دروسك التي ليس لها مثيل :)

اهلا وسهلا بك مرة اخرى,,

daho28
10-07-2009, 01:31 PM
السلام عليك أخي نبيل
نشكرك على التألق والشرح المبسط حول التعامل مع قواعد البيانات .

daho28
14-07-2009, 06:38 PM
السلام عليكم
أخي نبيل لدي سؤال :
كيف يمكنني أن أحفظ نسخة من قاعدة بيانات من برنامج الدلفي
بتاريخها مع تغيير المسار ، على أن يتم استردادها في وقت الحاجة.
مشكور على الإهتمام.

nabilkeb
15-07-2009, 07:52 PM
أولا السلام عليكم و رحمة الله و بركاته ، شكرا على المشاركة أخي و الإهتمــام :

عند إعادة تهيئة القرص أو عند حذف و إزالة البرنامج من طرف المستخدم لأي سبب كان ، أو حاجة ، فإن قواعد المعطيات المرفقة ضمنه تحذف أيضا مما يؤدي إلى مشكل عويص لدى المستخدم للبرنامج، لأنه حتى إذا عاود التنصيب فإن كل البيانات السابقة و المحفوظة من طرفه لن يجدها مما يشل و يعرقل فعليا نشاط المستخدم.
و على هذا فمن المهم جدا _إذا كان المستخدم على دراية_ أن يأخذ نسخة من البيانات ليعيدها بعد الحذف ، و من المستحسن للمبرمج أن يفكر في هذا الأمر ويدرجه برمجيا (بالبرنامج).
كيف ؟
لنسخ ملف (جدول بيانات) إليك هذا الرابط (http://www.delphi4arab.com/forum/showthread.php?t=737&highlight=copyfile)
أو هنـــــــــــــــــــــا (http://www.delphi4arab.com/forum/showthread.php?t=818&highlight=copyfile)
(ولأنك لم تبحث بالمنتدى حول نسخ الملفات، و لو فعلت لتجنبت انتظار الرد و اضاعة الوقت) ، أرجــو أن تبحث على طريقة مناسبةلنسخ المجلدات و تدرجها هنا لتنفع نفسك و غيرك .
بالتوفيق أخي.

kachwahed
15-07-2009, 08:05 PM
السلام عليكم
قد يفيدك هذا الموضوع:
ضغط الملفات بصيغة ZIP (http://www.delphi4arab.com/forum/showthread.php?p=7888#post7888)
بالتوفيق.

Mr_Delphi
28-12-2009, 10:10 PM
استفدت كثيرا من جميع مواضيعك والله

جزاك الله الف خير

واقدر مهوداتك

تحياتي لك

nabilkeb
29-12-2009, 10:19 AM
استفدت كثيرا من جميع مواضيعك والله
جزاك الله الف خير /واقدر مجهوداتك/تحياتي لك

الحمد لله ، و جزاكم الله جميعا كل خير ، أول مبادرة منك أختاه (لا أقصد المدح و الثناء ، بل اطلاعك على هذا الموضوع الهام هو أول خطوة في موضوعك المتعلق بمشروع التسيير و المخزون ، و لعل اجتهادك (و الجدية) أكبر حافز لمساعدتك.
http://www.delphi4arab.com/forum/showthread.php?t=2198

لنا رجعة إن شاء الله ، و بالتوفيق أختاه

Mr_Delphi
30-12-2009, 09:08 PM
مشكور اخي على تحفيزك وتشجيعك لي ولكن احاول بذل كل مجهوداتي لاتعلم كيفية البرمجة واطور من مهاراتي

somame
31-12-2009, 05:32 PM
مشكوور أخي الكريم
أنت دائم التألق

looshy
08-02-2010, 09:29 PM
زادك الله علما و نورا

red_scorpion1
08-02-2010, 11:31 PM
أخى الفاضل أشكرك على الشرح الرائع ولكنى عملت فورم وأضفت إليها DBGrid و ADO Table و DataSource و ADO Connection وغيرت اسم الداتا سورس إلى Table1 وعملت الربط بينهم كما شرحت وتظهر البيانات وولكن المشكلة هى فى الاوارمر الخاصة بالأزرار لا تقبل معى !! فأين المشكلة مع إننى أستخدم دلفى 2010 أخر نسخة؟؟؟؟؟؟

hoota
03-05-2010, 02:31 AM
مشكوور عزيزي وتسلم على الدرس الجميل

Kader.dz
13-05-2010, 10:47 PM
مشكور على الشرح

saber-bsa
03-06-2010, 06:39 PM
السلام عليكم ورحمة الله وبركاته
بارك الله فيك اخي الكريم
جعله الله في ميزان حسناتك

ELARAPY
27-04-2011, 11:26 PM
بارك الله فيك اخي نبيل
والله سبحانه وتعالى المستعان