ورود

View Full Version : مشکل در جستجو



dany193
سه شنبه 03 اردیبهشت 1387, 18:31 عصر
دوستان عزیز و اساتید بزرگ
سلام
من یه مشکل خیلی بزرگ(البته برای من بیسواد)دارم خواهش میکنم کمکم کنید
1- من یک بانک اکسس دارم و برای آن یک فرم درست کردم که داخل آن گزینه ای را
گذاشتم برای جستجو متاسفانه و قتی جستجو می کنم فقط یک مورد را نشان می دهد
مثال : اگه دو نفر به نام مهدی وجو داشته باشد فقط اولی را نشان می دهد
چگونه می توانم کد را توری بنوسیم که با زدن دوباره کلید جستجو هم نام دوم نمایش داده شود
کد جستجو را به این گونه نوشته ام

procedure TForm2.Button1Click(Sender: TObject);
begin
ADOTable1.Append;
ADOTable1.FieldbyName('sh').AsString:=edit1.text;
ADOTable1.FieldbyName('n').AsString:=edit2.text;
ADOTable1.FieldbyName('f').AsString:=edit3.text;
ADOTable1.FieldbyName('p').AsString:=edit4.text;
ADOTable1.FieldbyName('t').AsString:=edit5.text;
ADOTable1.post
end;


من خیلی مبتدی هستم خواهش می کنم راهنمایی کنید موضوع برای من حیاطی است
در صورت امکان اگر پرویی نیست کد صحیح را برایم بگذارد
2- چگونه می توانم مثلا نام - نام خانوادگی - نام پدر را طوری کلیدی کنم که اگر سه مورد تکراری بود پیغام خطا بدهد

با تشکر از همه دوستان و اساتید محترم

حمیدرضاصادقیان
سه شنبه 03 اردیبهشت 1387, 19:21 عصر
سلام.دوست عزیز این دستوری که شما نوشتی کاملا غلط هست.این دستور برای اضافه کردن هست نه جستجو!!!!!!1
برای جستجو شما میتوانید از دستورAdotable1.locate استفاده کنی.
اینم یک نمونه کد برای جستجو


with ADOTable1 do
Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);

این در راهنمای خود دلفی بود.
اینم یک لینک کامل که قشنگ توضیح داده.
http://delphi.about.com/od/database/l/aa052901a.htm

dany193
چهارشنبه 04 اردیبهشت 1387, 08:42 صبح
خیلی خیلی ببخشید من کد رو اشتباه نوشتم کد اینه
procedure TForm2.Button4Click(Sender: TObject);
begin
ADOTable1.First;
ADOTable1.Locate('sh',edit6.Text,[]);
ADOTable1.Locate('n',edit7.Text,[]);
ADOTable1.Locate('f',edit8.Text,[]);
ADOTable1.Locate('p',edit9.Text,[]);
end;
ضمن تشکر استاد آقای حمید رضا صادقیان متاسفانه ارور میده عکس ضمینه کردن
sh شماره پرونده
n نام
f نام خانوادگی
p نام پدر

dany193
چهارشنبه 04 اردیبهشت 1387, 08:48 صبح
ببخشید عکس جا موند

حمیدرضاصادقیان
چهارشنبه 04 اردیبهشت 1387, 12:03 عصر
سلام.ببینید دستور locate وقتی رکوردی رو پیدا کنه روی اولین ردیف اون می ایسته.
شما میتونی از ترکیب چند فیلد استفاده کنی.
مثال


Adotable1.Locate('sh;n;f;pa',vararrayof([edit1.text,edit2.text,edit3.text,edit4.text]),[])

dany193
چهارشنبه 04 اردیبهشت 1387, 13:55 عصر
دوست عزیز استاد محترم
من واقعا از شما ممنون هستم
ولی متاسفانه درست نشد دلیلش هم بیسوادی منه
من می خواستم جسارت کنم و برنامه را با سور برای شما بزارم در صورت امکان
شما سورس برنامه را ببینید و مشکل من رو حل کنید

برای یاد آوری:
1- من یک بانک اکسس دارم و برای آن یک فرم درست کردم که داخل آن گزینه ای را
گذاشتم برای جستجو متاسفانه و قتی جستجو می کنم فقط یک مورد را نشان می دهد
مثال : اگه دو نفر به نام مهدی وجود داشته باشد فقط اولی را نشان می دهد
چگونه می توانم کد را توری بنوسیم که با زدن دوباره کلید جستجو هم نام دوم نمایش داده شود
2- چگونه می توانم مثلا نام - نام خانوادگی - نام پدر را طوری کلیدی کنم که اگر سه مورد تکراری بود پیغام خطا بدهد

باز هم از لطف و عنایت شما کمل تشکر را دارم

حمیدرضاصادقیان
چهارشنبه 04 اردیبهشت 1387, 14:35 عصر
سلام.خوب برای این مورد شما نمیتونی از locate استفاده کنی.شما باید از دستورات sql استفاده کنی.
مانند

with adoquery1 do
begin

sql.clear;
sql.add('select * from table1 where name=:nam and family=:famil and fathername=:fn');
parameters.parambyname('nam').value:=edit1.text;
parameters.parambyname('famil').value:=edit2.text;
parameters.parambyname(fn').value:=edit3.text;
open;
end;


فقط باید یک datasource هم بزاری و adoquery رو به اون وصل کنی بعد هم یک dbgrid قرار بدی و خاصیت datasoure رو به این دیتا سورسی که گذاشتی وصل کنی.
اگر هر سه تا فیلدت مانند هم باشه کاملا بهت نمایش میده.
حتی میتونی به جای and از or استفاده کنی که در اینصورت اگر هرکدوم از شرطهات برقرار باشه رکورد مورد نظر رو بهت نمایش میده.

dany193
چهارشنبه 04 اردیبهشت 1387, 14:50 عصر
می دونم خیلی جسارته
ولی میشه برنامه اصلاح شدشو برام بزاری
من اینرو هم با هزار زحمت از روی کتاب و سایتها نوشتم
برام خیلی حیاطی کمکم کن لطفا
این مورد رو میخوام(or استفاده کنی که در اینصورت اگر هرکدوم از شرطهات برقرار باشه رکورد مورد نظر رو بهت نمایش میده)

حمیدرضاصادقیان
چهارشنبه 04 اردیبهشت 1387, 16:05 عصر
اینم نسخه اصلاح شده

dany193
شنبه 07 اردیبهشت 1387, 07:42 صبح
سلام دوست عزیز
متاسفانه وقتی فرم دوم را می آورم از برنامه دلفی خارج می شه
و فرم دوم را نمایش نمی ده

حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 10:01 صبح
سلام.خوب شما زحمت بکش کانکشن برنامه ات رو درست کن.من براساس سیستم خودم اونو تغییر دادم.شما مجددا اونو اصلاح کن.

dany193
شنبه 07 اردیبهشت 1387, 11:57 صبح
دوست عزیز
با عرض پوزش
می دانم خیلی اذیتت کردم
ولی گفتم من خیلی مبتدی هستم
منظور از کانکشن چیه
خیلی خیلی ببخشید

حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 13:45 عصر
خواهش میکنم.شما وقتی یک adoconnection روی فرم قرار دادی ، در Connection String شما به فایل Access وصل شدی.من اونو برای سیستم خودم تنظیم کردم.
یعنی رو Adoconnection کلیک کن و در پنجره Properties روی گزینه ConnectionString کلیک کن و جایی که فایل خودت قرار داره رو بهش بده.
موفق باشی.

dany193
یک شنبه 08 اردیبهشت 1387, 11:47 صبح
ممنون از راهنمای یتان
ولی دوست عزیز فرم دوم اصلا باز نمی شه که من بخوام کانکشنش رو تعریف بکنم
یعنی وقتی روی فرم دوم می روم از برنامه دلفی خارج می شه و هیچ پیغامی هم نمی ده
با تشکر از لطف جنابعالی

حمیدرضاصادقیان
یک شنبه 08 اردیبهشت 1387, 15:23 عصر
سلام.من این برنامه رو روی یک سیستم دیگه که اصلا فایل دیتابیسش نبود اجرا کردم فقط از کانکشن استرینگ خطا گرفت بعد هم فرم رو باز کرد.

dany193
سه شنبه 10 اردیبهشت 1387, 07:48 صبح
متاسفانه دوست عزيز به هيچ عنوان فرم دوم نمايش داده نمي شه و از برنامه خارج ميشه