الاضافة او التحديث داخل جدول عن طريق sql - dahmane26 - 06-04-2020
السلام عليكم اتمنى لكم السلامة في زمن الكورونا و ارجو من الله ان يرفع عنا البلاء
لدي برنامج به عدة جداول بقاعدة الفايربيرد
وعندما اريد ادخال معطيات من الجدول 1 الى الجدول 2 و لهم نفس اسماء الحقول بخاصية التحديث ان وجد التاريخ في الجدول الثاني او ادخال البيانات في الجدول الثاني عند عدم وجود التاريخ المراد ادخاله
وقمت بمحاولة لكن الاجراء يقوم بادخال بيانات جديدة على الرغم من وجود التاريخ اي يقوم بعملية التكرار اجو منكم تصحيح الخلل و الاجراء هو كما يلي
PHP كود : var o,n:integer; begin dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('select * from FMOIS '); dm.QuMois.SQL.Add('where DATE_JOURNNEE=:D1'); dm.QuMois.paramByName('D1').AsDate := StrToDate(MaskEdit5.text); dm.QuMois.Open; n:=dm.QuMois.RecordCount; edit4.Text:=inttostr(dm.QuMois.RecordCount); if n=0 then begin //////////////////////INSERT///////////// dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('INSERT INTO FMOIS (EDITE,DATE_JOURNNEE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL)'); dm.QuMois.SQL.Add('select EDITE,:datejoure, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL'); dm.QuMois.SQL.Add('from TJOUR where DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2 '); dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text); dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.paramByName('datejoure').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.SQL.Add('Group By EDITE,DATE_JOURNNEE'); dm.QuMois.ExecSQL; dm.QuMois.Open; showmessage('RecordCount ajout'); dm.FMOIS.Refresh; edit6.Text:=inttostr(dm.FMOIS.RecordCount); end; //////////////update/////////////// o:=dm.QuMois.RecordCount; edit5.Text:=inttostr(dm.QuMois.RecordCount); if o>=1 then begin dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('UPDATE FMOIS SET (EDITE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL)'); dm.QuMois.SQL.Add('select EDITE, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL'); dm.QuMois.SQL.Add('from TJOUR where DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2'); dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text); dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.SQL.Add('Group By EDITE'); showmessage('RecordCount update'); dm.FMOIS.Refresh; edit6.Text:=inttostr(dm.FMOIS.RecordCount); end; end;
RE: الاضافة او التحديث داخل جدول عن طريق sql - larbiparadox - 06-04-2020
وعليك السلام
جرب هذا
تحتاج إلى الشرط
كود : dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');
أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE
RE: الاضافة او التحديث داخل جدول عن طريق sql - dahmane26 - 06-04-2020
(06-04-2020, 06:41 PM)larbiparadox كتب : وعليك السلام
جرب هذا
تحتاج إلى الشرط
كود : dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');
أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE
المشكل انه عند التحدث يزيد سجلات اخرى كانه في حالة الاضافة وليس التحديث
RE: الاضافة او التحديث داخل جدول عن طريق sql - larbiparadox - 06-04-2020
ارفق مثال اذا امكن ، حتى اتمكن من تصحيحه
RE: الاضافة او التحديث داخل جدول عن طريق sql - sofiane201 - 07-04-2020
(06-04-2020, 06:41 PM)larbiparadox كتب : وعليك السلام
جرب هذا
تحتاج إلى الشرط
كود : dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');
أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE
الأمر Where لا يمكن أن يأتي بعد group by, بعد group by دائما تأتي having إذا أردت استخدام الشروط.
RE: الاضافة او التحديث داخل جدول عن طريق sql - larbiparadox - 07-04-2020
(07-04-2020, 12:28 AM)sofiane201 كتب : (06-04-2020, 06:41 PM)larbiparadox كتب : وعليك السلام
جرب هذا
تحتاج إلى الشرط
كود : dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');
أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE
الأمر Where لا يمكن أن يأتي بعد group by, بعد group by دائما تأتي having إذا أردت استخدام الشروط.
* إذا تفحصت الكتابة جيدا تجد أن group by تابعة select و الامر Where خاص بـUPDATE
RE: الاضافة او التحديث داخل جدول عن طريق sql - sofiane201 - 07-04-2020
نعم, لم أنتبه لذلك, ليست لدي خبرة في فايربيرد لكن لا أظن أن الصيغة صحيحة.
أي الصيغة
PHP كود : UPDATE table2 SET (c1,c2,c3,c4) SELECT c1,c2,c3,c4 FROM table1 where [condition] GROUP BY c1 WHERE..
يمكنك رؤية التوثيق الخاص ب update من هنا
RE: الاضافة او التحديث داخل جدول عن طريق sql - dahmane26 - 09-04-2020
لقد اعدت كتابة الاجراء بهذا الشكل ونجح الامر
PHP كود : begin dm.FMOIS.Close; dm.FMOIS.Open; dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('select * from FMOIS '); dm.QuMois.SQL.Add('where DATE_JOURNNEE=:D1'); dm.QuMois.paramByName('D1').AsDate := StrToDate(MaskEdit5.text); dm.QuMois.Open; edit4.Text:=inttostr(dm.QuMois.RecordCount); if dm.QuMois.RecordCount = 0 then begin //////////////////////INSERT///////////// dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('INSERT INTO FMOIS (EDITE,DATE_JOURNNEE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL,'); dm.QuMois.SQL.Add('QUITTANCE_DU,QUITTANCE_AU,NER_DU,NER_AU,SERIE_DU,SERIE_AU)');//////// dm.QuMois.SQL.Add('select EDITE,:datejoure, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL'); dm.QuMois.SQL.Add(',sum(QUITTANCE_DU)as QUITTANCE_DU ,sum(QUITTANCE_AU)as QUITTANCE_AU ,sum(NER_DU)as NER_DU ,sum(NER_AU)as NER_AU ,sum(SERIE_DU)as SERIE_DU ,sum(SERIE_AU)as SERIE_AU');//////////// dm.QuMois.SQL.Add('from TJOUR where DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2 '); dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text); dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.paramByName('datejoure').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.SQL.Add('Group By EDITE'); dm.QuMois.ExecSQL; //dm.QuMois.Open; showmessage('RecordCount ajout '+'#'+'Fin du processus'); dm.FMOIS.Close; dm.FMOIS.Open; edit6.Text:=inttostr(dm.FMOIS.RecordCount); end; /////////////////// //////////////update/////////////// edit5.Text:=inttostr(dm.QuMois.RecordCount); if dm.QuMois.RecordCount > 0 then begin /////////////////delet///////// dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('DELETE FROM FMOIS WHERE DATE_JOURNNEE=:D2'); dm.QuMois.paramByName('D2').AsDate := StrToDate(MaskEdit5.text); dm.QuMois.ExecSQL; //dm.QuMois.Open; //////////////////////// //////////////////////INSERT///////////// dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('INSERT INTO FMOIS (EDITE,DATE_JOURNNEE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL)'); dm.QuMois.SQL.Add('select EDITE,:datejoure, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL'); dm.QuMois.SQL.Add('from TJOUR where DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2 '); dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text); dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.paramByName('datejoure').AsDate := StrToDate(form6.MaskEdit5.text); dm.QuMois.SQL.Add('Group By EDITE'); dm.QuMois.ExecSQL; //dm.QuMois.Open; showmessage('RecordCount update'); dm.FMOIS.Close; dm.FMOIS.Open; edit6.Text:=inttostr(dm.FMOIS.RecordCount); end; end; procedure TForm6.Button17Click(Sender: TObject); begin dm.QuMois.Close; dm.QuMois.SQL.Clear; dm.QuMois.SQL.Add('DELETE FROM FMOIS WHERE DATE_JOURNNEE=:D2'); dm.QuMois.paramByName('D2').AsDate := StrToDate(dbedit24.text); dm.QuMois.ExecSQL; dm.FMOIS.Close; dm.FMOIS.Open; end;
|