الانتقال إلى المحتوى
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

بتاريخ:

السلام عليكم
الاخوة والاخوات
لدي فورم يقوم بعمل بحث دقيق اي بدلالة اكثر من متغير للطلبة من خلال كونترول بلوك خاص للبحث وتحوي بيانات الطلبة على تاريخ ميلادهم مثل 23/09/1980 و 12/12/1984 وهكذا ...

اريد ان اضيف حقل للبحث عن التاريخ ولكني اريد ان يكون البحث عن طريق الشهر والسنة فقط اي عندما ادخل مثلا 0508 يرجع لي بيانات الطلبة الذين ولدو في شهر مايو لسنة 2008 وهكذا .

بانتظار الرد والاجابة ان امكن

بتاريخ:

أنظر المرفقات


بالتوفيق

FIND_DATE.zip

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

شكرا لك اخي على الرد

ولكن عندما اضيف البيانات في sql يظهر لي الخطا التالي

INSERT INTO STUDENT VALUES(1,'1','أحمد',1,TO_DATE('24/9/1981'));



INSERT INTO STUDENT VALUES(1,'1','????',1,TO_DATE('24/9/1981'))
                                                 *


ERROR at line 1:
ORA-01843: not a valid month

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

بتاريخ:

أكيد عند حضرتك شكل معين لتنسيق التاريخ !!!

حاول تحدد التنسيق المناسب لتحويل القيمة النصية الي قيمة تاريخية ، مثال :

INSERT INTO STUDENT VALUES(1,'1','أحمد',1,TO_DATE('24/9/1981','DD/MM/YYYY'));





وكرر هذه العملية كل مرة مع كل السجلات

شكراً

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



شكرا لك اخي على الرد وسرعة الاجابة الطريقة نجحت لكن كما البيانات تضاف من خلال الفورم .......
كيف يمكن تلافي هذه المشكلة بحيث اضيف البيانات من خلال الفورم وبصورة عادية

بتاريخ:

الاخ الكريم فكرة إضافة البيانات عبر النموذج دي فكرة عادية جداً !!!

ياريت توضح أكثر أكون شاكر ؟؟؟

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

شكرا لك اخي العزيز

في البداية انا مبتداء في اوراكل ..... وكنت اقصد اني عند اضافة التاريخ من خلال الفورم لايقبلة بالصيغة التالية مثلا 25-10-1980

50011 not avild month name

وعند ادخال الفورم بالصيغة التالية 12/12/2004

data must be entered in a format like DD-MON-YYY 50026


هل يجب تغير قيمة ما ليكون الادخال صحيح ... وما هو الماسك

بتاريخ:

بالطبع نعم !!!!

لو لاحظت في المثال المدرج في حدث WHEN-NEW-BLOCK-INSTANCE علي مستوي بلوك البيانات STUDENT هتلاقي الكود المرسل مرسل علي أساس تنسيق معين بحيث أن يبحث عن الشهر والسنة فقط لا غير علي أساس الشكل التالي :

YYYY/MM



فشيء طبيعي أن الكود هيكون بالشكل التالي :

SET_BLOCK_PROPERTY('STUDENT',DEFAULT_WHERE,'TO_CHAR(STUDENT_BDATE,''YYYY/MM'') = ''' || LTRIM(TO_CHAR(:BLK_FIND.TXT_YEAR,'0000')) || '/' || :BLK_FIND.LST_MONTH || '''');



بحيث أن تكون عملية الإدخال مماثل للبيانات المخزنة ( أو تمثيل وهمي بإستخدام دالة TO_CHAR ) !!!

مثال عملي ، لو لدينا حقل يدعي EMP_BDATE وهذا الحقل مخزن به تاريخ ميلاد كل موظف ... أياً كان شكل تخزينها ... لو حبيت مثلاً تعرض بيانات الموظفين الذين ولدوا في تاريخ 24/9/1981 يجب عليك إدخال البيانات في نفس الصورة المخزنة أو التنسيق المتاح لأوراكل ( حسب تعداد معين بمسجل النظام ) ... أو أنك تدخل التاريخ في تنسيق معين وتحول التنسيق المخزن في نفس الصورة المدخلة كما يلي :

SELECT * FROM EMP WHERE TO_CHAR(EMP_BDATE,'YYYY/MM/DD') = '1981/09/24'



لكن بالطبع لو أختلف التنسيق هيعتبرة غير مطابق علي الإطلاق ولن يعرض لك أي سجلات ... مثال :

SELECT * FROM EMP WHERE TO_CHAR(EMP_BDATE,'YYYY/MM/DD') = '24/09/1981'



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

أممممممممممممممم

هو دة شيء يطول شرحة لأن الموضوع متعلق بلغات البرمجة أو للدقة لغة الآلة Assimble ... عموماً بإختصار شديد بيتم عملية المقارنة علي أساس أن كل قيمة حرفية لها كود آسكي ASCII مخزن بنظام التشغيل ... تتم المقارنة علي أساسها بحيث أن يتم أخذ قيمة حرف حرف وتحويلها الي كود آسكي وإجراء عملية المقارنة ، مثال :

'A' = 'A'  = (65 = 65) = TURE
'A' = 'B'  = (65 = 66) = FALSE
'1' = 49
'9' = 57



وما يأتي أولاً ينفذ أولاً ... يعني مثلاً لو حبينا ننشأ جملة إستعلام ترتيب تصاعدي ... هذا دلالة علي أنه مطلوب إجراء ترتيب من ( 0 = 00000000 ) الي ( 255 - 11111111 ) ... وهذا ما يحتوية لوحة المفاتيح ( نظام ثنائي Binary ) ... شيء طبيعي أن عملية الترتيب هتم علي أساس الحروف الأولي ثم ما يليها !!!

يعني مثلاً AB هتكون قبل BA ... و 9 هتكون قبل 10 ..... الي آخرة

مثال :

CREATE OR REPLACE VIEW XX
AS
(
 SELECT 'AB' AS FLD FROM TAB WHERE ROWNUM = 1
 UNION
 SELECT 'BA' AS FLD FROM TAB WHERE ROWNUM = 1
 UNION 
 SELECT 'AC' AS FLD FROM TAB WHERE ROWNUM = 1
)
/

SELECT FLD FROM XX ORDER BY FLD



فهذه العملية لها حسبة أخري ... وعملية المقارنة بتتم علي أساس ما أوت أولاً وما بعدها !!!

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




بالتوفيق

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




شكرا لك اخي على هذا الشرح الواسع ولكن كيف اجعل المستخدم يدخل شكل تاريخ انا احدده له من خلال الفورم اي مثلا 12/03/2008 ولا يمكنه ان يدخل غير هذا الشكل من التاريخ كان يكون بهذه الهيئة 12-3-2008 .

وشكرا لك

بتاريخ:

إذا كنت تقصد من خلال TEXT_ITEM فما عليك إلا ضبط خاصية Format Mask بحيث أن يكون بالشكل التالي :

yyyy/mm/dd



ويمكنك الوقوف علي الخاصية نفسها والضغط علي مفتاح F1 لتري بنفسك العديد من التنسيقات

-----------------------------

أما لو كنت تقصد إستخدام أكثر من مربع نص Text_Item بحيث أن يكون هناك واحد خاص باليوم والثاني خاص بالشهر والثالث خاص بالسنة في هذه الحالة يجب عليك إدخال التشكيلات التالية في خاصية Format Mask :


TXT_YEAR	(Data Type = Number, Format Mask = 0000)
TXT_DAY	  (Data Type = Number, Format Mask = 00)
TXT_MONTH (Data Type = Number, Format Mask = 00)



ومن ثم ربط كل هذه الأدوات كما يلي :

:GLOBAL.DAT := LTRIM(:TXT_YEAR) || '/' || LTRIM(:TXT_MONTH) || '/' || LTRIM(:TXT_DAY);





بالتوفيق

  • بعد 11 شهور...
بتاريخ:

مشكور 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.