لا توجد خاصية find في ado ولذلك حاولت استخدام seek بدلا من ذلك ولكن للاسف لم اوفق هل من طريقة .
هل من حل لموضوع find,seek في Ado
السلام عليكم
اخي العزيز استخدم Locate فهي ال Method المفضلة لدي في BDE و ADO فهي ذكية بما فيها الكفاية وميزتها انها تعمل في حال عدم وجود فهرس، واذا كان الفهرس موجود فسوف تستخدمه مما يؤدي على زيادة السرعة
لا تحزن:
إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.
لا تحزن:
فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.
ممكن مثال مرفق الله يحفظك
يوجد مثال مع الأمثلة المرفقه مع Delphi6
C:Program FilesBorlandDelphi6DemosAdoAdoTest
شكرا لك
يمكنك اخي الكريم ايضا استخدام اجراءات SQL
مثال :
procedure TfrmPhone.Button3Click(Sender: TObject);
begin
Close;
end;
procedure TfrmPhone.Button1Click(Sender: TObject);
begin
if Button1.Caption ='ابحث' then
begin
StatusBar1.Panels[1].Text := 'جاري البحث...';
Application.ProcessMessages;
MyData.QFindR.Close;
MyData.QFindR.SQL.Clear;
MyData.QFindR.SQL.Add('SELECT * FROM Phones WHERE Name LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR WPhone LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR Fax LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR Mobile LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR Address LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR HPhone LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR Email LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('OR Remark LIKE ' + '"%'+Edit1.Text+'%"');
MyData.QFindR.SQL.Add('ORDER BY Name');
MyData.QFindR.Open;
if MyData.QFindR.RecordCount <> 0 then
begin
MyData.QFindR.First;
GetData;
StatusBar1.Panels[1].Text := ' تمت عملية البحث بنجاح ، تم العثور على '+IntToStr(MyData.QFindR.RecordCount) + ' سجل/سجلات';
StatusBar1.Panels[0].Text := 'انت الان تستعرض السجل رقم ' + IntToStr(MyData.QFindR.RecNo);
if MyData.QFindR.RecordCount > 1 then
begin
Button1.Caption :='التالي';
Button1.SetFocus;
Exit;
end;
end else begin
StatusBar1.Panels[1].Text :=' لم يتم العثور على أي سجل يحتوي على '+ chr(13) + '" '+ Edit1.Text + ' "';
StatusBar1.Panels[0].Text := '';
DoNull;
ShowMessage(' لم يتم العثور على أي سجل يحتوي على '+ chr(13) + '" '+ Edit1.Text + ' "');
Edit1.SelectAll;
end;
end;
if (Button1.Caption ='التالي') and (not MyData.QFindR.Eof) then
begin
MyData.QFindR.Next;
GetData;
StatusBar1.Panels[0].Text := 'انت الان تستعرض السجل رقم ' + IntToStr(MyData.QFindR.RecNo);
end;
end;تقبل الله طاعتكم وصيامكم واسعدكم بالعيد
شكراً لجميع الاخوة وخاصة الاخ محمد نسمان
هذا مثال بعد التجربة بإستخدام locate
adotable1.Locate('Day',edit1.text,[loPartialKey
([
حيث Day اسم الحقل المراد البحث فيه ويمكن علي اكثر من حقل
السلام عليكم
الأخ Midas
هذا مثال مبسط ل Locate وفي حالة عدم وجود السجل سوف يظهر رسالة
procedure TForm1.Button1Click(Sender: TObject);
begin
if not AdoTable1.Locate('FirstName',Edit1.Text,[]) then
ShowMessage('السجل غير موجود');
end;المثال يبحث عن الاسم المطابق ان اردت البحث على جزء من الاسم اضف loPartialKey في المعامل الثالث مثل مثال الأخ عبدالمجيد لكنه لا يعطي نفس امكانيات جمل ال SQl فمثلا ان اردت ان تبحث عن اي سجل قيمته تنتهي بكلمة معينة لا يمكن ذلك
يمكن ايضا البحث على قيمتين في حقلين مثل
procedure TForm1.Button2Click(Sender: TObject);
begin
if not AdoTable1.Locate('FirstName; LastName',VarArrayOf([Edit1.Text,Edit2.Text]),[]) then
ShowMessage('السجل غير موجود');
end;مع تحياتي
لا تحزن:
إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.
لا تحزن:
فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.
بارك الله فيكم
هذا الموضوع مغلق.