delphi4arab منتديات دلفي للعرب
كيف تغير التاريخ تلقائيا في قاعدة بيانات - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف تغير التاريخ تلقائيا في قاعدة بيانات (/showthread.php?tid=7644)



كيف تغير التاريخ تلقائيا في قاعدة بيانات - wadoud - 22-03-2016

السلام عليكم 
ماهي الطريق الامثل لتغير التاريخ تلقائيا  او اوتوماتكيا في حقل في قاعدة البيانات مثلا بع مرور سبعة ايام
عندي محاولة  
كود :
if now - (ADOTable1.FieldByName('date').value)=7 then adotable.append ADOTable1.FieldByName('date').value:=now; adotable.post;
وذلك مع كامل التسجيلات في الجدول
شكرا


RE: تغير التاريخ تلقائيا في قاعدة بيانات - Mr.DOS - 22-03-2016

سلام عليكم

اوضح اكثر


RE: تغير التاريخ تلقائيا في قاعدة بيانات - wadoud - 23-03-2016

عندي حقل تاريخ بقاعدة بيانات اكسس
اذا حل يوم المسجل في الحقل يتم استبداله بتاريخ سبعة ايام القادمة اليا بدون تدخل المستعمل
مثال
في الحقل مسجل 24/03/2016
عندما يحل موعد نفس التاريخ اي 24/03/2016
يتحول الى 31/03/2016 اليا.


RE: تغير التاريخ تلقائيا في قاعدة بيانات - PLANSHARP - 23-03-2016

لو أنك تستخدم SQL Server لكان الأمر بسيط جداً باستخدام SQL Server Agent, حيث أنه سيقوم بتنفيذ تعليمة SQL للتعديل على الجداول التي تريد و الحقول التي تريد حسب ال Schedule  الذي تريد.

ولكن بما أنك تستخدم أكسس, فعليك بالقيام بهذه العملية بشكل يدوي, إما عن طريق الدلفي بشكل مباشر أو أن تكتب استعلام داخل ملف الأكسس و تقوم بتنفيذه بشكل دوري.

1- عن طريق الدلفي:
يمكن وضع الكود الخاص بالتعديل على حقول التاريخ ضمن تايمر إذا كان برنامجك يعمل بإستمرار, أو أن تضع الكود في حدث on show مثلاً للفورم المتعلق بهذه القضية.
سنفترض أنك تريد التعديل على كامل السجلات:

كود :
 ADOTable1.DisableControls;  ADOTable1.First;  while not ADOTable1.Eof do  begin    if ADOTable1.FieldByName('your date field name').AsDateTime = now then    begin      ADOTable1.Edit;      ADOTable1.FieldByName('your date field name').AsDateTime :=        ADOTable1.FieldByName('your date field name').AsDateTime + 7;      ADOTable1.post;    end;    ADOTable1.Next;  end;  ADOTable1.EnableControls;
2- استعلام الأكسس و تنفيذه:
عليك بإنشاء query داخل ملف الأكسس و تسميه مثلاُ setnewdate وتضع به الكود التالي:
كود :
UPDATE table1 SET mydate = mydate+7 WHERE mydate=date();
الآن كل ما عليك هو تشغيله بشكل دوري من داخل الدلفي, و لعمل ذلك يمكنك استخدام ADOCOMMAND و تضع في خاصية Commandtext اسم الquery الذي أنشئته:
كود :
ADOCommand1.CommandText := 'setnewdate'; ADOCommand1.Execute;

وبهذا سيتم تنفيذ الquery ليؤثر على سجلات الجدول حس المطلوب.
وفقكم الله.


RE: تغير التاريخ تلقائيا في قاعدة بيانات - wadoud - 23-03-2016

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


RE: تغير التاريخ تلقائيا في قاعدة بيانات - wadoud - 23-03-2016

السلام عليكم اخي الكريمPLANSHARP
لقد جربت الكود واشتغل على التمام
الا انني سألح عليك قليلا فتحملني بارك الله فيك
ADOTable1.DisableControls; اريد ان أعرف وظيفتها
ثانيا عندي حقل ثان  order يحمل  القيمتين 'أول' أو 'أخير'     اريد ان أربطه مع التاريخ  أعلاه اذا تغير التاريخ وكان order  'أول' يتغير بدوره تلقائيا و يصبح 'أخير'  والعكس اذا كان 'أخير'  يصبح 'أول' .
استسمحك وقتك الثمين
السلام عليكم


RE: تغير التاريخ تلقائيا في قاعدة بيانات - PLANSHARP - 24-03-2016

و عليكم السلام و رحمة الله وبركاته.
بالنسبة لـ Disablecontrols: تقوم بإيقاف ال adotable من عرض بيانات السجلات ضمن عناصر ال DB-aware , مثل DBedit, Dbmemo, Dbgrid, وذلك لأن الكود سيقوم بعملية scan لكل السجلات ضمن الجدول و هذا لا داعي لإظهاره على العناصر مما قد يسبب بطء في البرنامج.

بالنسبة للتعديل:
كود :
 ADOTable1.DisableControls;  ADOTable1.First;  while not ADOTable1.Eof do  begin    if ADOTable1.FieldByName('your date field name').AsDateTime = now then    begin      ADOTable1.Edit;      ADOTable1.FieldByName('your date field name').AsDateTime :=        ADOTable1.FieldByName('your date field name').AsDateTime + 7;      if ADOTable1.FieldByName('order').AsString = 'أول' then        ADOTable1.FieldByName('order').AsString := 'أخير'      else        ADOTable1.FieldByName('order').AsString := 'أول';      ADOTable1.post;    end;    ADOTable1.Next;  end;  ADOTable1.EnableControls;
وفقكم الله.


RE: تغير التاريخ تلقائيا في قاعدة بيانات - wadoud - 25-03-2016

السلام عليكم اخي الكريم PLANSHARP أشكرك على شرحك وتحملك فزادي قليل ومعارفي مبعثرة.
لقد اسعدتني اسعدك الله لقد عمل الكود بالتمام و المراد المنشود , إلا انني وضعت date مكان now حتي لا تدخل الساعة وعمل في الأخير. فجزاك الله عنا كل خير ووفقك الله.


RE: كيف تغير التاريخ تلقائيا في قاعدة بيانات - PLANSHARP - 10-04-2016

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

وإذا أردت ملاحظة الفرق, جرب على جدول به 50 ألف تسجيلة أو أكثر.


RE: كيف تغير التاريخ تلقائيا في قاعدة بيانات - wadoud - 10-04-2016

(10-04-2016, 02:21 PM)PLANSHARP كتب : ملاحظة: عند استخدام الطريقة الثانية و هي استعلام الأكسس و تنفيذه فإن هذه الطريقة سريعة جداً و أسرع بكثير من الطريقة الأولى.

وإذا أردت ملاحظة الفرق, جرب على جدول به 50 ألف تسجيلة أو أكثر.

السلام عليك أخي 
أحسن الله إليك , معلومة مفيدة جدا, وفقنا الله لبذل العلم النافع.