PrisonBreak بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 (معدل) السلام عليكمعندي جدولين الأول يحتوي على رقم الهوية والاسم والثاني يحتوي أيضا على رقم الهوية والاسمالجدول الثاني يتم تراكم السجلات فيه عند التعديل وليس التعديل على نفس الريكورد بل اضافة ريكورد جديد بالتعديلات الجديدة ..الجدول الأول اسمه prim الجدول الثاني اسمه secفي حالة تعديل الاسم في الجدول الأول فانه يتم تلقائيا تعديله في الجدول الثاني ( حسب رقم الهوية ) ..الكود المستخدم في زر حفظ التعديلات الموجود في الجدول الأول كالتالي update sec set NAME=:prim.NAME where ID=:prim.ID commit; المشكلة هنا أنني عندما أقوم بتغيير الاسم في الجدول الأول فانه يقوم بتغيير الاسم في الجدول الثاني لكل التراكمات وليس للريكورد الأخير ..المطلوب : في حالة تعديل الاسم في الجدول الأول أريده أن يقوم بتعديله في الجدول الثاني للسجل الأخير فقط وليس لكل السجلات الخاصة برقم الهوية المتراكمة في السجل الثاني ...أرجو أن تكون الصورة واضحة في ذلك ...شكرا لكم .. تم تعديل 22 أكتوبر 2009 بواسطة PrisonBreak اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 السلام عليكمجرب هيك: last_record; update sec set NAME=:prim.NAME where ID=:prim.ID commit; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mustafagamiel بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 السلام عليكأعتقد أنه الصعب تنفيذ ماتريد لكن في حل ممكن يسهل عليك الموضوعهتنشء عمود اسمه serial في الجدول الثاني العمود ده بيأخذ رقم متسلسل على طولولما تيجي تحب تعمل update لاخر صف يتوافق مع الاي انت بتعدل فيه من الجدول الاول ستكون سهلة عليك اويلانك ستحصل على أكبر قيمة للمتسلسل بشرط أن يكون رقم الهوية متساوي وبكده ستصل لاخر سجل لو هتزود عمود ممكن أساعدك أكثر موفق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mustafagamiel بتاريخ: 22 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 22 أكتوبر 2009 السلام عليكمبالنسبة للاقتراح الاول أعتقد أنه هيكون سهل تنفيذه جدا لان العمود الجديد سيكون pk لكن أنا جربت لك دي وأعطتني النتيجة صحيحة جربها عندك واخبرني هل صحيحة أم لا update sec set name==:prim.NAME where rowid=(select max(rowid) from sec where ID=:prim.ID ); commit; موفق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jadquraan بتاريخ: 23 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2009 طبعا انت بتقدر تعضيف عمود جديد للجدول الثاني ورح يكون من نوع date ور نفرض انه اسمه insert_dateوبتعطي هذا الريكورد قيمه افتراضية واللي هي sysdateورح يكون التعديل عندك عن طريق update sec set name=:prim.NAME where id =:prim.ID and insert_date=(select max(insert_date) from sec where id=:prim.ID ) بس ممكن اسألك سؤال شو الفكرة من هذا الشيء يعني انت ليش بتعمل تراكمات للبيانات في الجدول الثاني ممكن بعد ما تشرح ليش نقدر نساعدك بطريقة افضل من هيكمع العلم ان الكود السابق للأخ mustafagamiel يعمل ايضا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 23 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2009 (معدل) أخي مصطفى ألف شكر لك على المساعدة الكبيرة ...قمت بعمل تجربة لذلك ونجح الأمر ولكن هناك مشكلة أن الجدول الثاني أخي لا يحتوي على مفتاح أساسي فما الحل ...؟؟ أقول لأخي بال شكرا جزيلا على المشاركة قمت بتجربة ذلك قبل نشر الموضوع ولكن لم ينجح الأمر معي ..أخي جاد الجدول الثاني عند التعديل على أي قيمة فيه فانه لا يستبدل القيمة السابقة بالقيمة الحالية بل انه يحتفظ بالقديمة ويضيف صف جديد بالقيمة الجديدة والسبب في ذلك أنني أريد أن أعلم كل شئ عن المسجلين في الجدول الثاني قبل وبعد التعديل ...ولذلك قمت بحذف المفتاح الأساسي من الجدول حتى أسمح بتكرار الصف كاملا في كل مرة يتم التعديل عليه...فهل هناك أخي جاد حل آخر لذلك مع ارجاع المفتاح الأساسي للجدول الثاني ..وأكون شاكر جزيلا لك لأنني غير مرتاح لعدم وجود مفتاح أساسي في هذا الجدول ..للعلم فقط : الجدول الثاني له ثلاث نسخ الأولى لادخال العمال والثانية لتعديل العمال والثالية للاستعلام عن العمال ..في الادخال قمت بمنع المستخدم عن طريق الكود من تكرار رقم الهوية أما عند التعديل فليس هناك قيود على التكرار وذلك للتراكم.. تم تعديل 23 أكتوبر 2009 بواسطة PrisonBreak اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abdu1_far بتاريخ: 23 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2009 اخي الكريم مسألة انك تعمل هيستوري (history ) للبيانات في نفس الجدول غير منطقية ، لان ده بيعتبر الجدول الاساسي عندك وبالتالي أي إستعلام عن داتا معينة ممكن يعمل معاك تكرار عشان كده انا بقترح ( وده اللي احنا بنشتغل بيه ) ، اننا بنعمل لكل جدول بيحصل فيه تعديلات بنعمل جدول هيستوري خاص بيه ، وبيتم ملأ الجدول ده عن طريق تريجر في الداتا بيزيعني هنعمل تريجر على الجدول الاساسي before updatiing وتاخد القيم القديمة للريكورد اللي هيتم عليه تعديل وتضعها الجدول الجديد ، وبالتالي هيحصل ابديت على الجدول الاساسي كده الجدول الاساسي فيه ريكورد واحد بس للمعاملة الواحدة ، اللي هي أخر ابديت ، والجدول التاني بمثابة هيستوري عندكأتمنى الفكرة تكون وضحة تقبل تحياتي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mustafagamiel بتاريخ: 23 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2009 السلام عليكم ولكن هناك مشكلة أن الجدول الثاني أخي لا يحتوي على مفتاح أساسي فما الحل ...؟؟ يمكنك اضافة عمود جديد ويكون هو المفتاح الاساس ودي ممكن تعبيه بلووب بسيطلكن طالما اشتغل معك يمكنك الاستغناء عنه لكن يفضل علشان سرعة الاستعلامalter table table_name add (serial number(10);الاخ عبدالله حمدالله على السلامة والف مبروووك بالنسبة وتاخد القيم القديمة للريكورد اللي هيتم عليه تعديل وتضعها الجدول الجديد ، وبالتالي هيحصل ابديت على الجدول الاساسي كده الجدول الاساسي فيه ريكورد واحد بس للمعاملة الواحدة ، اللي هي أخر ابديت ، والجدول التاني بمثابة هيستوري عندك هو الاخ عمل كده فعلا جدول اساسي والاخر history وحشتنا يارجل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 23 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2009 اخي الكريم مسألة انك تعمل هيستوري (history ) للبيانات في نفس الجدول غير منطقية ، لان ده بيعتبر الجدول الاساسي عندك وبالتالي أي إستعلام عن داتا معينة ممكن يعمل معاك تكرار عشان كده انا بقترح ( وده اللي احنا بنشتغل بيه ) ، اننا بنعمل لكل جدول بيحصل فيه تعديلات بنعمل جدول هيستوري خاص بيه ، وبيتم ملأ الجدول ده عن طريق تريجر في الداتا بيزيعني هنعمل تريجر على الجدول الاساسي before updatiing وتاخد القيم القديمة للريكورد اللي هيتم عليه تعديل وتضعها الجدول الجديد ، وبالتالي هيحصل ابديت على الجدول الاساسي كده الجدول الاساسي فيه ريكورد واحد بس للمعاملة الواحدة ، اللي هي أخر ابديت ، والجدول التاني بمثابة هيستوري عندكأتمنى الفكرة تكون وضحة تقبل تحياتي ألف شكر لك أخي على التوضيح ..لكن ممكن مثال على تريجر befor updating .. السرعة مطلوبة أخي جزالك الله خيرا ..وشكرا لك مرة أخرى .. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 23 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 أكتوبر 2009 السلام عليكمولكن هناك مشكلة أن الجدول الثاني أخي لا يحتوي على مفتاح أساسي فما الحل ...؟؟ يمكنك اضافة عمود جديد ويكون هو المفتاح الاساس ودي ممكن تعبيه بلووب بسيطلكن طالما اشتغل معك يمكنك الاستغناء عنه لكن يفضل علشان سرعة الاستعلامalter table table_name add (serial number(10);الاخ عبدالله حمدالله على السلامة والف مبروووك بالنسبة وتاخد القيم القديمة للريكورد اللي هيتم عليه تعديل وتضعها الجدول الجديد ، وبالتالي هيحصل ابديت على الجدول الاساسي كده الجدول الاساسي فيه ريكورد واحد بس للمعاملة الواحدة ، اللي هي أخر ابديت ، والجدول التاني بمثابة هيستوري عندك هو الاخ عمل كده فعلا جدول اساسي والاخر history وحشتنا يارجل ألف شكر لك أخي مصطفى على المساعدة ...تحياتي لك .. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 25 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 أكتوبر 2009 ممكن مثال على تريجر befor updating .. ??? اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mustafagamiel بتاريخ: 25 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 25 أكتوبر 2009 السلام عليكم ده مثال SQL> CREATE TABLE emp_audit ( emp_audit_id NUMBER(6), up_date DATE, new_sal NUMBER(8,2), old_sal NUMBER(8,2)); Table created. SQL> SQL> CREATE OR REPLACE TRIGGER audit_sal AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO emp_audit VALUES(:old.employee_id, SYSDATE, :new.salary, :old.salary); END; / Trigger created. ده مثال يمكنك تطبيقه على سكيمة hr لما تعدل شيء في جدول الموظفين سيقوم بنقل التعديلات على جدول الذي تم انشاؤه راجع شابتر ال trigger في الماتريل تقريبا رقم 9 وفقك الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 26 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 أكتوبر 2009 (معدل) السلام عليكم ده مثال SQL> CREATE TABLE emp_audit ( emp_audit_id NUMBER(6), up_date DATE, new_sal NUMBER(8,2), old_sal NUMBER(8,2)); Table created. SQL> SQL> CREATE OR REPLACE TRIGGER audit_sal AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO emp_audit VALUES(:old.employee_id, SYSDATE, :new.salary, :old.salary); END; / Trigger created. ده مثال يمكنك تطبيقه على سكيمة hr لما تعدل شيء في جدول الموظفين سيقوم بنقل التعديلات على جدول الذي تم انشاؤه راجع شابتر ال trigger في الماتريل تقريبا رقم 9 وفقك الله لو قمت باستخدام هذا التريجر وبعد يومين قمت باضافة عمود على الجدول الأساسي واضافة نفس العمود على الجدول الهيستوري...حينها يجب أن أقوم بالتعديل على هذا التريجر واضافة اسم العمود الجديد على التريجر ,, أليس كذلك ...؟؟؟؟ولكن لو قمت باستخدام جملة insert في زر حفظ التعديلات الموجود في الفورم الأساسي على أن يقوم بعمل insert للقيم الموجودة في الجدول الأساسي ويضعها في الجدول الهيستوري ..حينها اضافة عمود أو حذف عمود سيكون أسرع من التعديل على التريجر .. أليست هذا الطريقة أسرع من أن أقوم بحذف التريجر ومن ثم التعديل عليه وتنفيذه مرة أخرى ..؟؟أرجو الافادة ..لأنني في النهاية يهمني الطريقة الصحيحة والآمنة ...فأيهما أفضل ..؟؟؟وألف شكر لك أخي على المساعدة .. تم تعديل 26 أكتوبر 2009 بواسطة PrisonBreak اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jadquraan بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 (معدل) انا اقترح هذه الطريقة هيه فيها غلبه شوي لكن في نظري جيدة طبعا هذا المثال على HR اول شي ننشئ جدول الهستوري CREATE TABLE EMP_AUDIT ( EMPLOYEE_ID NUMBER(6), EMP_SEQ NUMBER, ACTION NUMBER(1), ACTION_DATE DATE DEFAULT sysdate, USER_NAME VARCHAR2(50 BYTE) DEFAULT user, OLD_VAL VARCHAR2(20 BYTE), NEW_VAL VARCHAR2(20 BYTE), COL_NAME VARCHAR2(100 BYTE) ) ; ALTER TABLE EMP_AUDIT ADD ( CONSTRAINT EMP_AUDIT_PK PRIMARY KEY (EMP_SEQ, EMPLOYEE_ID); ثاني شي نقوم بكتابة التريجر CREATE OR REPLACE TRIGGER HR.EMP_AUDIT_TRIGGER BEFORE DELETE OR INSERT OR UPDATE ON HR.EMPLOYEES REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE col_name_labe VARCHAR2(30); emp_seq_val number; BEGIN -- insert 1 -- delete 2 -- update 3 select nvl(max(emp_seq),0)+1 into emp_seq_val from emp_audit where employee_id=nvl(:new.employee_id,:old.employee_id) ; if inserting then insert into emp_audit(employee_id,emp_seq,action) values (:new.employee_id,emp_seq_val,1) ; end if; if deleting then insert into emp_audit(employee_id,emp_seq,action) values (:old.employee_id,emp_seq_val,2) ; end if; if updating then if :new.first_name <> :old.first_name then col_name_labe:=' الاسم الاول '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.first_name,:new.first_name,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.last_name <> :old.last_name then col_name_labe:=' الاسم الأخير '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.last_name,:new.last_name,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.email <> :old.email then col_name_labe:=' البريد الإلكتروني '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.email,:new.email,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.phone_number <> :old.phone_number then col_name_labe:=' رقم الهاتف '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.phone_number,:new.phone_number,col_name_lab e) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.hire_date <> :old.hire_date then col_name_labe:=' تاريخ التعيين '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.hire_date,:new.hire_date,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.job_id <> :old.job_id then col_name_labe:=' المسمى الوظيفي '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.job_id,:new.job_id,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.salary <> :old.salary then col_name_labe:=' الراتب الأساسي '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.salary,:new.salary,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.commission_pct <> :old.commission_pct then col_name_labe:=' العلاوة '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.commission_pct,:new.commission_pct,col_name _labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.manager_id <> :old.manager_id then col_name_labe:=' رقم المدير '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.manager_id,:new.manager_id,col_name_labe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; if :new.department_id <> :old.department_id then col_name_labe:=' رقم القسم '; insert into emp_audit(employee_id,emp_seq,action,old_val,new_val,col_name) values (:new.employee_id,emp_seq_val,3,:old.department_id,:new.department_id,col_name_l abe) ; col_name_labe:=null; emp_seq_val:=emp_seq_val+1; end if; end if; END emp_audit_trigger; وهذه كود استدعاء التفصيلات في التقارير select DECODE(ACTION,1,'تم اضافة موظف جديد ورقمه الوظيفي هو ' || EMPLOYEE_ID ,3,' تم تعديل ' || COL_NAME || ' للموظف رقم ' || EMPLOYEE_ID || ' من ' || OLD_VAL || ' الى ' || NEW_VAL ,2,'تم حذف بيانات الموظف رقم ' || EMPLOYEE_ID || ' نهائياً ' ) ACTION ,USER_NAME,ACTION_DATE from emp_audit ORDER BY EMPLOYEE_ID,EMP_SEQ او بإستخدام هذه الطريقة select DECODE(ACTION,1,'تم اضافة موظف جديد هو ' || NVL(TRIM(E.FIRST_NAME|| ' ' || E.LAST_NAME ),' رقم ' || EU.EMPLOYEE_ID) ,3,' تم تعديل ' || COL_NAME || ' للموظف ' || NVL(TRIM(E.FIRST_NAME|| ' ' || E.LAST_NAME ),' رقم ' || EU.EMPLOYEE_ID) || ' من ' || OLD_VAL || ' الى ' || NEW_VAL ,2,'تم حذف بيانات الموظف ' || NVL(TRIM(E.FIRST_NAME|| ' ' || E.LAST_NAME ),' رقم ' || EU.EMPLOYEE_ID) || ' نهائياً ' ) ACTION ,USER_NAME,ACTION_DATE from emp_audit EU ,EMPLOYEES E WHERE EU.EMPLOYEE_ID =E.EMPLOYEE_ID(+) ORDER BY EU.EMPLOYEE_ID,EU.EMP_SEQ تم تعديل 27 أكتوبر 2009 بواسطة jadquraan اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 27 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 الله عليك أخي جادألف ألف شكر لك على هذا المثال الرائع ..شكرادمت بودسأعتمد هذه الطريقة ولكن عندي استفسار بسيط لو قمت باستخدام جملة insert في زر حفظ بدل استخدام هذا التريجر فهل فيها خطأ ..؟وشكرا مرة أخرى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedkhaled بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 السلام عليكم ورحمة الله وبركاتهياخواني انا اعتقد ان الموضوع ابسط من كده بكتير احنا ممكن نعمل في pre_update حاجه جميله اوي declare v_name varchar2;begin select name from master where id =detail.id into v_name ;update detail set name (select name from master where id = detail.id and name.:=v_name);end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abdu1_far بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 (معدل) الاخ PrisonBreak أسف على عدم ردي مرة أخرى لأنشغالي بظروف العمل ، والحمد لله الاخ مصطفى والاخ جاد وباقي الاخوة قاموا بالواجب وزيادةتمام كده زي ما قالوا ، بس انا عايز أضيف حاجة ، لما تحب تعمل هستوري لأي إجراء ( بمعنى إضافة او حذف أو تعديل ) لازم تكون محدد انت عايز ايه بالظبط بس ملحوظة بسيطة : انا بفضل ان الهستوري تكون في حالة الاب ديت وبس ، انما اي حاجة تاني لأ ، ليه ؟؟؟؟؟أولاً : الانسرت مش محتاج حاجة ، لانه انسرت وبالتالي ومفيش معنى انك تاخد نفس الريكورد هستوري تاني أما بأه موضوع الحذف ، فأنسى انك تحذف من أي جدول أي داتا ، عشان ميعملش جاب في الجداول ، المفروض فلاج وبس .وبالتالي احنا بنعمل الهيستوري على الابديت وبس يبقى تريجر اخونا جاد بس هيكون على before updating وبس تقبل تيحاتي-******************************************************************************الاخ مصطفى .... معلش بأه كنت في اجازة ، ورجعت على طحنة شغل وللاسف مش هكون فاضي حتى الايام الجايه ، وهتحرم منكوا واللهاه ... الله يبارك فيك ، وعقبالك ياريس تم تعديل 27 أكتوبر 2009 بواسطة abdu1_far اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 27 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 الاخ PrisonBreak أسف على عدم ردي مرة أخرى لأنشغالي بظروف العمل ، والحمد لله الاخ مصطفى والاخ جاد وباقي الاخوة قاموا بالواجب وزيادةتمام كده زي ما قالوا ، بس انا عايز أضيف حاجة ، لما تحب تعمل هستوري لأي إجراء ( بمعنى إضافة او حذف أو تعديل ) لازم تكون محدد انت عايز ايه بالظبط بس ملحوظة بسيطة : انا بفضل ان الهستوري تكون في حالة الاب ديت وبس ، انما اي حاجة تاني لأ ، ليه ؟؟؟؟؟أولاً : الانسرت مش محتاج حاجة ، لانه انسرت وبالتالي ومفيش معنى انك تاخد نفس الريكورد هستوري تاني أما بأه موضوع الحذف ، فأنسى انك تحذف من أي جدول أي داتا ، عشان ميعملش جاب في الجداول ، المفروض فلاج وبس .وبالتالي احنا بنعمل الهيستوري على الابديت وبس يبقى تريجر اخونا جاد بس هيكون على before updating وبس تقبل تيحاتي-******************************************************************************الاخ مصطفى .... معلش بأه كنت في اجازة ، ورجعت على طحنة شغل وللاسف مش هكون فاضي حتى الايام الجايه ، وهتحرم منكوا واللهاه ... الله يبارك فيك ، وعقبالك ياريس لا عليك أخي جزاك الله كل خير واعتبر نفسك الأول في الرد ..بالنسبة لاقتراحك أخي بخصوص الهيستوري فأنا فعلا لم أستخدمه الا في حالة التعديل فقط ..فأنا في النهاية لا يهمني الا تراكم التعديلات ولاحظ مشاركتي الأولى في الموضوع ..ولكن سؤالي ما هي الطريقة الأفضل هل استخدام جملة insert في الفورم أم استخدام تريجر befor updating نظرا لأن التعديل على جملة insert في الفورم أسرع من التعديل على التريجر ..؟؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abdu1_far بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 اخي الكريمموضوع انك تعمل ريكورد جديه ، موضوع خطأ منطقياً ، ولا أعتقد ان فيه شركة تعمل بهذا المفهوم والله أعلم ، لان بكل بساطة حتى ولو مكنش بيطلب منك حاجة دلوأتي ، ممكن ادام الجهة صاحبة المشروع تطلب تعديل .......عشان اوضح كلامي تخيل مثلا اننا بنتكلم على جدول موظفين وانت كل لما بيحصل تعديل في حالة معينة بتعمل أنسرت في الريكورد تخيل باه لو كنت بتعمل شاشة بتعمل بحث بدلالة الاسم ، هتجد ان الاسم تكرر اكتر من مرة في الجدول ، طب في الحالة ده المفروض السيستم هيرجع اي قيم ؟؟ بتاع الصف الجديد ولا الصفوف القديمةعلاوة على كده انك بتزود حجم البيانات في الجدول ، وبالتالي بتعمل علمية load على الجدول ، وبالتالي عملية البحث هتاخد وقت أطول وده اللي أغلب الشركات اللي اشتغلت فيها بتشتغل بيه ... اتمنى ان الفكرة تكون وصلت اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmsalman87 بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 اخي الكريمموضوع انك تعمل ريكورد جديه ، موضوع خطأ منطقياً ، ولا أعتقد ان فيه شركة تعمل بهذا المفهوم والله أعلم ، لان بكل بساطة حتى ولو مكنش بيطلب منك حاجة دلوأتي ، ممكن ادام الجهة صاحبة المشروع تطلب تعديل .......عشان اوضح كلامي تخيل مثلا اننا بنتكلم على جدول موظفين وانت كل لما بيحصل تعديل في حالة معينة بتعمل أنسرت في الريكورد تخيل باه لو كنت بتعمل شاشة بتعمل بحث بدلالة الاسم ، هتجد ان الاسم تكرر اكتر من مرة في الجدول ، طب في الحالة ده المفروض السيستم هيرجع اي قيم ؟؟ بتاع الصف الجديد ولا الصفوف القديمةعلاوة على كده انك بتزود حجم البيانات في الجدول ، وبالتالي بتعمل علمية load على الجدول ، وبالتالي عملية البحث هتاخد وقت أطول وده اللي أغلب الشركات اللي اشتغلت فيها بتشتغل بيه ... اتمنى ان الفكرة تكون وصلت اوافقك الرأي اخوي عبدالله كلامك 100\100 جزاك الله كل خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 27 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 اخي الكريمموضوع انك تعمل ريكورد جديه ، موضوع خطأ منطقياً ، ولا أعتقد ان فيه شركة تعمل بهذا المفهوم والله أعلم ، لان بكل بساطة حتى ولو مكنش بيطلب منك حاجة دلوأتي ، ممكن ادام الجهة صاحبة المشروع تطلب تعديل .......عشان اوضح كلامي تخيل مثلا اننا بنتكلم على جدول موظفين وانت كل لما بيحصل تعديل في حالة معينة بتعمل أنسرت في الريكورد تخيل باه لو كنت بتعمل شاشة بتعمل بحث بدلالة الاسم ، هتجد ان الاسم تكرر اكتر من مرة في الجدول ، طب في الحالة ده المفروض السيستم هيرجع اي قيم ؟؟ بتاع الصف الجديد ولا الصفوف القديمةعلاوة على كده انك بتزود حجم البيانات في الجدول ، وبالتالي بتعمل علمية load على الجدول ، وبالتالي عملية البحث هتاخد وقت أطول وده اللي أغلب الشركات اللي اشتغلت فيها بتشتغل بيه ... اتمنى ان الفكرة تكون وصلت أخي أنت فهمتني خطأ ..أنا قصدت ان أقوم بعمل جدول هيستوري خاص بالموظفين مثلا بالاضافة طبعا الى الجدول الأساسي ..يعني أن هناك جدولين الأول أساسي ويوجد به مفتاح أساسي يمنع تكرار رقم الهوية والأخر هيستوري وده بالضبط اللي مسموح بيه تكرار كل القيم ...عند التعديل على الموظفين مثلا فانه يعمل update في الجدول الأساسي ويعمل insert في الجدول الهيستوري وقد نجحت الفكرة تماماً ..وعند البحث مثلا فانه سيبحث في الجدول الأساسي وليس الهيستوري في هذه الحالة لن يجد قيم مكررة بتاتاً ...أرجو أن تكون الصورة واضحةتحياتي أخي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abdu1_far بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 تمام كده يا أخي ... يبقى احنا بنتكلم في نفس النقطة كده بأه عايز أفهم معنى سؤالك ده ؟؟ ولكن سؤالي ما هي الطريقة الأفضل هل استخدام جملة insert في الفورم أم استخدام تريجر befor updating نظرا لأن التعديل على جملة insert في الفورم أسرع من التعديل على التريجر ..؟؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Essam بتاريخ: 27 أكتوبر 2009 تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 اضف حقل جديد( تاريخ التعديل ) لجدول الهستوري و استخدمه عند تعديل السجل الاخير (اكبر تاريخ) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 27 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 تمام كده يا أخي ... يبقى احنا بنتكلم في نفس النقطة كده بأه عايز أفهم معنى سؤالك ده ؟؟ولكن سؤالي ما هي الطريقة الأفضل هل استخدام جملة insert في الفورم أم استخدام تريجر befor updating نظرا لأن التعديل على جملة insert في الفورم أسرع من التعديل على التريجر ..؟؟ قصدت أخي أنه في حال قمت باضافة عمود الى الجدول الأساسي حينها يجب أن أقوم باضافة نفس العمود الى الهيستوري .كده صحوحينها أيضا يجب أن أقوم بالتعديل على التريجر befor updating اذا قمت باعتماد هذه الطريقة يعني سأقوم بالتعديل علي التريجر أي اضافة العمود الجديد ومن ثم تنفيذه مرة أخرى ..ولكن حسب رأيي أن استخدام جملة insert في زر ( حفظ التعديلات الموجود في الفورم الأساسي , على أن يقوم بعمل اضافة في الجدول الهيستوري) هي أفضل لأن التعديل عليها سيكون أسرع في حال التعديل وهي طريقة بسيطة جدا وسهلة جدا ...أيهما تفضل أنت ..؟ تريجر في الداتا بيس أم جملة insert في الفورم ...؟ما هو الأفضل حسب رأيك ..؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
PrisonBreak بتاريخ: 27 أكتوبر 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 أكتوبر 2009 اضف حقل جديد( تاريخ التعديل ) لجدول الهستوري و استخدمه عند تعديل السجل الاخير (اكبر تاريخ) فورم التعديل أخي مربوط بالجدول الأساسي وليس بالجدول الهيستوري والجدول الأساسي أخي لا يقبل رقم الهوية فيه الكرار أي لا يقبل رقم هوية مكرر , لذا عند استدعاء البيانات عن طريق رقم الهوية فانه لن يرجع لي بيانات مكررة لأن رقم الهوية مفتاح أساسي , وعند الضغط على زر حفظ فانه سيعمل تعديل على البيانات في الجدول الأساسي وبعد ذلك يعمل اضافة سجل جديد بالبيانات الجديدة الى الجدول الهيستوري ..هذه هي الفكرة أنا لا أحتاج الى تاريخ التعديل كي أرجع آخر سجل تم التعديل عليه , مع العلم أنني أستخدم تاريخ التعديل في الجدول ولكن لا أستخدمه كثيرا ..أرجو أن تكون الفكرة واضحة ..شكرا لك أخي على المشاركة وعلى الفكرة الجديدة , فهي ناجحة ويمكن أن أستخدمها مستقبلا في المشروع كأداة للبحث ..شكرا لك .. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.