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

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

Featured Replies

بتاريخ:

السلام عليكم

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

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


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

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

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

  • الردود 30
  • المشاهدات 4.3k
  • البداية
  • اخر رد

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

بتاريخ:

السلام عليك
أعتقد أنه الصعب تنفيذ ماتريد لكن في حل ممكن يسهل عليك الموضوع
هتنشء عمود اسمه 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

وحشتنا يارجل


ألف شكر لك أخي مصطفى على المساعدة ...
تحياتي لك ..
بتاريخ:
  • كاتب الموضوع

ممكن مثال على تريجر befor updating .. ???

بتاريخ:

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

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 في الفورم ...؟
ما هو الأفضل حسب رأيك ..؟
بتاريخ:
  • كاتب الموضوع
اضف حقل جديد( تاريخ التعديل ) لجدول الهستوري و استخدمه عند تعديل السجل الاخير (اكبر تاريخ)


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

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

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

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

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

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

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.