بتاريخ: 31 مايو 200818 سنة comment_130149 بسم الله الرحمن الرحيم الأخوة الكرام ، السلام عليكم ورحمة الله وبركاتة ، بإختصار شديد أنا لدي مشكلة متعلقة بعملية الـ LOG-ON ، وبحثت كثيراً بالمنتدي قبل طرحي لهذا السؤال أنا لدي مستخدم يدعي DB ، وكلمة مرورة هو DB2007 !!! عندما أفتح الملف FRM1.FMX من الطبيعي أنه يعرض لي نافذة تدعي ( إتصال LOGON ) ، تحتوي علي ثلاثة مربعات نصية ، الأولي خاصة بإسم المستخدم ، والثانية خاصة بكلمة المرور ، أما الثالثة فهي خاصة بإسم السيرفر لحل هذه المشكلة من الطبيعي إستخدام الكود المناسب له في حدث ON-LOGON كما يلي : LOGON('DB','DB2007@PROORA'); ولكن أخواني مشكلتي ليست في هذه العملية علي الإطلاق ، ولكن مشكلتي متعلقة بكيفية إخفاء هذه الشاشة أياً كان حتي ولو كانت عملية الإتصال غير صحيحة ، مثلاً لو قمت بتغيير عملية الإتصال كما يلي : LOGON('DB-SSSS','DB2007@PROORA'); فستؤدي الي عرض نافذة الإتصال في حالة عدم وجود أي مستخدم بهذا الأسم وعرض رقمها ( 01017 ) ، فكيف يمكنني تفادي هذه النافذة وإغلاق البرنامج علي الفور ، او علي الأقل إستدعاء نافذة أخري تقوم بهذه المهمة شكراً ، ومنتظر الرد تم تعديل 31 مايو 200818 سنة بواسطة MMA تقديم بلاغ
بتاريخ: 31 مايو 200818 سنة كاتب الموضوع comment_130177 إخواني الكرام ، بإختصار شديد ،أنا لا أرغب في عرض نافذة الإتصال ولكن أرغب في عرض نافذة قمت بتصميمها يدوياً ، ولكن قبل عملية العرض يجب إختبار نتيجة الإتصال شكراً تقديم بلاغ
بتاريخ: 31 مايو 200818 سنة comment_130183 اخوي انا مبتدى واتمنى ان احل مشكلتك الذي تريدة ان تظهر رسالة اذا ادخل المستخدم اسم مستخدم وكلمة مرور خاطئة هل هذا صحيح تقديم بلاغ
بتاريخ: 31 مايو 200818 سنة comment_130186 السلام عليكم.جرب تريجر pre_logon غلى مستوى الفورم. تقديم بلاغ
بتاريخ: 1 يونيو 200818 سنة كاتب الموضوع comment_130230 أشكركم جميعاً علي حسن تعاونكم معي جرب تريجر pre_logon غلى مستوى الفورم. غير مقبول إدراج جملة LOGON في هذا الحدث !!!حيث يعرض لي رسالة رقمها ( 41048 ) ، وتنص بعدم قبول وظيفة LOGON في هذا الحدث مع ديفيلوبار ( 6 )بص يا أخي ، أنا لدي طريقة لصناعه هذا وهو أن أرفض عرض هذه النافذة من الأساس بإستخداتم الجملة التالية :LOGON('USER-NAME','PASSWORD@SERVERNAME',FALSE); لكن هناك مشكلة ، هذه الطريقة تؤدي الي حدوث مشكلة أخري وهي في حالة عدم الحصول علي إسم المستخدم أو كلمة المرور صحيحة ، او حتي إسم الخادم صحيح يفتح نافذة النموذج بشكل طبيعي كأن ليس هناك أي مشاكل !!!إذاً ، فالأسلوب الصحيح إو إرسال القيمة TRUE بدلاً من FALSE للباراميتر logon_screen_on_error !!!لكن للأسف هذا الباراميتر يقوم بفحص الإتصال وفي نفس الوقت يعرض نافذة الإتصال Logo !!!أنا كل الي عاوزة أن أصنع فحص علي الإتصال دون عرض هذه النافذة ، وفي حالة حدوث أي خطأ يتم رفض فتح النموذج أو علي الأقل فتح نموذج آخر !!!علي العموم أنظر الي الكود التالي وستفهمني جيداً : BEGIN LOGON('SYSTEM','MANAGER@PROORA',FALSE); IF(ERROR_CODE <> 0)THEN MESSAGE('عملية الإتصال غير سليمة'); MESSAGE('عملية الإتصال غير سليمة'); RAISE FORM_TRIGGER_FAILURE; END IF; END; ولكن هذا الكود لا يعمل ، يجب أن يتم إرسال القيمة TRUE ولكنها تعرض لي نافذة الإتصال ، وانا لا أرغب في عرض هذه النافذةملحوظة أخيرة ، انا حاولت أن أستخدم أساليب كثيرة منها مثلاً صناعة Function يقوب بهذه المهمة ، ومن ثم إستدعائها في الحدث on-logon او pre-logon ولكنها لم تنجح علي الإطلاق ، أنظر : FUNCTION TEST_CONNECT RETURN BOOLEAN IS BEGIN LOGON('DB','DB@PROORA'); RETURN TRUE; EXCEPTION WHEN OTHERS THEN RETURN FALSE; END; للأسف أخي ، انا حتي الآن هتجنن وأجد حل ، وفعلياً بحثت بالمنتدي عن الكثير من الموضوعات ، ولم أجد الحل الشافي له !!!فياريت لو أحد يعلم حل هذه المشكلة فاليساعدني ، لكن لو كان ليس هناك أي حلول ومن قرأ رسالتي يعلم هاكذا فاليخبرني لعل وعسي أن أفكر في طريقة أخري !!!شكراً ، وجزاكم الله كل خير ، تم تعديل 1 يونيو 200818 سنة بواسطة MMA تقديم بلاغ
بتاريخ: 1 يونيو 200818 سنة comment_130243 شوف يا أخي. هانفترض إنك عملت فورمه للمستخدم scott\tiger@orcl ودي هاتكون ال (calling form) ، وفورمه أخري على المستخدم hr\hr@orcl ودي هاتكون ال (called form) تمام.المفترض أن الفورمه الأولى (calling form) هاتستدعي الثانيه (called form) عن طريق زر الإستدعاء العادي ولتكن open_form('the called form name'); إفتح الفورمه الثانيه (called form) وإعمل تريجر على مستوى الفورم وهو pre-form وأكتب فيه الإتي: declare p_word varchar2(100); u_name varchar2(100); c_string varchar2(100); begin p_word:=get_application_property(password); u_name:=get_application_property(username); c_string:=get_application_property(connect_string); :text_item7:=p_word; :text_item8:=u_name; :text_item9:=c_string; if u_name not like 'hr' or p_word not like 'hr' or c_string not like 'orcl' then message('the connection information you have written is not appropriate'); raise form_trigger_failure; -- or you can do any action you want rather what I have coded above. end if; end; إن شاء الله تجد ما كنت ترغب به. تقديم بلاغ
بتاريخ: 1 يونيو 200818 سنة comment_130245 آسف هناك جزئيه في الكود ليس لها داعي أنا عملتها للإختبار فقط. كود تريجر ال pre-form هو كالآتي: declare p_word varchar2(100); u_name varchar2(100); c_string varchar2(100); begin p_word:=get_application_property(password); u_name:=get_application_property(username); c_string:=get_application_property(connect_string); if u_name not like 'hr' or p_word not like 'hr' or c_string not like 'orcl' then message('the connection information you have written is not appropriate'); raise form_trigger_failure; -- or you can do any action you want rather what I have coded above. end if; end; تقديم بلاغ
بتاريخ: 1 يونيو 200818 سنة كاتب الموضوع comment_130249 قبل أي شيء أشكرك أخي علي مجهوداتك معيولكن أخي أنا لا أرغب في ذلك ، أنا ارغب في إختبار العملية أثناء الإتصال مع قاعدة البيانات on-logon وذلك تتم مرة واحدة من خلال النموذج الأول ، أما بقية النوافذ فتكون متبوعة للنافذة الأولي .شكراً مرة أخري تقديم بلاغ
بتاريخ: 2 يونيو 200818 سنة كاتب الموضوع comment_130282 الإخوة الكرام ، السلام عليكم ورحمة الله وبركاتة ،في الحقيقة أنا دخت كثيراً حتي تمكنت من إيجاد حل مبدئي ، وبجد أنا حصلت علي هذه الفكرة بالصدفة ، بالزات بعد رد الأخ الكريم " أحمد يحي "والطريقة سأدرجها بالمنتدي حتي أتأكد من صحة الكود ، وفي نفس الوقت تكون كمعلومة لمن تواجهه هذه المشكلة مثلي !!!بإختصار شديد ، نحن لدينا دالة تدعي USER ، هذه الدالة تستخدم في جلب إسم المستخدم الحالي بشرط أن يكون النموذج متصل فعلياً بإحدي المستخدمين ، وإلا سيعرض لك رسالة تحت رقم ( ORA-03114 ) ، وإليكم طريقة إختبار النتيجة :1- أفتح نموذج جديد وإلغي عملية الإتصال ، وذلك من خلال حدث ON-LOGON قم بإدراج الجملة NULL علي مستوي النموذج.2- أدرج زر أمر جديد ، ومن ثم أكتب بداخلة الجملة التالية : DECLARE UN VARCHAR2(50); BEGIN UN := USER; END; 3- قم بتشغيل النموذج ومن ثم أنقر علي الزر ، فستجد الرسالة فعلياً تحت رقم ( ORA-03114 ).حاول تغلق النموذج ، وأدرج الكود التالي في حدث ON-LOGON : LOGON('SYSTEM','MANAGER@PROORA'); ومن ثم قم بتشغيل النموذج ثانيتاً ، وأنقر علي زر الأمر فستجدة لا يعرض أي خطأ ، بل يقم بجلب إسم المستخدم ومن ثم إدراجة بالمتغير UN --------------------------------- إذاً ، الآن يمكننا إستغلال هذا الموقف الجميل وإنشاء الغرض التالي : FUNCTION TEST_CONNECT RETURN BOOLEAN IS ID_UNAME VARCHAR2(50); BEGIN ID_UNAME := USER; RETURN TRUE; EXCEPTION WHEN OTHERS THEN RETURN FALSE; END; أما لإجراء إختبار فعليك بإستدعاء هذه الدالة كما يلي : LOGON('SYSTEM','MANAGER@PROORA',FALSE); IF(TEST_CONNECT = FALSE)THEN RAISE FORM_TRIGGER_FAILURE; END IF; حاول أن تغير كلمة المرور أو إسم المستخدم أو الخادم سيرفض فتح النموذج من أساسة ، مثلاً غير إسم المستخدم الي أي إسم غير موجود من أساسة ، أو غير كلمة المرور أو إسم الخادم الي إسم خاطيء !!!إخواني ، أنا أستخدمت أسلوب التحايل طالما إمكانيات الديفيلوبار ضعيفة لهذه الدرجة ، بس أعمل أية للضرورة أحكام فياريت لو الطريقة جيدة أو حتي غير جيدة أتمني التوجية من حضراتكم !!!شكراً لكم جميعاً ، وشكر خاص للأخ الغالي " أحمد يحيي "السلام عليكم Simble.zip تم تعديل 2 يونيو 200818 سنة بواسطة MMA تقديم بلاغ
بتاريخ: 7 يونيو 200818 سنة comment_130704 السلام عليكم مافهمته من كلامك انك تريد الدخول على الفورم من غير اسم المستخدم واليوزر نيم والسيرفر هل هذا صحيح ؟بحيث يكون اليوزر نيم والديتبيس ثابتهاذا كان هذا هو وتستخدم الانترنت اكسبلورور فطريقتها سهله جدا اذا كان نعم اعطني مسار الفورمه كامله التي تريد حذف شاشة اليوزر نيم منها وساعملها لك أو هو امر اخر ...؟! تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.