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

اوضح اكثر
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
الرد
#3
عندي حقل تاريخ بقاعدة بيانات اكسس
اذا حل يوم المسجل في الحقل يتم استبداله بتاريخ سبعة ايام القادمة اليا بدون تدخل المستعمل
مثال
في الحقل مسجل 24/03/2016
عندما يحل موعد نفس التاريخ اي 24/03/2016
يتحول الى 31/03/2016 اليا.
الخوف من أي محاولة جديدة طريق حتمي للفشل.
الرد
#4
لو أنك تستخدم 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 ليؤثر على سجلات الجدول حس المطلوب.
وفقكم الله.
[-] كل من 1 user says قال شكرا ل PLANSHARP على المشاركة المفيدة
  • wadoud
الرد
#5
السلام عليكم اخي الكريمPLANSHARP
أشكرك على جوابك السريع وشرحك المتقن الوافي والكافي لقد كنت جوادا في جوابك وتعلمت اشياءا جديدة .كثر الله امثالك ونفعنا الله بعلمك ,حفظك الله اخي ساجرب ما تفضلت به.
السلام عليكم.
الخوف من أي محاولة جديدة طريق حتمي للفشل.
الرد
#6
السلام عليكم اخي الكريمPLANSHARP
لقد جربت الكود واشتغل على التمام
الا انني سألح عليك قليلا فتحملني بارك الله فيك
ADOTable1.DisableControls; اريد ان أعرف وظيفتها
ثانيا عندي حقل ثان  order يحمل  القيمتين 'أول' أو 'أخير'     اريد ان أربطه مع التاريخ  أعلاه اذا تغير التاريخ وكان order  'أول' يتغير بدوره تلقائيا و يصبح 'أخير'  والعكس اذا كان 'أخير'  يصبح 'أول' .
استسمحك وقتك الثمين
السلام عليكم
الخوف من أي محاولة جديدة طريق حتمي للفشل.
الرد
#7
و عليكم السلام و رحمة الله وبركاته.
بالنسبة لـ 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;
وفقكم الله.
[-] كل من 1 user says قال شكرا ل PLANSHARP على المشاركة المفيدة
  • wadoud
الرد
#8
السلام عليكم اخي الكريم PLANSHARP أشكرك على شرحك وتحملك فزادي قليل ومعارفي مبعثرة.
لقد اسعدتني اسعدك الله لقد عمل الكود بالتمام و المراد المنشود , إلا انني وضعت date مكان now حتي لا تدخل الساعة وعمل في الأخير. فجزاك الله عنا كل خير ووفقك الله.
الخوف من أي محاولة جديدة طريق حتمي للفشل.
الرد
#9
ملاحظة: عند استخدام الطريقة الثانية و هي استعلام الأكسس و تنفيذه فإن هذه الطريقة سريعة جداً و أسرع بكثير من الطريقة الأولى.

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

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

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


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم