ودالماحى
ودالماحى
محمد احمد المامون
كركم

انضم إلى المنتدى ، فالأمر سريع وسهل

ودالماحى
ودالماحى
محمد احمد المامون
كركم
بحـث
 
 

نتائج البحث
 


Rechercher بحث متقدم

المواضيع الأخيرة
» https://www.youtube.com/watch?v=2cHjggh9iL4
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالخميس ديسمبر 30, 2010 2:14 am من طرف زائر

» إدانة نيابية للجريمة الإسرائيلية ضد أسطول الحرية
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالسبت أكتوبر 09, 2010 2:42 pm من طرف Admin

» نتيجة مباريات كاس العالم 2010م
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالجمعة يونيو 18, 2010 7:27 pm من طرف Admin

» فومني قنوات عربية مباشرة
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالثلاثاء يونيو 08, 2010 10:11 pm من طرف Admin

» إعــلان مــهــم
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالثلاثاء يونيو 01, 2010 8:48 pm من طرف Admin

» محاضرة قوية بجامعة اكسفورد
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالسبت أبريل 24, 2010 4:30 am من طرف osman hussain

» معلومات عن دراسة الهندسة في الفلبين
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالأحد ديسمبر 27, 2009 7:03 pm من طرف Admin

» رب الوزينة اشاء الله يجينا
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالأحد ديسمبر 27, 2009 7:01 pm من طرف Admin

» كتب داخل التصنيف الحالي ...
شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة Emptyالأربعاء نوفمبر 04, 2009 9:42 pm من طرف زائر

التبادل الاعلاني
مايو 2024
الأحدالإثنينالثلاثاءالأربعاءالخميسالجمعةالسبت
   1234
567891011
12131415161718
19202122232425
262728293031 

اليومية اليومية

تسجيل صفحاتك المفضلة في مواقع خارجية

تسجيل صفحاتك المفضلة في مواقع خارجية reddit      

قم بحفض و مشاطرة الرابط ودالماحى على موقع حفض الصفحات

قم بحفض و مشاطرة الرابط ودالماحى على موقع حفض الصفحات


الوقت/التاريخ الآن هو الأحد مايو 19, 2024 12:29 pm

شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة

  • شرح برنامج ORACLE لانشاء قواعد بيانات مؤمنة

    المواضيع
    المساهمات
    آخر مساهمة
  • دورة في إدارة قواعد البيانات أوراكل


    دورة في إدارة قواعد البيانات أوراكلالسلام عليكم و رحمة الله : إن مجال إدراة قواعد البيانات أوركل لا يجد حقه في هذا المنتدى ، لأن أغلب المشاركات تتمحور حول تطوير التطبيقات بشكل عام ، لذلك رغبت في أن أستغل فترة الصيف لنقوم بسلسلة دروس حول إدارة القاعدة ، أي يمكن أن نعتبرها دورة متكاملة في إدارة القاعدة من المستخدمين حتى البنى الفيزيائية كـDatafiles و Redo log Files و البنى المنطقية Table Spaces ، مروراً بالنسخ الإحتياطي Backup و استخدام RMAN ... إلخ بحسب ما يسمح لنا الوقت . أتمنى أن تأخذ هذ الدورة بأهمية و أجد التفاعل و يتم التثبيت لكي نستثمر الوقت بأفضل وسيلة للتعلم . و بدلاً من كثرة الكلام لنبدأ الفعل مع القسم الأول إدارة المستخدمين .ما هي الحاجة إلى وجود مستخدمين ؟ تكمن الحاجة في حتمية وجود خصوصية للبيانات بحيث يستطيع كل شخص أن يحتفظ ببيناته و قدرته على تعديلها و منح الحق لغيره بالإطلاع عليها أو إجراء العمليات المختلفة عليها . عندما يريد أحد التعامل مع أوراكل يجب أن تكون له سماحية الدخول إلى النظام و هذه السماحية تؤخذ بالطرق : : 1- Data Dictionary قاموس البيانات . 2- Operating System نظام التشغيل . 3- Networking الشبكة . سيكون موضوع بحثنا هو الطريقتين الأولى و الثانية . قبل البدء بعملية إنشاء المستخدمين يجب أن أوضح المصطلحات التالية : 1- Schema المخطط : و هي مجموعة objects التي يملكها المستخدم أي الجداول – index –PL/SQL CODE .... 2- Table Space الفضاء الجدولي : منطقياً هو المكان المخصص لكل مستخدم لكي يقوم بتخزين بياناته عليه ، فيزيائياً هو مجموعة من الملفات التي تخزن البيانات ندعوها data file . 3- Privileges الصلاحية : و تعني إمكانية قيام مستخدم معين بعملية ما على البيانات أو إنشاء بنى جديدة أو حذف بنى موجودة ....إلخ . 4-Quotas : و هي السماحة المخصصة للمستخدم للتخزين على فضاء tablespace معين ... تعليمة إنشاء user : الشكل القياسي لها : كودCREATE USER userIDENTIFIED {BY password | EXTERNALLY}[ DEFAULT TABLESPACE tablespace ][ TEMPORARY TABLESPACE tablespace ][ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace[ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace]...][ PASSWORD EXPIRE ][ ACCOUNT { LOCK | UNLOCK }][ PROFILE { profile | DEFAULT }]مخيفة ، أليس كذلك ؟ بالطبع لا ، فهي بسيطة و سهلة و سنرى ذلك في سياق السلسة بإذن الله .. لنبدأ بـ : 1- إنشاء Database User : كما تحدثنا سابقاً فإنه توجد عدة طرق لإنشاء مستخدم منها Data Dictionary . و فيها يأخذ المستخدم صلاحية الدخول من أوركل أي يكون لديه password . لتعليمة الإنشاء المثال التالي: كودcreate user Arabteam identified by arabteam_passإذا أردنا أن نتوسع أكثر فلنجعل لهذا المستخدم حصة على Users Tablespace و هو فضاء جدولي إفتراضي يتم إنشاءه عند تنصيب Oracle : كودcreate user Arabteam identified by arabteam_pass default tablespace users quota 50m on usersفي الحياة العملية لا يجب لمدير القاعدة أن يعرف كلمة السر الخاصة بمستخدم معين و هذا ما نشاهده في حالتنا فقد أسندنا كلمة السر التي نريد إلى المستخدم و هذا لا يصح . لذلك ما رأيكم لو أننا طلبنا من المستخدم أن يقوم بعملية تغيير قسرية لكلمة السر الخاصة به عند أول دخول ؟؟ بذلك " نصفي ذمتنا " (على الطريقة السورية ) ؟؟ كودcreate user Arabteam identified by arabteam_pass default tablespace users quota 50m on users password Expire;حتى الآن أظن أن الأمور بخير و لا يوجد شيء صعب على الفهم على ما أعتقد ..... ماذا لو أردنا عدم تفعيل الحساب مباشرة ؟ أي ننشء الحساب و لكن المستخدم لن يستطيع إستخدامه ؟ كودcreate user Arabteam identified by arabteam_pass default tablespace users quota 50m on users password ExpireAccount Lock;2- إنشاء Operating System User : و هنا يتم السماح للمستخدم إستخدام النظام بعد مصادقة نظام التشغيل . كلام غامض جداً جداً ؟؟؟؟؟؟ كلنا يعلم أننا يمكن إنشاء مستخدمين في نظام التشغيل الذي نعمل عليه سواء أكان Windows أو Linux أو أي نظام تشغيل آخر ، أفلا يمكننا إستخدام هذه الإمكانية في سماحية الدخول إلى أوراكل ؟ أي يكفي للمستخدم أن يقوم بستجيل الدخول إلى نظام التشغيل ثم يستدعي مثلاً SQL PLUS هكذا : كود c:\> sqlplus /أي دون الحاجة إلى كتابة اسم المستخدم و كلمة المرور ؟؟؟ هذا ما ندعو بمصادقة نظام التشغيل ... كيف نحقق ذلك ؟ كودcreate user Arabteam identified Externallyو ننشىء مستخدم اسمه ArabTeam على النظام ، و انتهت القصة .. سهلة أليس كذلك ؟؟ و لكن هناك شيء أساسي يجب ذكره : إن اسم مستخدم نظام التشغيل مرتبط بشكل أساسي بالبرامتر OS_AUTHENT_PREFIX ( البارامترات هي مجموعة من القيم التي تحدد طبيعة بعض العمليات الإدارية للقاعدة مثل اسماء data files و control files و النسخ الإحتياطي Backup ..... إلخ و هي مخزنة داخل ملف SPFILE أو PFILE الذين سيكون لهم نقاش طويل بإذن الله ) بحيث يجب أن تكون قيمته "" ... الآن كيف نستطيع فعل ذلك ؟؟؟ لنتبع الخطوات التالية : 1- سجل الدخول بالشكل التالي : كودsys/pass as sysdba2- نفذ التعليمة التالية : كودalter system set OS_AUTHENT_PREFIX='' scope=spfile;3- أغلق القاعدة بالشكل : كودshutdown immediate4- أعد تشغيل القاعدة بالشكل : كودstartupو بذلك تم الأمر .. و الآن لنسجل الدخول بالمستخدم الذي إنشأناه : كودConnected to:Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> create user arabteam 2 identified by arabteam;User created.SQL> connect arabteam/arabteamERROR:ORA-01045: user ARABTEAM lacks CREATE SESSION privilege; logon deniedWarning: You are no longer connected to ORACLE.SQL>ما الذي حدث ؟؟؟؟ تحدثنا في البداية بضرورة وجود الصلاحيات التي تحكم عمل المستخدم حتى في تسجيل دخوله . لذلك نحتاج إلى منح المستخدم Arabteam القدرة على تسجيل الدخول و ذلك بالطريقة :كودSQL> connect system/passConnected.SQL> grant create session to arabteam;Grant succeeded.SQL> connect arabteam/arabteam_pass;Connected.SQL>و سيكون لنا حديث طويل جداًعن السماحيات و ذلك في الجزء القادم إن شاء الله . التعديلات على خصائص المستخدمين : هل نستطيع إجراء التعديلات على المستخدمين الذين أنشأناهم ؟ هل نستطيع تغيير كلمة المرور أو Quota أو الفضاء الجدولي ؟؟؟بالطبع نستطيع و ذلك عن طريق التعليمة : كودALTER USER user[ DEFAULT TABLESPACE tablespace][ TEMPORARY TABLESPACE tablespace][ QUOTA {integer [K | M] | UNLIMITED } ON tablespace[ QUOTA {integer [K | M] | UNLIMITED } ON tablespace ]...]ما رأيكم بتغيير كلمة المرور للسمتخدم الذي أنشأناه ؟؟ كودSQL> alter user arabteam 2 identified by pass;User altered.ملاحظة : يمكن حتى للمستخدم arabteam نفسه أن ينفذ هذه التعليمة لتغيير كلمة السر الخاصة به . ما رأيكم بتغيير المساحة المخصصة للسمتخدم للكتابة على الفضاء الجدولي USERS ؟؟؟ كودSQL> alter user arabteam 2 quota 50m on users;User alteredو بذلك أنتهى الجزء الخاص بإنشاء السمتخدمين .. سوف نتحدث في الجزء القادم بإذن الله عن السماحيات ... ملاحظة هامة جداً : لكي تستطيع تطبيق كل التعليمات التي ذكرناها يجب أن توجد سماحيات للقيام بها ، أي لا تحاول أن تنفذ التعليمات بواسطة Scott ، و إنما أنصح تسجيل الدخول بواسطة SYSTEMأهلاً بالأخوين {عيسى} و Aboalnoor-Delphi7 . و أتمنى أن يستفيد الجميع . إدارة السماحيات : بكلمتين : السماحية هي قدرة المستخدم على فعل شيء ما .و تعتبر أوركل من أقوى نظم الإدارة التي تحوي على سماحيات متنوعة تكاد تشمل كل شيء حتى السماحيات الصغيرة و هي تعتبر نقطة قوة في صالح أوراكل . تقسم الصلاحيات إلى نوعين : 1-على مستوى النظام System Level : تسمح بتنفيذ عمليات على القاعدة بشكل عام كإنشاء الجدوال و حذفها .... إلخ . 2- على مستوى الغرض Object : تسمح بتنفيذ عمليات على غرض محدد . مثلاً : حذف سجلات من الجدجول emp . يتم منح السماحيات إلى السمتخدم عن طريق : 1- مباشر بمنح الصلاحية و تسميته . 2- عن طريق Role ( مجموعة سماحيات سنتعرف إليها لاحقاً ) . 3- عن طريق اسناد السماحية لجميع المستخدمين public . و لنبدأ بــ 1-System Privilege : يوجد حوالي 100 صلاحية مختلفة ضمن هذا المستوى تتضمن العمليات على مستوى القاعدة للتعامل مع الأغراض المختلفة مثل الجداول و الفهارس و المتسلسلة Sequence و الفضاءات الجدولية TableSpaces ..... مثال : تذكرون مثالنا السابق حيث سمحنا للمستخدم Arabteam بتسجيل الدخول ؟ كودgrant create session to arabteam;فالسماحية Create Session هي على مستوى النظام System Level . بشكل عام يتم منح الصلاحيات بالشكل : كودGRANT {system_privilege|role}[, {system_privilege|role} ]...TO {user|role|PUBLIC}[, {user|role|PUBLIC} ]...[WITH ADMIN OPTION]مثال آخر : - ما رأيكم أن نجعل المستخدم arabteam قادراً على إنشاء جدول ؟؟ كودgrant create table to arabteam;يمكنك أن تمنح المستخدم أكثر من سماحية في نفس الوقت : مثال لنجعل المستخدم arabteam قادراً على تنفيذ تعليمة select و Update على أي جدول يريده في القاعدة : كودgrant select Any table , update any table to arabteam;لحظة واحدة : ما ذا تعني كلمة Any ؟ و لماذا وضعناها ؟ السبب : عندما نضع Any فهذا يعني الصلاحية المطلقة الكاملة للمستخدم على مستوى القاعدة بشكل عام . للتوضيح : عندما نمنح المستخدم صلاحية إنشاء جدول create table فإنه يستطيع فيما بعد حذف الجدول الذي أنشأه فقط . ما ذا لو أردنا إطلاق يده ليعتدي على جداول الأخرين و يقوم بالحذف ؟ كودgrant drop any table to arabteam;- حسناً : ماذا لو أردنا أن نجعل المستخدم arabteam قادراً على منح الصلاحية التي منحناها له لمستخدم آخر ؟ يمكننا ذلكك إذا أرفقنا with admin option .أي : كودgrant create table to arabteam with admin option ;و بذلك يستطيع المستخدم arabteam منح هذه الصلاحية إلى مستخدم آخر ليكن arabteam2 .... ماذا لو غضبنا من المستخدم arabteam و أردنا سحب الصلاحية ؟ كودrevoke drop any table from arabteam;الآن سأذكر الصلاحيات الشائعة مقسمة حسب نوع object الذي نتعامل معه : كود الفئة الصلاحية INDEX CREATE ANY INDEX ALTER ANY INDEX DROP ANY INDEXTABLE CREATE TABLE CREATE ANY TABLE ALTER ANY TABLE DROP ANY TABLE SELECT ANY TABLE UPDATE ANY TABLE DELETE ANY TABLESESSION CREATE SESSION ALTER SESSION RESTRICTED SESSIONTABLESPACE CREATE TABLESPACE ALTER TABLESPACE DROP TABLESPACE UNLIMITED TABLESPACEإذا أردت أن تعرف جميع الصلاحيات اكتب الإستعلام التالي ( بعد تسجيل الدخول بإحد الحسابين SYSTEM أو SYS ) : كودselect distinct privilege from dba_sys_privs;2- على مستوى الغرض Object Level : هنا الصلاحية تطبق على غرض محدد: جدول –مشهد view – متسلسلة sequence - إجرائية procedure .هذه الصلاحيات معدودة على الأصابع : 1- Alter : تطبق على جدول– متسلسلة sequence - إجرائية procedure . 2- Delete : تطبق على جدول – مشهد view .2-Execute : تطبق على : إجرائية procedure .3 – Index : أي فهرسة : جدول – مشهد view . 4- Insert : جدول –مشهد view .5- References : جدول .6-Select : جدول –مشهد view – متسلسلة sequence .7- Update : جدول –مشهد view . مثال : لنجعل مستخدمنا arabteam قادراً على القراءة select من الجدول emp : كودSQL> grant select on scott.emp to arabteam;Grant succeeded.و لنجعله قادراً على تنفيذ الحزمة dbms_output : كودSQL> grant Execute on dbms_output to arabteam;Grant succeeded.بشكل عام : يتم منح صلاحية object privilege بالشكل التالي : كودGRANT { object_privilege [(column_list)][, object_privilege [(column_list)] ]...|ALL [PRIVILEGES]}ON [schema.]objectTO {user|role|PUBLIC}[, {user|role|PUBLIC} ]...[WITH GRANT OPTION]ماذا لو أردنا أن نجعل arabteam قادراً على منح الصلاحية لمستخدم آخر ؟؟ كودSQL> grant select on scott.emp to arabteam with grant option;Grant succeededهنا يجب أن نتوقف عند مقارنة صغيرة : ما الفرق بين grant option التي استخدمناها مع Object Level و Admin option التي استخدمناها مع System LeveL ؟ تخيلوا السيناريو التالي : 1- قمنا بمنح سماحية ما إلى المستخدم arabteam . 2-قام المستخدم arabteam بمنح هذه الصلاحية إلى المستخدم arabteam2 . 3- سحبنا الصلاحية من المستخدم arabteam . و السؤال : هل سيتأثر المستخدم arabteam2 بعملية السحب ؟؟ و الجواب : إذا تم استخدام admin option فإنه لن يتأثر مطلقاً و بوسعه استخدام الصلاحية . إذا تم إستخدام grant option فإن الصلاحية ستسحب منه أيضاً . الآن ملاحظة هامة جداً للمطورين : إذا كانت إجرائياتكم تستفيد من الصلاحيات التي يتمتع بها المستخدم الذي يقوم بتنفيذها ، و تم سحب هذه الصلاحيات لاحقاً ، فإن جميع هذه الإجرائيات ستصبح معطلة و يلزم عملية Recompiles لها .. الآن بدأت أشعر بالنعاس و أصبحت أرى عبارات Oracle على الجدران ..لذلك سأتوقف الآن و سأقوم بتجهيز القسم الثالث الذي يشرح ـمجموعات السماحيات Roles على الأغلب غداً إن شاء الله ..شكراً للجميع ..بالنسبة لفهرس الدورة فإن الوقت يلعب دوراً أساسياً في تحديده .. و لكن كبداية يمكن أن أحدد التالي: 1-إدارة السمتخدمين . 2-إدارة البنية الفيزيائية و المنطقية للقاعدة : 2-1- إدارة Oracle Instance . 2-2 - إيقاف و تشغيل القاعدة .2-3- إنشاء قاعدة جديدة . 2-4- التعامل مع Control file و Data file و Redo log . 2-5- الفضاءات الجدولية . 2-6 - إنشاء الجداول و الفهارس و المشاهد . 3- النسخ الإحتياطي للقاعدة : 3-1- النسخ اليدوي . 3-2 - استخدام RMAN . 4- إستخدام الأدوات الخاصة من أوراكل : 4-1- Sql Loader . 4-2- Log Miner . 4-3- Export And Import . بالنسبة لمرجعي الأساسي فهو منهاج شهادة إدارة قواعد بيانات أوراكل Oracle Certified Database Administratio ( التي و بحمد الله قد حصلت على OCA في هذا المجال و بإنتظار Ocp بعون الله ) أنصح بكتب Oracle University سواء أكانت : 1- Oracle 9i Database Administration fundamentals 1 And 2 2- Oracle 10g DBA workshop 1 and 2 . السلام عليكم : تحدثنا في الأجزاء السابقة عن إنشاء المستخدمين و منح الصلاحيات ،و لكن ما رأيكم بالتالي : لديك حوالي 100 مستخدم جديد نريد إنشاءهم ، ثم منح صلاحيات إنشاء الجدوال و المشاهد للجميع ، فالسؤال كم سطراً من التعلميات تحتاج ؟ و في الجهة الأخرى إذا أردت سحب صلاحية معينة من هؤلاء المئة فكم سطراً أخر ستكتب من أجل ذلك ؟ و هل أنت متأكد من أنك لم تنسى أي مستخدم ؟؟ الحل : مجموعة السماحيات Rols . إذاً Role هي مجموع السماحيات المختلفة التي نود إسنادها فيما بعد إلى مستخدم واحد أو أكثر أو حتى إلى مجموعة سماحيات أخرى .تتميز role بسهولة إستخدامها المرة تلو الأخرى بحيث يتم إسنادها إلى المستخدم و سحبها منه ، كما أن سحب الصلاحية من role تؤدي إلى سحبها من المستخدم الذي أسندنا له تلك role . يمكن أن تسند أكثر من role إلى مستخدم ما ، كما يمكنك اسناد role واحدة إلى أكثر من مستخدم . تعليمة إنشاء role : كودSQL> create role arabteam_role;Role created.بشكل عام : كودCREATE ROLE role [NOT IDENTIFIED | IDENTIFIED{BY password | EXTERNALLY | GLOBALLY | USING package}]- ماذا لو أردنا منح role مشروطة لمستخدم ما ؟ أي يجب عليه كتابة كلمة سر لتمكين هذه role ؟؟ كودSQL> create role arabteam_role identified by arabteam_pass; Role created.ماذا لو أردنا مصادقة نظام التشغيل ( كما فعلنا مع المستخدمين ) لتمكين role ؟ كودSQL> create role arabteam_role identified Externally;كيف نسند السماحيات إلى role ؟ بالطريقة نفسها التي أسندنا فيها السماحيات للمستخدمين : كودSQL> grant create table to arabteam_role; Grant succeededالآن كيف نسند role إلى المستخدمين ؟ كودSQL> grant arabteam_role to arabteam; Grant succeededحتى أننا نستطيع إسناد role إلى أخرى ، فتصبح الثانية تحوي صلاحيات الأولى : كودSQL> grant arabteam_role1 to arabteam_rol2; Grant succeededبشكل عام : كودGRANT role [, role ]...TO {user|role|PUBLIC}[, {user|role|PUBLIC} ]...[WITH ADMIN OPTION]تمكين و إلغاء تمكين Roles : يستطيع المستخدم arabteam أن يفعل أو يلغي عمل role معينة قام مدير القاعدة أو أي مستخدم آخر بإسنادها إليه . قد يسأل البعض: أي مجنون يلغي صلاحيات ممنوحة إليه ؟؟؟ الجواب سيدركه مطوري التطبيقات أكثر من غيرهم : في التطبيقات قد يتشارك الموظفون اسم مستخدم واحد لإستعمال التطبيق ، و لكن نريد فرض مستويات من الحماية على مستوى السمتخدم الواحد ، أي قد نسمح لموظف (س) بسماحيات أكثر من الموظف (ع) رغم أن الإثنين يقومان بتسجيل الدخول بالمستخدم arabteam . أرجو أن الفكرة قد وصلت . كيف نستطيع التفعيل : بإستخدام التعليمة set : كودSet role arabteam_role;ماذا لو أراد المستخدم أن يفعل role مشروطة بكلمة سر ؟؟ كودset role arabteam_role identified by arabteam_pass;ماذا لو أراد المستخدم تفعيل جميع roles التي يملكها ماعدا role معينة ؟ كودset role all except arabteam_role;لمطوري التطبيقات : هناك dbms_session.set_role لتمكي
    0 المواضيع
    0 المساهمات

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


    وهذا الموضوع هوتصميم برنامج لدليل التلفوناتمرحبا..أنا عضو جديد في هذا المنتدى..وكمشاركة أولى لي أود أن أضيف موضوع في هذا المنتدى..وهذا الموضوع هوتصميم برنامج لدليل التلفوناتوسوف اشرح فيه كل خطوة أقوم بهاطبعا البرنامج بسيط جدا وليس معقد ويتكون فقط من جدول واحد فأرجو تفاعلكم معي وإذا كانت هناك طريقة أخرى أفضل من الطريقة التي استخدمتها فإطرحوها لكي تعم الفائدة على الجميع.أولا سوف أشرح عمل البرنامج:البرنامج طبعاً للمبتدئين في أوراكل ديلفلوبر وهو يتكون من ثلاثة إطارات:الإطار الرئيسي وبه البحث عن البيانات وعرضها ومن هذا الإطار يمكن الحذف أيضاًوهذا الإطار هو الذي ينقلنا إلى بقية الإطارات الأخرى.الإطار الثاني إطار الإضافة(إضافة بيان جديد) الإطار الثالث إطار التحديث بالبيانات الموجودة.ونبدأ على بركة الله ولكن أهم شيئ تفاعلكم ..أولا تكوين الجدول:وهو عبارة عن جدول واحد فقط يوجد به البيانات التالية:الإسمName ، العنوان Address ، التلفون Tel ، الإيميل Email ، ملاحظات Noteإفتح برنامج SQL * PLUS وإدخل بالمستخدم system/managerوإنشئ الجدول phone كما يلي:كودCREATE TABLE phone(name varchar(30) primary key,address varchar(20),tel varchar(20),email varchar(30),note varchar(50));لاحظ أن الإسم هو المفتاح الأساسي للجدول أي لايسمح أن يترك الأسم فارغا ولا يسمح أيضاً بإدخال الإسم أكثر من مرة (عدم تشابه الأسماء).الأن ندخل مجموعة من القيود من أجل أن نطبق عليه بعض الأمثلة في البرنامج:كودinsert into phone(name,address,tel,email,note) values('Ahmed','Yemen','123321','ahm@yahoo.com','');insert into phone(name,address,tel,email,note) values('Mohammed','Iraq','2258647','moh@yahoo.com','');insert into phone(name,address,tel,email,note) values('amer','Sudia','58694725','ameer@yahoo.com','');insert into phone(name,address,tel,email,note) values('moner','Egypt','55886644','moner@hotmail.com','');insert into phone(name,address,tel,email,note) values('Mohsen','Yemen','123355','moh@yahoo.com','');insert into phone(name,address,tel,email,note) values('moneraa','Iraq','5541857','moneraa@hotmail.com','');بعد هذا سوف نبدأ بالدفلوبر ونبدأ بتصميم الإطاراتمنتظر تفاعلكم مع الموضوع لكي أكملة.. مرحبا..لم أجد أي تفاعل..معقولة أكثر من 50 زيارة وقراءة للموضوع ولم يرد سوى عضو واحد وشكرا جزيلاً لبنت اليمن على الرد.على العموم سوف أكمل اليوم الدرس. ولكن إذا لم أجد تفاعل يذكر لن أستمر (أتفقنا..).ولنبدأ على بركة الله:1- افتح برنامج Oracle Form Builder2- من نافذة Welcome to the form Builder إختار Use the Data Block Wizard(لماذا؟)وذلك من أجل تكوين بلوك بيانات (داتا بلوك) جديد مربوط بالجدول phone الذي أنشأناه في الدرس الماضي.ولن تستطيع تطبيق هذا الدرس إلا إذا طبقت الدرس الماضي.3- إختار Display this page next time ثم التالي ثم إختار Table or View ثم التالي،وذلك من أجل أن نستدعي الجدول من قاعدة البيانات.4- لإستدعاء الجدول نختار Browse ثم إكتب إسم المستخدم وكلمة المرور system/manager ثم نختار إسم الجدول وهو كما سميناه سابقاً بإسم phone سوف يظهر لنا في العمود Available Columns أسماء جميع الحقول التي كوناها في الجدول.إختار الجميع ليتم نقلهن جميعاً إلى العمود Database Item ثم التالي. 5- إختار Create the data block, then call the Layout Wizard ثم نهايةوذلك من أجل إستدعاء Wizard أخر من أجل عمل تصميم لمحتويات بلك البيانات.6- من الـ Wizard الجديد إختار التالي ثم إختار New Canvas أي ساحة عمل جديدة وإختار النوع Content 7- ثم إختار الكل لنقل حقول الجدول إلى العمود Displayed Items من أجل عرض هذه الحقول في ساحة العمل Canvas الجديدة ثم إختار التالي.8- إختار التالي مرة أخرى أو يمكنك قبل إختار التالي ان تغير من عناوين الأعمدةوهذا لايؤثر على التسميات الموجودة في الجدول ولكن أفضل تركها كما هي.[imghttp://www.arabteam2000.com/picload/pics_10_05/04_06_06_12_21_48_1149405708datablock47bs.jpg[/img]9- بعد إختيار التالي سوف تظهر شاشة لإختار شكل التصميم إختار Form من اجل عرض صف واحد من البياناتأما Tabular من أجل عرض عدد من الصفوف.إختار Form ثم التالي.10- سوف تظهر الآن شاشة من أجل وضع إسم للإطار الذي سوف يحوي بلك البيانات إجعله فارغا ثم التالي ثم نهاية.لقد كونا الآن بلك بيانات مرتبط بقاعدة البيانات وبالجدول phone. يجب أن تكون شاشتك كما في الشكل التالي: تم تقليل : 62% من الحجم الأصلي للصورة[ 962 x 582 ] - إضغط هنا لعرض الصورة بحجمها الأصلي سوف يكون هذا Canvas هو الشاشة الأساسية الأولى ومنه سوف يتم الإنتقال إلى بقية الشاشات الأخرى التي سوف نكونها في الدروس التالية..أي أن هذا الـ Canvas سوف يكون فقط لعرض النتائج وليس للإضافة والتعديل.الان نغير من بعض الخصائص:بلك البيانات المسمى حاليا phone سوف نغيير خصائصة كما يلي:إنقر على بلك البيانات phone ثم إضغط المفتاح F4 من أجل عرض نافذة الخصائصغير الخصائص كما يلي:Name: ViewDatabase Data Block: Noوإحذف كلمة phone من أمام الخاصية Query Data Source Name وذلك من أجل ان نجعل بلوك البيانات هذا غير مرتبط بالجدول( قد تتسأل لماذا أجعله غير مربوط بالجدول ومن أين سوف أستدعي البيانات) الجواب البيانات سوف نبحث عنها بإستخدام مربع نص وسيكون بلوك البيانات View فقط لعرض ما حصلنا عليه من البحث (لاتشغل بالك سوف تتوضح الفكرة مع التقدم في الدرس) تم تقليل : 80% من الحجم الأصلي للصورة[ 747 x 581 ] - إضغط هنا لعرض الصورة بحجمها الأصلي أما خصائص ساحة العمل Canvas فسوف نغيير خصائصها كما يلي:Name: CNVViewالان حدد العناصر Name,Address,Tel,Email,Memo وذلك بالضغط على كل عنصر مع الإستمرار بالضغط على المفتاح Ctrl ثم إضغط المفتاح F4 لعرض الخصائص وغير كما يلي:Item Type: Display Item وذلك من أجل العرض فقطDatabase item: NoCanvas: CNVVIEWReading Order: Left to Right تم تقليل : 85% من الحجم الأصلي للصورة[ 699 x 664 ] - إضغط هنا لعرض الصورة بحجمها الأصلي أما خصائص FRAME فغيرها كما يلي:Update layout: Locked وذلك من أجل إذا أردت التغيير في حجم الإطار فلا يؤثر على العناصر.الآن إحفظ عملك بالضغط على حفظ وإحفظه بإسم telephoneسوف أتوقف هنا اليوم ومنتظر تفاعلكم مع الدروسوموعدنا غداً وإن غداً لناظره لقريب... صباح الخيرأشكرك أختى بنت اليمن على تفاعلك وإن شاء الله الأجرعند اللهوأشكرك أخي المشرف على تثبتك للموضوع مما أعطاني حافز كبير للإستمراروأشكرك أخ aseer30 على تشجيعك لي..وتكملة للدروس فالدرس الثالث اليوم سيكون عن عرض البيانات وعرض نتائج البحث (الأسماء فقط) في قائمة وبمجرد الضغط على إسم شخص من القائمة تظهر التفاصيل في بلك البيانات.(هل وضحت الصور؟؟)ونبدأ على بركة الله..كيف ستكون عملية البحث؟؟؟لعملية البحث نحتاج الى عنصر نص Text Item يتم كتابة حرف أو أكثر من حروف الاسم في عنصر النص هذا فيتم عرض جميع الأسماء (الأسماء فقط) التي تبدأ بهذا الحرف أو الحروف في قائمة. إذا سوف نحتاج أيضاً إلى عنصر القائمة List Item لعرض نتائج البحث..إذا نحتاج الأن لتكوين عنصرين (عنصر نص لكتابة حروف البحث وعنصر القائمة لعرض قائمة بنتائج البحث).1- كون مربع نص Text Item وعنصر قائمة List Item في بلوك البيانات View كما في الصورة التالية: تم تقليل : 64% من الحجم الأصلي للصورة[ 932 x 551 ] - إضغط هنا لعرض الصورة بحجمها الأصلي 2- غير خصائص Text Item كما يلي:Name:SEARCHDatabase Item: NoCanvas:CNVVIEW تم تقليل : 95% من الحجم الأصلي للصورة[ 631 x 626 ] - إضغط هنا لعرض الصورة بحجمها الأصلي 3- غير خصائص عنصر القائمة List Item كما يلي:Name:LISTVIEW وتذكر هذا الإسم جيداً LISTVIEW سوف نستخدمه كثيراً في هذا الدرس.إضغط على More بجوار الخاصية Elements in List وإحذف أي نص موجود أسفل List Elements ثم موافقوذلك لمنع من إدخال أي بيانات الى القائمة يدوياً. فسوف يتم إدخال البيانات إلى القائمة بالإعتماد على محتوى مربع نص البحث.List Style: TlistDatabase Item: NOCanvas:CNVVIEWDirection: Left To Right تم تقليل : 99% من الحجم الأصلي للصورة[ 601 x 615 ] - إضغط هنا لعرض الصورة بحجمها الأصلي الأن إحفظ البرنامج ثم نفذه المفروض أن تظهر نافذة التنفيذ كما يلي: تم تقليل : 70% من الحجم الأصلي للصورة[ 856 x 677 ] - إضغط هنا لعرض الصورة بحجمها الأصلي هذه النافذة كشكل عام تحتاج إلى التعديل عليها بالنقط التالية:1- شريطي الأدوات والقوائم نريد إخفائهم (لن نحتاجهم في هذه الشاشة شاشة العرض والبحث)2- إسم نافذة البرنامج Window1 نريد تغييرها إلى Telephone Guide3- نافذة البرنامج نريدها مكبرة maximizeلتعديل هذه النقاط نقوم بالتالي:1- من خصائص الفورم الرئيسي Telephone نحذف كلمتي DEFAULT&SMARTBAR من أمام الخاصية Menu Module فهاتين الكلمتين تدلان على شريطي القوائم والأدوات.2- من خصائص النافذة Window نغير التالي:Name:Window1Title: Telephone Guide3- أما عملية تكبير النافذة فسوف نحتاج إلى Trigger (ماهو الترايجر؟؟) الترايجر هو عبارة عن أكواد برمجية يتم تنفيذها في أوقات محددة في البرنامج .إذا نكون ترايجر على مستوى الفورم Telephone أي أسفل الفورم TELEPHONE أنقر بالأيمن على Trigger ثم إختارSmartTriggers ثم إختار WHEN-NEW-FORM-INSTANCE أي أن وقت تنفيذ هذا الترايجر هو عند تشغيل الفورم. سوف تفتح نافذة جديدة سوف نكتب بها بعض الأكواد بلغة PL/SQL البسيطة.وسوف نكتب في هذا الترايجر ما يلي:كودset_window_property('window1',window_state,maximize);معنى هذا الكود انه غير في خصائص النافذة التي اسمها 'Window1' بحيث تصبح Maximizeالأن إحفظ البرنامج ونفذه.تلاحظ أن النقاط السابقة قد تم تلافيها.الان ماذا تلاحظ في نافذة التفيذ أين البيانات التي أدخلناها في الجدول في أول درسحاول أن تكتب أي حرف في عنصر نص البحث ثم إضغط إنتر !!!!؟لا يوجد شيئ... لم يبحث عن شيئ.. طبعاً لا يوجد شيئلإن حاليا كل الذي سويناه فقط الجزء المرئي يبقى الأن دور البرمجة.أول شيئ نريده وقبل البدء بالبحث نريد عرض جميع الأسماء في عنصر القائمة Listview.ولعمل ذلك سوف نحتاج إلى ترايجر على الفورم الرئيسي (نفس التريجر السابق سوف نفتحة ونعدلة إلى الشكل التالي كودdeclare cursor curs is select name from phone; a varchar(30); n number:=0;begin set_window_property('window1',window_state,maximize); clear_list('listview'); open curs; loop fetch curs into a; exit when curs%notfound; n:=n+1; add_list_element('listview',n,a,a); end loop;end;الأن دعنا نشرح هذا الكود خطوة خطوة:declare عنوان لتعريف المتغيرات ويحتوي على المتغيرات التالية:cursor curs is select name from phone أي أن الـ curs هو متغير من نوع مؤشر أي مصفوفة من البياناتتحتوي على عدد من البيانات ترجعها جملة الإستعلام select وجملة select السابقة تعود بجميع الأسماء الموجودة في الجدولphone (واضح إن شاء الله)a varchar(30 متغير حرفي طولة 30 حرف وسوف نستخدم هذا المتغير من أجل خزن الإسم فيه.n number:=0 متغير رقمي قيمته الإبتدائية تساوي صفر وسوف نستخدمه كرقم السطر في القائمةbegin إيعاز لبداية البرنامج أو الكودset_window_property('window1',window_state,maximize); تم شرحها سابقا والخاصة بتكبير النافذةclear_list ('listview'); لتصفير وحذف أي عنصر من القائمة listview وهذه القائمة تعرفوها جيدا ألم أقل لكم تذكروا إسمها جيداopen curs; لفتح المتغير cursloop بداية دوارةfetch curs into a; جلب أول سطر من المتغير curs ووضعة في المتغير a وعند الرجوع مرة أخرى لهذ الكود فسوف يتم إستدعاء السطر الثاني من المتغير curs وهكذا الى حين الخروج من الدوارة.exit when curs%notfound; شرط الخروج من الدوارة وهو عندما يكون المتغير curs قد أستدعى جميع أسطرهn:=n+1; زيادة قيمة المتغير n بواحد أي يصبح واحد في الدورة الأولى و أثنين في الدورة الثانية وهكذا.add_list_element('listview',n,a,a); إضافة عنصر للقائمة listview في الموقع n واسم العنصرالذي سوف نضيفه في القائمة هو قيمة المتغير a وإسمه في قاعدة البيانات ايضاً قيمة المتغير aend loop; نهاية الدوارة.end; نهاية البرنامج أو الكود.إن شاء الله يكون هذا الكود واضح على العموم يجب أن يكون لديك فكرة ولو بسيطة عن لغة PL/SQL الان إحفظ البرنامج ثم نفذ ماذا تلاحظ؟؟؟جميع الأسماء التي أضفناها في الدرس الأول قد ظهرت في القائمة listview نتجية جميلة أليس كذلك؟؟ ولكن أين بقية البيانات اي العنوان ورقم التلفون وغيرها؟؟؟لكي تظهر هذه البيانات نحتاج ألى ترايجر أخر. (أين نحط هذا الترايجر ومتى يجب أن يتنفذ؟؟؟)هذا ماسوف نتطرق به في الدرس القادم....أترككم في رعاية الله.
    0 المواضيع
    0 المساهمات

  • المواضيع
    المساهمات
    مشاهدة
    آخر مساهمة
  •  إعلان عام: [ تصويت ]
    التقديم لشغل وظائف صيارفة بالدرجة الرابعة عشر للهيئة القومية للكهرباء وفقاً للآتي:
    من طرف Admin
    1 المساهمات
    3140 مشاهدة
    Admin آخر مساهمةاطلع على آخر مُساهمة
    الثلاثاء يونيو 01, 2010 8:48 pm
  •  [ تصويت ]
    من طرف Admin
    2 المساهمات
    1387 مشاهدة
    المخالبو  آخر مساهمةاطلع على آخر مُساهمة
    الخميس ديسمبر 30, 2010 2:14 am
 
 

عدد المتصفحين الحاليين للمنتدى: لا أحد
المشرفون

لا أحد

صلاحيات هذا المنتدى:

لاتستطيع وضع مواضيع جديدة في هذا المنتدى
لاتستطيع الرد على المواضيع في هذا المنتدى

المفتاح
  • مساهمات جديدة مساهمات جديدة
  • مساهمات جديدة [ موضوع شعبي ] مساهمات جديدة [ موضوع شعبي ]
  • مساهمات جديدة [ موضوع مقفل] مساهمات جديدة [ موضوع مقفل]
  • لا مساهمات جديدة لا مساهمات جديدة
  • لا مساهمات جديدة [موضوع شعبي ] لا مساهمات جديدة [موضوع شعبي ]
  • لا مساهمات جديدة [موضوع مقفل] لا مساهمات جديدة [موضوع مقفل]
  • kurcom122 kurcom122
  • ودالماحى ودالماحى
  • إعلان عام إعلان عام