عندما تتعامل مع قواعد البيانات لابد ، وانك تحتاج لان تستخدم اوامر 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;
واخير وليس أخرا ارجو ان لا تنسوني بدعوة صالحة في ظهر الغيب .
اخوكم
ابوهاني
يمكن تنزيل المثال لموضوعنا من هنا