الانتقال إلى المحتوى

سؤال عاجل جدا في الـ Update ... عاجل للضرورة


PrisonBreak

Recommended Posts

السلام عليكم

عندي جدولين الأول يحتوي على رقم الهوية والاسم والثاني يحتوي أيضا على رقم الهوية والاسم
الجدول الثاني يتم تراكم السجلات فيه عند التعديل وليس التعديل على نفس الريكورد بل اضافة ريكورد جديد بالتعديلات الجديدة ..
الجدول الأول اسمه prim
الجدول الثاني اسمه sec
في حالة تعديل الاسم في الجدول الأول فانه يتم تلقائيا تعديله في الجدول الثاني ( حسب رقم الهوية ) ..
الكود المستخدم في زر حفظ التعديلات الموجود في الجدول الأول كالتالي

update sec set NAME=:prim.NAME where ID=:prim.ID
commit;


المشكلة هنا أنني عندما أقوم بتغيير الاسم في الجدول الأول فانه يقوم بتغيير الاسم في الجدول الثاني لكل التراكمات وليس للريكورد الأخير ..

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

تم تعديل بواسطة PrisonBreak
رابط هذا التعليق
شارك

  • الردود 30
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • PrisonBreak

    14

  • abdu1_far

    6

  • mustafagamiel

    4

  • jadquraan

    3

أكثر المشاركين في هذا الموضوع

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

لو هتزود عمود ممكن أساعدك أكثر

موفق

رابط هذا التعليق
شارك

السلام عليكم

بالنسبة للاقتراح الاول أعتقد أنه هيكون سهل تنفيذه جدا لان العمود الجديد سيكون pk

لكن أنا جربت لك دي وأعطتني النتيجة صحيحة جربها عندك واخبرني هل صحيحة أم لا


update sec
 set name==:prim.NAME  where rowid=(select max(rowid) from sec where ID=:prim.ID );
commit;



موفق

رابط هذا التعليق
شارك

طبعا انت بتقدر تعضيف عمود جديد للجدول الثاني ورح يكون من نوع 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
رابط هذا التعليق
شارك

اخي الكريم
مسألة انك تعمل هيستوري (history ) للبيانات في نفس الجدول غير منطقية ، لان ده بيعتبر الجدول الاساسي عندك
وبالتالي أي إستعلام عن داتا معينة ممكن يعمل معاك تكرار
عشان كده انا بقترح ( وده اللي احنا بنشتغل بيه ) ، اننا بنعمل لكل جدول بيحصل فيه تعديلات بنعمل جدول هيستوري خاص بيه ، وبيتم ملأ الجدول ده عن طريق تريجر في الداتا بيز
يعني هنعمل تريجر على الجدول الاساسي before updatiing
وتاخد القيم القديمة للريكورد اللي هيتم عليه تعديل وتضعها الجدول الجديد ، وبالتالي هيحصل ابديت على الجدول الاساسي
كده الجدول الاساسي فيه ريكورد واحد بس للمعاملة الواحدة ، اللي هي أخر ابديت ، والجدول التاني بمثابة هيستوري عندك
أتمنى الفكرة تكون وضحة
تقبل تحياتي

رابط هذا التعليق
شارك

السلام عليكم

ولكن هناك مشكلة أن الجدول الثاني أخي لا يحتوي على مفتاح أساسي فما الحل ...؟؟


يمكنك اضافة عمود جديد ويكون هو المفتاح الاساس ودي ممكن تعبيه بلووب بسيط
لكن طالما اشتغل معك يمكنك الاستغناء عنه لكن يفضل علشان سرعة الاستعلام
alter table table_name add (serial number(10);



الاخ عبدالله حمدالله على السلامة والف مبروووك

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



هو الاخ عمل كده فعلا جدول اساسي والاخر history

وحشتنا يارجل
رابط هذا التعليق
شارك

اخي الكريم
مسألة انك تعمل هيستوري (history ) للبيانات في نفس الجدول غير منطقية ، لان ده بيعتبر الجدول الاساسي عندك
وبالتالي أي إستعلام عن داتا معينة ممكن يعمل معاك تكرار
عشان كده انا بقترح ( وده اللي احنا بنشتغل بيه ) ، اننا بنعمل لكل جدول بيحصل فيه تعديلات بنعمل جدول هيستوري خاص بيه ، وبيتم ملأ الجدول ده عن طريق تريجر في الداتا بيز
يعني هنعمل تريجر على الجدول الاساسي before updatiing
وتاخد القيم القديمة للريكورد اللي هيتم عليه تعديل وتضعها الجدول الجديد ، وبالتالي هيحصل ابديت على الجدول الاساسي
كده الجدول الاساسي فيه ريكورد واحد بس للمعاملة الواحدة ، اللي هي أخر ابديت ، والجدول التاني بمثابة هيستوري عندك
أتمنى الفكرة تكون وضحة
تقبل تحياتي


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

السلام عليكم
ولكن هناك مشكلة أن الجدول الثاني أخي لا يحتوي على مفتاح أساسي فما الحل ...؟؟


يمكنك اضافة عمود جديد ويكون هو المفتاح الاساس ودي ممكن تعبيه بلووب بسيط
لكن طالما اشتغل معك يمكنك الاستغناء عنه لكن يفضل علشان سرعة الاستعلام
alter table table_name add (serial number(10);



الاخ عبدالله حمدالله على السلامة والف مبروووك

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



هو الاخ عمل كده فعلا جدول اساسي والاخر history

وحشتنا يارجل


ألف شكر لك أخي مصطفى على المساعدة ...
تحياتي لك ..
رابط هذا التعليق
شارك

السلام عليكم
ده مثال

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

وفقك الله

رابط هذا التعليق
شارك

السلام عليكم
ده مثال

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 للقيم الموجودة في الجدول الأساسي ويضعها في الجدول الهيستوري ..حينها اضافة عمود أو حذف عمود سيكون أسرع من التعديل على التريجر .. أليست هذا الطريقة أسرع من أن أقوم بحذف التريجر ومن ثم التعديل عليه وتنفيذه مرة أخرى ..؟؟
أرجو الافادة ..لأنني في النهاية يهمني الطريقة الصحيحة والآمنة ...فأيهما أفضل ..؟؟؟
وألف شكر لك أخي على المساعدة .. تم تعديل بواسطة PrisonBreak
رابط هذا التعليق
شارك

انا اقترح هذه الطريقة

هيه فيها غلبه شوي لكن في نظري جيدة

طبعا هذا المثال على 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

تم تعديل بواسطة jadquraan
رابط هذا التعليق
شارك

الله عليك أخي جاد
ألف ألف شكر لك على هذا المثال الرائع ..
شكرا
دمت بود
سأعتمد هذه الطريقة ولكن عندي استفسار بسيط
لو قمت باستخدام جملة insert في زر حفظ بدل استخدام هذا التريجر فهل فيها خطأ ..؟
وشكرا مرة أخرى

رابط هذا التعليق
شارك

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


ياخواني انا اعتقد ان الموضوع ابسط من كده بكتير



احنا ممكن نعمل في 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;

رابط هذا التعليق
شارك

الاخ PrisonBreak
أسف على عدم ردي مرة أخرى لأنشغالي بظروف العمل ، والحمد لله الاخ مصطفى والاخ جاد وباقي الاخوة قاموا بالواجب وزيادة
تمام كده زي ما قالوا ، بس انا عايز أضيف حاجة ، لما تحب تعمل هستوري لأي إجراء ( بمعنى إضافة او حذف أو تعديل ) لازم تكون محدد انت عايز ايه بالظبط
بس ملحوظة بسيطة : انا بفضل ان الهستوري تكون في حالة الاب ديت وبس ، انما اي حاجة تاني لأ ، ليه ؟؟؟؟؟
أولاً : الانسرت مش محتاج حاجة ، لانه انسرت وبالتالي ومفيش معنى انك تاخد نفس الريكورد هستوري تاني
أما بأه موضوع الحذف ، فأنسى انك تحذف من أي جدول أي داتا ، عشان ميعملش جاب في الجداول ، المفروض فلاج وبس .
وبالتالي احنا بنعمل الهيستوري على الابديت وبس
يبقى تريجر اخونا جاد بس هيكون على before updating وبس
تقبل تيحاتي

-******************************************************************************
الاخ مصطفى .... معلش بأه كنت في اجازة ، ورجعت على طحنة شغل وللاسف مش هكون فاضي حتى الايام الجايه ، وهتحرم منكوا والله
اه ... الله يبارك فيك ، وعقبالك ياريس

تم تعديل بواسطة abdu1_far
رابط هذا التعليق
شارك

الاخ PrisonBreak
أسف على عدم ردي مرة أخرى لأنشغالي بظروف العمل ، والحمد لله الاخ مصطفى والاخ جاد وباقي الاخوة قاموا بالواجب وزيادة
تمام كده زي ما قالوا ، بس انا عايز أضيف حاجة ، لما تحب تعمل هستوري لأي إجراء ( بمعنى إضافة او حذف أو تعديل ) لازم تكون محدد انت عايز ايه بالظبط
بس ملحوظة بسيطة : انا بفضل ان الهستوري تكون في حالة الاب ديت وبس ، انما اي حاجة تاني لأ ، ليه ؟؟؟؟؟
أولاً : الانسرت مش محتاج حاجة ، لانه انسرت وبالتالي ومفيش معنى انك تاخد نفس الريكورد هستوري تاني
أما بأه موضوع الحذف ، فأنسى انك تحذف من أي جدول أي داتا ، عشان ميعملش جاب في الجداول ، المفروض فلاج وبس .
وبالتالي احنا بنعمل الهيستوري على الابديت وبس
يبقى تريجر اخونا جاد بس هيكون على before updating وبس
تقبل تيحاتي

-******************************************************************************
الاخ مصطفى .... معلش بأه كنت في اجازة ، ورجعت على طحنة شغل وللاسف مش هكون فاضي حتى الايام الجايه ، وهتحرم منكوا والله
اه ... الله يبارك فيك ، وعقبالك ياريس


لا عليك أخي جزاك الله كل خير واعتبر نفسك الأول في الرد ..
بالنسبة لاقتراحك أخي بخصوص الهيستوري فأنا فعلا لم أستخدمه الا في حالة التعديل فقط ..فأنا في النهاية لا يهمني الا تراكم التعديلات ولاحظ مشاركتي الأولى في الموضوع ..
ولكن سؤالي ما هي الطريقة الأفضل هل استخدام جملة insert في الفورم أم استخدام تريجر befor updating نظرا لأن التعديل على جملة insert في الفورم أسرع من التعديل على التريجر ..؟؟
رابط هذا التعليق
شارك

اخي الكريم
موضوع انك تعمل ريكورد جديه ، موضوع خطأ منطقياً ، ولا أعتقد ان فيه شركة تعمل بهذا المفهوم والله أعلم ، لان بكل بساطة حتى ولو مكنش بيطلب منك حاجة دلوأتي ، ممكن ادام الجهة صاحبة المشروع تطلب تعديل .......
عشان اوضح كلامي
تخيل مثلا اننا بنتكلم على جدول موظفين
وانت كل لما بيحصل تعديل في حالة معينة بتعمل أنسرت في الريكورد
تخيل باه لو كنت بتعمل شاشة بتعمل بحث بدلالة الاسم ، هتجد ان الاسم تكرر اكتر من مرة في الجدول ، طب في الحالة ده المفروض السيستم هيرجع اي قيم ؟؟
بتاع الصف الجديد ولا الصفوف القديمة
علاوة على كده انك بتزود حجم البيانات في الجدول ، وبالتالي بتعمل علمية load على الجدول ، وبالتالي عملية البحث هتاخد وقت أطول
وده اللي أغلب الشركات اللي اشتغلت فيها بتشتغل بيه
... اتمنى ان الفكرة تكون وصلت

رابط هذا التعليق
شارك

اخي الكريم
موضوع انك تعمل ريكورد جديه ، موضوع خطأ منطقياً ، ولا أعتقد ان فيه شركة تعمل بهذا المفهوم والله أعلم ، لان بكل بساطة حتى ولو مكنش بيطلب منك حاجة دلوأتي ، ممكن ادام الجهة صاحبة المشروع تطلب تعديل .......
عشان اوضح كلامي
تخيل مثلا اننا بنتكلم على جدول موظفين
وانت كل لما بيحصل تعديل في حالة معينة بتعمل أنسرت في الريكورد
تخيل باه لو كنت بتعمل شاشة بتعمل بحث بدلالة الاسم ، هتجد ان الاسم تكرر اكتر من مرة في الجدول ، طب في الحالة ده المفروض السيستم هيرجع اي قيم ؟؟
بتاع الصف الجديد ولا الصفوف القديمة
علاوة على كده انك بتزود حجم البيانات في الجدول ، وبالتالي بتعمل علمية load على الجدول ، وبالتالي عملية البحث هتاخد وقت أطول
وده اللي أغلب الشركات اللي اشتغلت فيها بتشتغل بيه
... اتمنى ان الفكرة تكون وصلت


اوافقك الرأي اخوي عبدالله كلامك 100\100
جزاك الله كل خير
رابط هذا التعليق
شارك

اخي الكريم
موضوع انك تعمل ريكورد جديه ، موضوع خطأ منطقياً ، ولا أعتقد ان فيه شركة تعمل بهذا المفهوم والله أعلم ، لان بكل بساطة حتى ولو مكنش بيطلب منك حاجة دلوأتي ، ممكن ادام الجهة صاحبة المشروع تطلب تعديل .......
عشان اوضح كلامي
تخيل مثلا اننا بنتكلم على جدول موظفين
وانت كل لما بيحصل تعديل في حالة معينة بتعمل أنسرت في الريكورد
تخيل باه لو كنت بتعمل شاشة بتعمل بحث بدلالة الاسم ، هتجد ان الاسم تكرر اكتر من مرة في الجدول ، طب في الحالة ده المفروض السيستم هيرجع اي قيم ؟؟
بتاع الصف الجديد ولا الصفوف القديمة
علاوة على كده انك بتزود حجم البيانات في الجدول ، وبالتالي بتعمل علمية load على الجدول ، وبالتالي عملية البحث هتاخد وقت أطول
وده اللي أغلب الشركات اللي اشتغلت فيها بتشتغل بيه
... اتمنى ان الفكرة تكون وصلت


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

تمام كده يا أخي ... يبقى احنا بنتكلم في نفس النقطة

كده بأه عايز أفهم معنى سؤالك ده ؟؟


ولكن سؤالي ما هي الطريقة الأفضل هل استخدام جملة insert في الفورم أم استخدام تريجر befor updating نظرا لأن التعديل على جملة insert في الفورم أسرع من التعديل على التريجر ..؟؟
رابط هذا التعليق
شارك

تمام كده يا أخي ... يبقى احنا بنتكلم في نفس النقطة

كده بأه عايز أفهم معنى سؤالك ده ؟؟


ولكن سؤالي ما هي الطريقة الأفضل هل استخدام جملة insert في الفورم أم استخدام تريجر befor updating نظرا لأن التعديل على جملة insert في الفورم أسرع من التعديل على التريجر ..؟؟



قصدت أخي أنه في حال قمت باضافة عمود الى الجدول الأساسي حينها يجب أن أقوم باضافة نفس العمود الى الهيستوري .كده صح
وحينها أيضا يجب أن أقوم بالتعديل على التريجر befor updating اذا قمت باعتماد هذه الطريقة يعني سأقوم بالتعديل علي التريجر أي اضافة العمود الجديد ومن ثم تنفيذه مرة أخرى ..
ولكن حسب رأيي أن استخدام جملة insert في زر ( حفظ التعديلات الموجود في الفورم الأساسي , على أن يقوم بعمل اضافة في الجدول الهيستوري) هي أفضل لأن التعديل عليها سيكون أسرع في حال التعديل وهي طريقة بسيطة جدا وسهلة جدا ...
أيهما تفضل أنت ..؟ تريجر في الداتا بيس أم جملة insert في الفورم ...؟
ما هو الأفضل حسب رأيك ..؟
رابط هذا التعليق
شارك

اضف حقل جديد( تاريخ التعديل ) لجدول الهستوري و استخدمه عند تعديل السجل الاخير (اكبر تاريخ)


فورم التعديل أخي مربوط بالجدول الأساسي وليس بالجدول الهيستوري والجدول الأساسي أخي لا يقبل رقم الهوية فيه الكرار أي لا يقبل رقم هوية مكرر , لذا عند استدعاء البيانات عن طريق رقم الهوية فانه لن يرجع لي بيانات مكررة لأن رقم الهوية مفتاح أساسي , وعند الضغط على زر حفظ فانه سيعمل تعديل على البيانات في الجدول الأساسي وبعد ذلك يعمل اضافة سجل جديد بالبيانات الجديدة الى الجدول الهيستوري ..
هذه هي الفكرة أنا لا أحتاج الى تاريخ التعديل كي أرجع آخر سجل تم التعديل عليه , مع العلم أنني أستخدم تاريخ التعديل في الجدول ولكن لا أستخدمه كثيرا ..
أرجو أن تكون الفكرة واضحة ..
شكرا لك أخي على المشاركة وعلى الفكرة الجديدة , فهي ناجحة ويمكن أن أستخدمها مستقبلا في المشروع كأداة للبحث ..
شكرا لك ..
رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل



×
×
  • أضف...

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

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