البحث في ال SQL عن طريق Delphi
#1
السلام عليكم
أنشأت برنامجا في الدلفي على شكل مخدم زبون و اردت من خلاله البحث في قاعدة البيانات الموجودة في ال sql كما يلي
بعد الاتصال الناجح بقاعدة البيانات اود البحث عن تواريخ في قاعدة البيانات من خلال فورم في دلفي حيث انني اضع edit1 و edit2 الاول اضع فيه التاريخ الاول و الثاني اضع فيه التاريخ الثاني و dataset و ADOQuery1 و اتحصل على جميع التواريخ التي هي بين التارخ الاول و الثاني في dbgrid
فماهي الجملة الصحيحة التي أكتبها في (TStrings) الخاص ب ADOQuery1 كي يتم البحث
وكذلك في فورم اخراود بمجرد كتابة الحروف الاولى لاي اسم يظهر في ال dbgrid جميع الاسماء التي المكونة من تلك الحروف مثللا عند كتابة الحروف الاولى محم تظهر لي في dbgrid اسم محمد و محمود وعند تكملة الكتابة محمد تختفي كلمة محمود
عذرا على الاطالة
و بارك الله فيكم
الرد
#2
اولا قم بانشاء بارامترين (a,b)في مكون adoquery من نوع ftString ثم اكتب هذا الكود

كود :
adoquery1.SQL.Text:='select * from table where date between :a and :b '; adoquery1.Parameters.ParamByName('a').Value:=datetostr(d1.Date); adoquery1.Parameters.ParamByName('b').Value:=datetostr(d2.Date); adoquery1.open;

بالتوفيق
الرد
#3
السلام عليكم
استخدم مكون DateTimePicker بدلا من EDIT

كود :
procedure TForm1.Button7Click(Sender: TObject); begin with ADOQuery1 do begin Close; SQL.Clear; SQL.text :=('SELECT * FROM TABLE where DATE between #'+FormatDateTime('mm/dd/yyyy',DateTimePicker1.date)+'#'+'and #'+FormatDateTime('mm/dd/yyyy',DateTimePicker2.date)+'#') ; Open; end; end;
الرد
#4
لم تنجح معي لانه لم يتم تحويل DateTimePicker1.date الى string و بالتالي لا يتعرف عليه ال sql هل من طريقة اخرى
الرد
#5
تحية طيبة
بما ان ADOQuery تملك الخاصية filter يمكن استعمالها مباشرة دون تعليمات sql
مثال
جدول يتكون من nom .date1
كود :
[align=left]select nom,date1 from table1[/align]
للفلترة حسب الاسم من الخاصية onChange ل edite1 نكتب الكود التالي
كود :
[align=left]procedure Form1.Edit1Change(Sender: TObject); begin IF edit1.GetTextLen<> 0 then begin ADOQuery1.Filter:='nom='''+Edit1.Text+'*'''; ADOQuery1.Filtered:=true; end else ADOQuery1.Filtered:=false; end;[/align]

للفلترة بين تاريخين
كود :
[align=left]procedure Tform1.Button1Click(Sender: TObject); begin ADOQuery1.Filter := '(Date1>='+QuotedStr(DateToStr(DateTimePicker1.Date))+') and (Date1<='+QuotedStr(DateToStr(DateTimePicker2.Date))+')'; end;[/align]
الرد
#6
حفظك الله و بارك فيك و في أهلك اخي tarek.inf شكرا على الاهتمام سأجرب و سأعلمك بالنتيجة

للتنبيه يجب اضافة للفلترة بين تاريخين في اخر الكود قبل ; end مايلي
ADOQuery1.Filtered:=true;
حتى تصبح النتيجة تامة و صحيحة
بارك الله فيكم ونفعكم و نفع الناس بعلمكم الى كل من
محمد الدرة
you_per7
tarek.inf
الرد
#7
كمال المجاني كتب :لم تنجح معي لانه لم يتم تحويل DateTimePicker1.date الى string و بالتالي لا يتعرف عليه ال sql هل من طريقة اخرى

أولا الحمد لله الذي وفقك للحل الصحيح أما فيما يخص تحويل التاريخ الى سترينغ فيمكن اضافة الامر datetostr
datetostr(DateTimePicker1.Date);
كما هو موضح في هذا الاستعلام من مشاركة الأخ "you_per7 "
procedure TForm1.Button7Click(Sender: TObjec
t);
begin

with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.text :=('SELECT * FROM TABLE where DATE between #'+datetostr(FormatDateTime('mm/dd/yyyy',DateTimePicker1.date))+'#'+'and #'+FormatDateTime('mm/dd/yyyy',DateTimePicker2.date)+'#') ;
Open;

end;
الرد
#8
بارك الله فيك و حفظك من كل مكروه شكرا على الاهتمام اخي makhlouf فيما يخص الكود الذي اعطاني اياه الاخ you_per7 و الذي اعطيتنيه انت الفرق بينهما هو في datetostr سأجربه
ولكم جزيل الشكر
الرد
#9
بارك الله فيكم جميعا ...
الرد


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


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