الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية معرفة انه حصل تغيير على Record

مغلق
بدأه Wael Dalloul في 21 يوليو 2005 · 10 رد · 1,567 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

السؤال:

اذا كان عندي بطاقة طالب مثلاً تعرض معلومات من Datasource مربوطة مع AdoTable والمربوط مع جدول في قاعدة البيانات

فكيف يمكنيي عند التعديل على بطاقة الطالب ان اعرف انّ المستخدم قد عدل على هذا السجل وعند اغلاق البطاقة اقوم باظهار رسالة تأكيد الحفظ

واذا لم يعدل المستخدم على البطاقة لا اظهر له شيئ

لقد حللت هذه المشكلة عن طريق وضع OnChange على كل من الكنترول الموجودة في بطاقة الطالب انها تغير على متحول بولياني معرف في الفورم فعند الأغلاق افحص قيمة هذا المتحول اذا كانت true اي انه حصل تغيير وهكذا

ولكن قد وجدت ان هذه الطريقة غبية و طويلة

هل يمكنني ان اعرف انه حصل تغيير على Record من الأحداث الموجودة على AdoTable او على DataSource Components

ارجو ان اكون قد اوضحت المشكلة

وشكراً

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#2

table.Modified

if tbl_main.Modified then
if MessageDlg('save data',mtInformation,[mbyes,mbno],0)=mryes then
tbl_main.post;
#3

ان Table.Moified تحصل عندما اضيف سجل جديد او احذف سجل

انا لا اريد هذا

و انما الذي اريده هو عندما يعدل المستخدم على حقل من حقول الجدول اقوم باظهار رسالة الحفظ

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

لو فرضنا بطاقة الطالب تحتوي على الاسم 'وائل' تغيرت الى 'حسان' فهنا اريد ان اعرف انا المستخدم قام بكتابة شيئ

ضمن هذا الRecord

ارجو ان اكون وضحت ما اريد وشكرا لك اخ عروة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4

ممتاز انك تستخدم DBEdit او Edit مثلا عموما امنع المستخدم من التغيير المباشر من DBGride وذلك بوضع

ٌReadOnly مساويا true

والان اصنع متغيرا عاما من النوع Boolean

var

  flag:boolean;
.  .   .
implementation

والان في الحدث OnChange من الDBEdit

ضع الكود التالي

procedure TForm1.DBEdit1Change(Sender: TObject);
begin
 flag:=true;
end;

و الان في الحدث OnExit من الDBEdit ضع الكود التالي

procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
  if flag=true then
    if MessageDlg('save data',mtInformation,[mbyes,mbno],0)=mryes then
    ADOTable1.Post
    else
    ADOTable1.Cancel;
    flag:=false;
end;

وفي الحدث OnExit من الDBGride

procedure TForm1.DBGrid1Exit(Sender: TObject);
begin
 flag:=false;
end;

جرب الكود ورد خبر

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#5

استخدم

beforpost

و

afterpost

#6

أنصح باستخدام AfterEdit للعنصر Table , فهو مضمون وسهل التعامل حيث يكفي ضبط المتحول البولياني مرة واحده ضمنه بدلا من ضبطه في كل dbedit

procedure TForm1.ADOTable1AfterEdit(DataSet: TDataSet);
begin
changed:=true
end;

ممكن الاستفاده من أحداث أخرى مثل onUpdateData لل Datasource أو غيرها

#7

السلام عليكم يا شباب شكراً على المساعدة

الاخ Romanof انا لا استخدم DBBGride في بطاقة الطالب وقد ذكرت انني لا اريد ان احل هذه المشكلة على Onchange

لل DBEdit لانها لا تعمل اذ انه عندما تقوم بتفعيل AdoTable المربوط مع ال DBWareComponents يشتعل الحث OnChange وهذا خطأ بالنسبة لي اذ اريد فقط عندما يغيير المستخدم في احد الحقول ان اقوم بالحفظ عند اغلاق البطاقة

وشكرا لك على محاولة المساعدة

الاخ sal1150 انّ الحدثان beforpost و afterpost يشتعلان عندما اقوم بالحفظ ولا نعرف اذا كان المستخدم قد عدل بطاقة الطالب

الاخ عروة انّ الحدث After Post يشتعل عندما يقوم المستخدم بأول تعديل على اي حقل من حقول السجل

وهذا ما اريد فعلاً :rolleyes:

وشكرا

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#8

عفوا اخ عروة الحدث After Edit وليس After Post

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#9
اقتباس
الاخ Romanof انا لا استخدم DBBGride في بطاقة الطالب وقد ذكرت انني لا اريد ان احل هذه المشكلة على Onchange

اسف جدا لم انتبه

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#10

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

انا اقترح حل ليس طويل ولكن مفيد جداً وينفعك في حالات الاستعلام

ضع سجل جديد وسميه Modify من نوع تاريخ

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

(الان اصبح لديك سجل من نوع تاريخ) ما عليك إلا وعمل استعلام بسط يقوم بحصر أي سجل تم تعديله أو إضافته حتى على قاعدة البيانات.........................

يعني مثل ما تعمل سيرش بالويندوز تماماً طبعا هذا الحل يتفرع منه حل أخر كما رأيت وهو اذا اراد المستخدم رؤية ما اذا تم اضافة اي سجل جديد أو عمل جرد على السجلات التمة إضافتها في يوم انت تحديد

(عفواً لم ادعم ردي باي كود لأنني على جهاز لا يوجد فيه دلفى)

أخوكم

When You Started With Delphi ...You Could Not Stop!

delphiteam2.jpg

alharmoodiGropu.com

#11

قد قرات الموضوع بسرعة فااسف لو لم افهم

ما فهمت انك تريد التخزين عند اغلاق الفورم

فى حدث الاغلاق On Form Close

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

If Table1.State in [DsEdit,DsInsert] then

Table1.post

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…