التعامل مع التاريخ في firebird
#1
Lightbulb 
السلام عليكم
استعمل في تطبيقي  دالفي xe5 وقاعدة بيانات  firebird و الاتصال عبر مكونات unidac واجهتني مشكلة في التعامل مع تاريخ حيث عند انشاء حقل من نوع date  يكون التاريخ بالشكل  yyyy/mm/dd  و هدا التنسيق لم يعمل عند استعمال استعلام   sql حيث يقبل فقط الحقول التي تحتوي  التنسيق  yyyy.mm.dd و الا تظهر مشكلة .
هل توجد طريقة لجعل التاريخ يسجل في قاعدة البيانات بالتنسيق yyyy.mm.dd  فقط ؟؟ ( يمكن استعمال دالة تحول بين التنسيقين لكن ابحث عن حلول اخرى ان امكن)
وشكرا
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#2
السلام عايكم

ممكن إستعلام الـ SQL المستعمل ؟
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#3
اوك اخي لؤي تفضل
PHP كود :
with DataModule1.filtageExper do
 
   begin
      Close
;
 
     SQL.Clear;

 
      SQL.Add('select (extract( year from CURRENT_DATE) - extract(year from cast(DATE_NAIS as date)))AS age,NUM_PERS,NOM,PRENOM,DATE_NAIS,ADRESSE,SEX,DATE_INSTA,UNITE,GRADE,NUM_CORP,NOM_COR,NUM_GRA,NOM_GRADE,APP_COR,NUM_SER,NOM_SERV,NOM_UNI,NUM_UNI,APPER_SER');
 
    SQL.Add(' FROM PERSONEL,CORPS,GRADES,SERVICE,UNITE');
 
    SQL.Add(' WHERE (PERSONEL.UNITE=UNITE.NUM_UNI) AND (PERSONEL.GRADE=GRADES.NUM_GRA) AND (SERVICE.NUM_SER=UNITE.APPER_SER) AND (CORPS.NUM_CORP=GRADES.APP_COR) ');
 
     Open;
 
   end; 

المشكل مع الحقل DATE_NAIS يجب ان يكون يحتوي على تاريخ بهدا التنسيق yyyy.mm.dd
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#4
السلام عليكم
DATE_NAIS هو حقل في القاعدة firebird و يحتوي على تواريخ بشكل yyyy.mm.dd ؟ إن كان كذلك فهو ليس من نوع date ..

http://www.firebirdfaq.org/faq137/
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
[-] كل من 1 user says قال شكرا ل لؤي على المشاركة المفيدة
  • bassem_43
الرد
#5
وعليكم السلام
معك حق بعد مراجعة الحقل الدي انشاته كان من نوع نصي والخطا اني كنت اخد التاريخ من المكون tdatetimepicker مباشرة و احفظه في دلك الحقل وبالتالي حدق خطا في الاستعلام .

يجب ايجاد طريقة لتحويل التاريخ من التنسيق DD/MM/YYYY للمكون tdatetimepicker الى التنسيق DD.MM.YYYY افكر في انشاء دالة .
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#6
السلام عليكم

ممكن باستعمال الدالة:
كود :
formatdatetime('dd.mm.yyyy',datetimepicker)
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
[-] كل من 1 user says قال شكرا ل لؤي على المشاركة المفيدة
  • bassem_43
الرد
#7
و عليكم السلام
بارك الله فيك اخي لؤي كفيتني مشقة كتابة دالة
لقد نجح الامر
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#8
السلام عليكم

معروف ان  الدالة
PHP كود :
RemainingDays 
تحسب الفرق بين تاريخين بالايام مثال :

PHP كود :
lbl1.Caption:=IntToStr(RemainingDays(dtp1.Date, dtp2.Date)); 

لكن حاولت استعمالها في استعلام sql لكن ظهر معي خطا ان الدالة غير معرفة Confused
PHP كود :
with DataModule1.filtageExper do
 
   begin
      Close
;
 
     SQL.Clear;
 
      SQL.Add('select (RemainingDays(CURRENT_DATE, DATE_INSTA)))AS experiance,NUM_PERS,NOM,PRENOM,DATE_NAIS,ADRESSE,SEX,DATE_INSTA,UNITE,GRADE,NUM_CORP,NOM_COR,NUM_GRA,NOM_GRADE,APP_COR,NUM_SER,NOM_SERV,NOM_UNI,NUM_UNI,APPER_SER');
 
    SQL.Add(' FROM PERSONEL,CORPS,GRADES,SERVICE,UNITE');
 
    SQL.Add(' WHERE (PERSONEL.UNITE=UNITE.NUM_UNI) AND (PERSONEL.GRADE=GRADES.NUM_GRA) AND (SERVICE.NUM_SER=UNITE.APPER_SER) AND (CORPS.NUM_CORP=GRADES.APP_COR) ');
 
     Open;
 
   end;
 
   end; 
حيث اريد حساب الفرق بين تاريخ اليوم و تاريخ التنصيب
PHP كود :
DATE_INSTA بالايام لاجدول العمال PERSONEL فما الحل ؟؟ 
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#9
السلام عليكم
ممكن إستعمال الوظيفة datediff :


PHP كود :
SELECT datediff (day, date '26-Jun-2017', date '11-Sep-2017') AS DiffDate from rdb$database 
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#10
وعليكم السلام
شكرا اخي لؤي لم ينجح معي الامر لكن وجدت الحل باستخدام هدا الاستعلام
PHP كود :
with DataModule1.filtageExper do
 
   begin
      Close
;
 
     SQL.Clear;
 
    SQL.Add('select TRUNC ( (CAST(CURRENT_DATE AS DATE) - CAST ( DATE_INSTA AS DATE)),0) AS experiance,NUM_PERS,NOM,PRENOM,DATE_NAIS,ADRESSE,SEX,DATE_INSTA,UNITE,GRADE,NUM_CORP,NOM_COR,NUM_GRA,NOM_GRADE,APP_COR,NUM_SER,NOM_SERV,NOM_UNI,NUM_UNI,APPER_SER');
 
    SQL.Add(' FROM PERSONEL,CORPS,GRADES,SERVICE,UNITE');
 
    SQL.Add(' WHERE (PERSONEL.UNITE=UNITE.NUM_UNI) AND (PERSONEL.GRADE=GRADES.NUM_GRA) AND (SERVICE.NUM_SER=UNITE.APPER_SER) AND (CORPS.NUM_CORP=GRADES.APP_COR) ');

 
     Open; 
اريد ان اضيف شرطا ان ناخد الخبرة من edit text مثلا الخبرة تساوي 5 سنوات حاولت لكن لم افلح .هل لديك فكرة كيف يكون الاستعلام ؟؟
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد


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


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