العودة   :: Security امان العرب Arab :: > [ الأقسام البرمجية ] > [ الدلفي Delphi ]

[ الدلفي Delphi ] لمبدعي وعشاق هذه اللغة

إضافة رد
 
أدوات الموضوع انواع عرض الموضوع
قديم 03-25-2010, 01:22 PM   المشاركة رقم: 1
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


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

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

هذا تعاريف و أمثلة بسيطة حول قواعد البيانات و ربط جدول بيانات بمشروع دلفي
بعض العمليات عليه: سنتناول إن شاء الله :

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


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


../ يتبع /..












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:23 PM   المشاركة رقم: 2
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

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

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

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

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


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

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












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:24 PM   المشاركة رقم: 3
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

2-Type: نوع الحقل

يصف هذا الأخير نوع المعطيات التي ستخزن في هذا الحقل ، وهناك عدد من الأنواع التي يمكن أن ينتمي إليها الحقل ولمعرفة هذه الأنواع إضغط بزر الفأرة اليميني في العمود Typeأو اضغط على مفتاح المسافة Space عندما يكون العمود Typeفعالا، والجدول التالي يبين الأنواع التي توفرها جداول Paradox

-/ المفتاح الرئيسي (الأساسي) 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 : _ الخاصية Database**** مسار ملف قواعد البيانات (Alias) يمكن انشاؤه أولابشكل مستقل ، تحت اسم معين وكتابة اسمه في هذا المكان ، أو ادراج المسار مباشرة . وللمزيد استعمل ميزة البحث بالمنتدى حول موضوع Alis.
_ الخاصية Table**** ندرج اسم ملف قواعد البيانات .
_ نفعل الخاصية Active .
DataSource : نعطي الخاصية DataSet القيمة أو الإسم Table1
DBNavigator - DBGride: نربط هذين العنصرين مع DataSource1 من الخاصية DataSource
__ بهذه الطريقة نكون قد أدرجنا الجدول بالمشروع ، و يمكننا الإطلاع على محتوياته . كما يمكننا التعديل بإدخال المعطيات مباشرة على عنصر DbGrid ، و باستعمال العنصر DbNavigator (الإدراج-التعديل-الحفظ-السجل التالي،السابق.... كما يمكن على هذا العنصر استعمال كل الأزرار أو بعضها من الخاصية VisibleButtons)
......../ يتبع /......












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:26 PM   المشاركة رقم: 4
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

- استعمال بعض المكونات الأخرى للاطلاع على محتويات الجدول ، و ادخال أو تعديل البيانات.

إنشاء عناصر الحقول 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 التي لا تحتوي على تلك العناصر ، (ارجع إلى: قريبآ آلتنزيل بآمآن آلعرب )

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

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


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

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












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:28 PM   المشاركة رقم: 5
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

استعمال (ادخال) قيم حقل لجدول معين ، من جدول آخر (2/1) :

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

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

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

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












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:31 PM   المشاركة رقم: 6
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

استعمال (ادخال) قيم حقل لجدول معين ، من جدول آخر (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.****;
table1.FieldValues['produit']:=DBLookupCombobox1.****;
table1.FieldValues['Qut']:=edit2.****;
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.****<>'') and (edit2.****<>'') and (DBLookupComBobox1.****<>'')
then begin  Button3.Enabled:=true end  else Button3.Enabled:=false ;
حيث Button3 هو حفظ أو تأكيد . و نفس الشيء للفورم2 (achat) ، مع تبديل عملية الطرح بالجمع، و الحقل Client بــ Fournisseur
الباقي بالمشروع المرفق.
.../ يتبع /....












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:32 PM   المشاركة رقم: 7
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة ( 5/1 )

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



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

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

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













عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:33 PM   المشاركة رقم: 8
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة ( 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.**** ),'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',VarArrayof([edit2.****,Edit3.****]),
'code_Produit;Qut');
if Not VarIsnull(x) then
edit4.****:=(vartostr(x[0])+'  /  ' + vartostr(x[1] ) );
end;
القيمة المراد البحث عنها متواجدة بــ Edit حيث يحولها هذا المنهج إلى Variant ، و يعيد القيمة Null إذا لم تكن هناك نتائج. و التابع VarIsNull يستخدم لمعرفة المتغير Var إذا كان يحتوي على قيمة أو لا. التابع VarToStr لتحويل قيمة الــ Variant إلى نص .

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

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












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:34 PM   المشاركة رقم: 9
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة ( 5/3 )

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

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

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

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

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


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












عرض البوم صور Security One   رد مع اقتباس

قديم 03-25-2010, 01:35 PM   المشاركة رقم: 10
الكاتب
Security One
.:: عضو ::.
 
الصورة الرمزية Security One
المعلومات  
التسجيل: Nov 2009
العضوية: 38598
المشاركات: 71
بمعدل : 0.04 يوميا
التوقيت
الإتصال Security One غير متواجد حالياً


كاتب الموضوع  المنتدى  
افتراضي

خمس طرق للبحث عن البيانات ، و مختلف الإستعمالات مع مشاريع مرفقة (5/4)

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












عرض البوم صور Security One   رد مع اقتباس

إضافة رد

مواقع النشر (المفضلة)


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
قائمة بالمواقع التي تحتوي على تعاريف لينكس Mr.Law [ قسم Gnu/Linux ] 27 02-27-2011 12:48 AM
طلب دخول و مساعدة بسيطة dr_spam [ الفجوال بيسك Visual Basic ] 8 05-07-2010 03:32 PM
[ جديد ] حصريا ~ : [ الاختراق بصورة ] : ~ أمثلة + تطبيق SKiLls [ اختراق الاجـهـزه والايـمـيـلات ] 22 11-24-2009 07:40 PM
مشكله . في تعاريف اللينكس ShAfT [ قسم Gnu/Linux ] 5 01-31-2009 06:01 PM


الساعة الآن 08:08 AM.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.