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

مقدمة لأوامر ال SQL في الدلفي ( للمبتدئين )

مغلق
بدأه ابوهاني في 14 مايو 2003 · 8 رد · 10,809 مشاهدة · في أرشيف منتدى الدلفي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عندما تتعامل مع قواعد البيانات لابد ، وانك تحتاج لان تستخدم اوامر SQL عاجلا او آجلاً ، وكثير من المبرمجين يواجهون مشاكل في التعامل مع اوامر SQL ، لذلك اردت هنا ان اشرح بعضا من اهم الاوامر حتى يستفيد منها الاخوة المبتدئين :

طبعا لا تخلو عمليات التعامل مع قواعد البيانات من :

- اضافة

- عرض أو بحث

- تعديل

- حذف

بالاضافة الى عمليات اخرى كثيرة ، ولكن هذه تقريبا العمليات الاساسية

اريد ان افترض هنا انه يوجد لديك بالفعل قاعدة بيانات مبنية وجاهزة ، وبه جدول للعملاء باسم Cust وذلك بالمواصفات التالية :

- حقل نصي لرقم العميل باسم CustNo

- حقل نصي لاسم العميل باسم CustName

- حقل نصي لهاتف العميل باسم Tel

- حقل تاريخ لبداية التعامل باسم StartDate

- حقل رقمي للرصيد الافتتاحي باسم StartAmount

لاحظ اني حاولت في هذا المثال ادراج اغلب انواع البيانات ( نصي ، رقمي ، تاريخ )

ايضا افترض انه فعلا قد قمت ببناء نموذج بسيط للتعامل مع الجدول أعلاه ، وقمت بربط قاعدة البيانات عن طريق ADOConnection ، وايضا اضفت استعلام ADOQuery ، وثم اضفت EditBox وليس DBEdit لانه هذا موضوع آخر وذلك لكل حقل بحيث يكون عدد الـ EditBox هو 5 بما يساوي عدد الحقول للجدول اعلاه .

اذا نبدأ باضافة البيانات :

ولكن قبل ان نبدأ باضافة البيانات اريد ان اشكر مبرمجي لغة دلفي على تبسيط التعامل مع الـ SQL بواسطة البارامترات (Parameters) ، حيث انها سهلت الكثير من العمل ، واراحتنا من مشكال الـ الفواصل وعلامات الاقتباس (Quotation) ، حيث كان يتطلب بناء الاوامر بلغة الـ SQL الكثير من الجهد وتتبع علامات الاقتباس من اليمين والشمال وكان من المفروض ان تكون عبارة الاضافة بدون البارامترات كالتالي حتى يعمل بالشكل الصحيح :

with ADOQuery1 do
     begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO Cust');
      SQL.Add('( CustNo,CustName,Tel,StartDate,StartAmount)');
      SQL.Add(' Values');

      SQL.Add('(' + '"' + Edit1.Text + '"' + ',' + '"' + Edit2.Text + '"' );
      SQL.Add(',' + '"' + Edit3.Text + '"' + ',' + '#' + Edit4.Text + '#' );
      SQL.Add(',' + Edit5.Text +')');
      ExecSQL
    end;

فعلا الكثير من العمل ، والكثير من الارباك فيجب احاطة البيانات النصية بعلامة ( " ) ، وبيانات التاريخ بـعلامة ( # ) وترك البيانات الرقمية بدون احاطة بأي علامة ...

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

 with ADOQuery1 do
     begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO Cust');
      SQL.Add('( CustNo,CustName,Tel,StartDate,StartAmount)');
      SQL.Add(' Values');
      SQL.Add('(:P1,:P2,:P3,:P4,:P5)');
      Prepared;
      Parameters.ParamByName('P1').Value := Edit1.Text;
      Parameters.ParamByName('P2').Value := Edit2.Text;
      Parameters.ParamByName('P3').Value := Edit3.Text;
      Parameters.ParamByName('P4').Value := Edit4.Text;
      Parameters.ParamByName('P5').Value := Edit5.Text;
      ExecSQL
    end;

اتمنى فعلا انك لاحظت ذلك ، وانك انت ايضا ممتن لفريق عمل دلفي كما هو حالي .

هذا ماكان بالنسبة لاضافة البيانات .

بعد ان اضفنا البيانات فمن المؤكد انك ترغب في البحث فيها او عرضها ويتم ذلك كالتالي :

في هذا الاجراء عرفت متغير نصي واسميته InputString لياخذ قيمة من المستخدم في الـ InputBox حتى يتم البحث عن هذه القيمة وهنا نحن بحث بواسطة رقم العميل ونرغب بعرض البيانات في النموذج نفسه

var
  InputString: string;
begin
  InputString:= InputBox('بحث', 'فضلا ادخل رقم العميل', '');
  if InputString = '' then Exit;

with ADOQuery1 do
 begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM Cust WHERE CustNo = :P1');
  Prepared;
  Parameters.ParamByName('P1').Value := InputString;
  Open;
End;

if ADOQuery1.RecordCount = 0 then
 begin
 ShowMessage('لا يوجد عميل بهذا الرقم');
 exit;
end else
  begin
  Edit1.Text := ADOQuery1.Fields.Fields[0].AsString;
  Edit2.Text := ADOQuery1.Fields.Fields[1].AsString;
  Edit3.Text := ADOQuery1.Fields.Fields[2].AsString;
  Edit4.Text := FormatDateTime('yyyy/mm/dd', ADOQuery1.Fields.Fields[3].AsDateTime);
  Edit5.Text := ADOQuery1.Fields.Fields[4].AsString;
end;

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

with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE Cust');
    SQL.Add(' SET ');
    SQL.Add('CustNo = :P1,CustName = :P2,Tel =:P3,StartDate =:P4,StartAmount=:P5');
    SQL.Add(' WHERE CustNo = :PWHERE');
    Prepared;
    Parameters.ParamByName('P1').Value := Edit1.Text;
    Parameters.ParamByName('P2').Value := Edit2.Text;
    Parameters.ParamByName('P3').Value := Edit3.Text;
    Parameters.ParamByName('P4').Value := Edit4.Text;
    Parameters.ParamByName('P5').Value := Edit5.Text;

    Parameters.ParamByName('PWHERE').Value := Edit1.Text; // For WHERE
    ExecSQL
End;

ولربما لسبب او لاخر ، لاترغب بالتعديل وانما ترغب بحذف هذا السجل فاننا سوف نستخدم هذا الاجراء

with ADOQuery1 do
 begin
  Close;
  SQL.Clear;
  SQL.Add('DELETE FROM Cust WHERE CustNo = :P1');
  Prepared;
  Parameters.ParamByName('P1').Value := Edit1.Text;
  ExecSQL
End;

هذا ماكان لدي بخصوص التعامل مع اوامر الـ SQL ، ولربما توجد طرق أخرى اكثر احترافية ، انا شخصيا اجهلها فارجو من المحترفين هنا عرضها حتى تعم الفائدة للكل .

واخير احب ان اضيف اجراء اخير ليس له علاقة بالتعامل مع قواعد البيانات ولكني دائما استخدمه لتفريغ الحقول (EditBox) بعد أي اجراء من السابق أعلاه ، وبما اننا نحتاج هذا الاجراء اكثر من مرة وفي نفس البرنامج فمن الاوجه ان نقوم ببناء اجراء واحد لذلك ، ومناداته عند الحاجة وهو كالتالي :

procedure DoNull;
begin
form1.Edit1.Text :='';
form1.Edit2.Text :='';
form1.Edit3.Text :='';
form1.Edit4.Text :='';
form1.Edit5.Text :='';
end;

ويتم مناداته باسمه كالتالي

DoNull;

واخير وليس أخرا ارجو ان لا تنسوني بدعوة صالحة في ظهر الغيب .

اخوكم

ابوهاني

يمكن تنزيل المثال لموضوعنا من هنا

sqlparam.zip

تم تعديل هذه المشاركة بواسطة ORWA في 17 نوفمبر 2004 في 18:12

#2

الله يجزيك الخير على الموضوع اللي الكل يتمنى معرفته

#3

السلام عليكم

أرجو لأخي أبو هاني كل خير .....:rolleyes:

ومشكور جداً ..على دروسك ....؟؟؟

ونرجو المزيد في عالم الSQL............(f)

نحن أيضا بانتظار الاخت مينـــا ......;)

أخوكم:cool:

#4

نشكرك اخون ابوهاني

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

الله يوفق .(gift)

#5

حلو و برافو . . .

و رأي أن لاتتوقف أيضاً ;)

#6

الاخوه الكرام:

وجدت كود بسيط بخصوص DONulls:

procedure DoNulls;
var
i : word;
begin
 for i := 0 to ComponentCount - 1 do begin
     if Components is TEdit then
    TEdit(Components.Text := '';
end;
end

دعواتكم الصالحة

تم تعديل هذه المشاركة بواسطة ORWA في 17 نوفمبر 2004 في 18:14

#7

اشكرك اخي فالح ... فعلا اضافة مميزة

وفقك الله

#8

جزاك الله خير اخي ابو هاني على هذا الشرح الممتع

#9

جزاك الله خيرا ولو بعد طول مدى

تم تعديل هذه المشاركة بواسطة abazied في 21 ديسمبر 2004 في 22:50

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

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