بتاريخ: 1 أغسطس 200817 سنة comment_134695 السلام عليكم الاخوة والاخوات لدي فورم يقوم بعمل بحث دقيق اي بدلالة اكثر من متغير للطلبة من خلال كونترول بلوك خاص للبحث وتحوي بيانات الطلبة على تاريخ ميلادهم مثل 23/09/1980 و 12/12/1984 وهكذا ...اريد ان اضيف حقل للبحث عن التاريخ ولكني اريد ان يكون البحث عن طريق الشهر والسنة فقط اي عندما ادخل مثلا 0508 يرجع لي بيانات الطلبة الذين ولدو في شهر مايو لسنة 2008 وهكذا . بانتظار الرد والاجابة ان امكن تقديم بلاغ
بتاريخ: 1 أغسطس 200817 سنة كاتب الموضوع comment_134713 شكرا لك اخي على الرد ولكن عندما اضيف البيانات في 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 تم تعديل 1 أغسطس 200817 سنة بواسطة Amgad تقديم بلاغ
بتاريخ: 1 أغسطس 200817 سنة comment_134718 أكيد عند حضرتك شكل معين لتنسيق التاريخ !!!حاول تحدد التنسيق المناسب لتحويل القيمة النصية الي قيمة تاريخية ، مثال : INSERT INTO STUDENT VALUES(1,'1','أحمد',1,TO_DATE('24/9/1981','DD/MM/YYYY')); وكرر هذه العملية كل مرة مع كل السجلاتشكراً تقديم بلاغ
بتاريخ: 1 أغسطس 200817 سنة كاتب الموضوع comment_134720 شكرا لك اخي على الرد وسرعة الاجابة الطريقة نجحت لكن كما البيانات تضاف من خلال الفورم .......كيف يمكن تلافي هذه المشكلة بحيث اضيف البيانات من خلال الفورم وبصورة عادية تقديم بلاغ
بتاريخ: 1 أغسطس 200817 سنة comment_134722 الاخ الكريم فكرة إضافة البيانات عبر النموذج دي فكرة عادية جداً !!!ياريت توضح أكثر أكون شاكر ؟؟؟ تقديم بلاغ
بتاريخ: 1 أغسطس 200817 سنة كاتب الموضوع comment_134724 شكرا لك اخي العزيزفي البداية انا مبتداء في اوراكل ..... وكنت اقصد اني عند اضافة التاريخ من خلال الفورم لايقبلة بالصيغة التالية مثلا 25-10-1980 50011 not avild month name وعند ادخال الفورم بالصيغة التالية 12/12/2004 data must be entered in a format like DD-MON-YYY 50026 هل يجب تغير قيمة ما ليكون الادخال صحيح ... وما هو الماسك تقديم بلاغ
بتاريخ: 2 أغسطس 200817 سنة comment_134754 بالطبع نعم !!!!لو لاحظت في المثال المدرج في حدث 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 الخاصة بالتاريخ متشابهة التنسيق مع القيمة المخزنة ... أو تحويلهما الي تنسيق واحد ولكن بالطبع القيم تتغير ... لأن في هذه الحالة أنت بتقارن بين قيمتين نصيتين وليس قيم تاريخية !!!بالتوفيق تقديم بلاغ
بتاريخ: 2 أغسطس 200817 سنة كاتب الموضوع comment_134768 شكرا لك اخي على هذا الشرح الواسع ولكن كيف اجعل المستخدم يدخل شكل تاريخ انا احدده له من خلال الفورم اي مثلا 12/03/2008 ولا يمكنه ان يدخل غير هذا الشكل من التاريخ كان يكون بهذه الهيئة 12-3-2008 . وشكرا لك تقديم بلاغ
بتاريخ: 2 أغسطس 200817 سنة comment_134771 إذا كنت تقصد من خلال 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); بالتوفيق تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.