الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

مشكلة في نافذة الإتصال

Featured Replies

بتاريخ:

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



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



بإختصار شديد أنا لدي مشكلة متعلقة بعملية الـ LOG-ON ، وبحثت كثيراً بالمنتدي قبل طرحي لهذا السؤال



أنا لدي مستخدم يدعي DB ، وكلمة مرورة هو DB2007 !!!



عندما أفتح الملف FRM1.FMX من الطبيعي أنه يعرض لي نافذة تدعي ( إتصال LOGON ) ، تحتوي علي ثلاثة مربعات نصية ، الأولي خاصة بإسم المستخدم ، والثانية خاصة بكلمة المرور ، أما الثالثة فهي خاصة بإسم السيرفر



لحل هذه المشكلة من الطبيعي إستخدام الكود المناسب له في حدث ON-LOGON كما يلي :


LOGON('DB','DB2007@PROORA');


ولكن أخواني مشكلتي ليست في هذه العملية علي الإطلاق ، ولكن مشكلتي متعلقة بكيفية إخفاء هذه الشاشة أياً كان حتي ولو كانت عملية الإتصال غير صحيحة ، مثلاً لو قمت بتغيير عملية الإتصال كما يلي :


LOGON('DB-SSSS','DB2007@PROORA');


فستؤدي الي عرض نافذة الإتصال في حالة عدم وجود أي مستخدم بهذا الأسم وعرض رقمها ( 01017 ) ، فكيف يمكنني تفادي هذه النافذة وإغلاق البرنامج علي الفور ، او علي الأقل إستدعاء نافذة أخري تقوم بهذه المهمة




شكراً ، ومنتظر الرد


تم تعديل بواسطة MMA

بتاريخ:
  • كاتب الموضوع

إخواني الكرام ، بإختصار شديد ،

أنا لا أرغب في عرض نافذة الإتصال ولكن أرغب في عرض نافذة قمت بتصميمها يدوياً ، ولكن قبل عملية العرض يجب إختبار نتيجة الإتصال


شكراً

بتاريخ:

اخوي انا مبتدى واتمنى ان احل مشكلتك
الذي تريدة ان تظهر رسالة اذا ادخل المستخدم اسم مستخدم وكلمة مرور خاطئة هل هذا صحيح

بتاريخ:

السلام عليكم.

جرب تريجر pre_logon غلى مستوى الفورم.

بتاريخ:
  • كاتب الموضوع

أشكركم جميعاً علي حسن تعاونكم معي

جرب تريجر 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;



للأسف أخي ، انا حتي الآن هتجنن وأجد حل ، وفعلياً بحثت بالمنتدي عن الكثير من الموضوعات ، ولم أجد الحل الشافي له !!!

فياريت لو أحد يعلم حل هذه المشكلة فاليساعدني ، لكن لو كان ليس هناك أي حلول ومن قرأ رسالتي يعلم هاكذا فاليخبرني لعل وعسي أن أفكر في طريقة أخري !!!


شكراً ، وجزاكم الله كل خير ،

تم تعديل بواسطة MMA

بتاريخ:

شوف يا أخي. هانفترض إنك عملت فورمه للمستخدم 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;




إن شاء الله تجد ما كنت ترغب به.

بتاريخ:

آسف هناك جزئيه في الكود ليس لها داعي أنا عملتها للإختبار فقط. كود تريجر ال 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;

بتاريخ:
  • كاتب الموضوع

قبل أي شيء أشكرك أخي علي مجهوداتك معي

ولكن أخي أنا لا أرغب في ذلك ، أنا ارغب في إختبار العملية أثناء الإتصال مع قاعدة البيانات on-logon

وذلك تتم مرة واحدة من خلال النموذج الأول ، أما بقية النوافذ فتكون متبوعة للنافذة الأولي .


شكراً مرة أخري

بتاريخ:
  • كاتب الموضوع

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

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

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

بإختصار شديد ، نحن لدينا دالة تدعي 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;



حاول أن تغير كلمة المرور أو إسم المستخدم أو الخادم سيرفض فتح النموذج من أساسة ، مثلاً غير إسم المستخدم الي أي إسم غير موجود من أساسة ، أو غير كلمة المرور أو إسم الخادم الي إسم خاطيء !!!


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

فياريت لو الطريقة جيدة أو حتي غير جيدة أتمني التوجية من حضراتكم !!!


شكراً لكم جميعاً ، وشكر خاص للأخ الغالي " أحمد يحيي "


السلام عليكم

Simble.zip

تم تعديل بواسطة MMA

بتاريخ:

السلام عليكم

مافهمته من كلامك انك تريد الدخول على الفورم من غير اسم المستخدم واليوزر نيم والسيرفر هل هذا صحيح ؟بحيث يكون اليوزر نيم والديتبيس ثابته

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

أو هو امر اخر ...؟!

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.