View Full Version : search with adoquery
shining_eye
سه شنبه 16 شهریور 1389, 13:01 عصر
سلام من واسه سرچ توdbgrid م این کد رو تو باتن سرچ نوشتم ولی نمی دونم چرا error میده؟(در ضمن adoquery که می خوام activeش روtrueکنم error میده که missing sql prpoperty) آیا باید یه کد دیگه ای هم اضافه کنم
AdoQuery1.close;
ADOQuery1.SQL.Text := 'select * from cdtable where box_number = '+Edit1.Text
+'or cd_number = '+Edit2.Text
+'or cd_name = '+QuotedStr(Edit3.Text)
+'or cd_content = '+QuotedStr(Edit4.Text);
ShowMessage(ADOQuery1.SQL.Text);
AdoQuery1.Open
hadisalahi2
سه شنبه 16 شهریور 1389, 13:23 عصر
اول اینکه فکر میکنم فاصله های مورد نیاز رو برای اتصال رشته ها رعایت نکردید.
و دوم اینکه برای اجرا باید کوئری رو باز یا فعالش کنید با یکی از دستورات زیر.
در ضمن ShowMessage(ADOQuery1.SQL.Text); دیگه زیادیه
Adoquery1.open;
AdoQuery1.Active:=True
shining_eye
سه شنبه 16 شهریور 1389, 13:43 عصر
openکه کردم؟؟؟فاصله رو چه کارش کنم؟اون errorکه داده واسه چیه؟
nilidelphi
سه شنبه 16 شهریور 1389, 15:06 عصر
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Add( 'select * from TBLname where FLDname = '+#39+Edit1.Text+#39+');
AdoQuery1.Open;
دوس عزیز باید از این کد استفاده کنی یا محتوای Edit رو فرمتش عوض کنی.
hadisalahi2
سه شنبه 16 شهریور 1389, 16:41 عصر
از پارامتر استفاده کن
AdoQuery1.close;
ADOQuery1.SQL.Text := 'select * from cdtable where box_number =:a or cd_number =:b or cd_name =:c ';
ADOQuery1.Parameters.ParamByname('a').value:=Edit1 .Text;
ADOQuery1.Parameters.ParamByname('b').value:=Edit2 .Text;
.
.
.
ADOQuery1.open;
برای هر مقدار هر فیلدت میتونی یک پرامتر تعریف کنی
یا حق
shining_eye
چهارشنبه 17 شهریور 1389, 09:31 صبح
من جفت دستور ها رو نوشتم ولی بازم ERROR می ده منون می شم اگر یه راهنماییم کنید ببینم ایراد کار من کجاست فایلم رو میفرستم تا شاید شما بتونید بگید ایراد جستجوم کجاست
nilidelphi
سه شنبه 23 شهریور 1389, 12:01 عصر
دوست گرامی من پروژه تون دانلود کردم و بخوبی متوجه مشکل شما شدم.
من نمیدونم شما چقدر از دلفی اطلاعات ئارین ولی بنظر من ساختن این تاپیک واقا یک کار بیهوده بود...؟؟؟؟؟
چرا...؟؟؟؟
چون شما اصلا تو برنامتون ADOQuery نذاشتین که حالا بخواهین برا کوئری کد بنویسین!!!!!!
شما از ADOTable استفاده کردین برای جستجو در تیبل باید از کد زیر استفاده کنید که زیاد هم کد جالب و برنامه نویس پسند و حرفه اتی نیست و بهتره از کوئری و اون کد هایی که دوستان گذاشتن و البته همشونم درسته استفاده کنید .
و اما کد مربوط به تیبل:
ADOTable1.DisableControls;
ADOTable1.First;
while not ADOTable1.Eof do
begin
if ADOTable1cd_name.Value=edit3.Text then
break;
ADOTable1.Next;
end;//end of while
ADOTable1.EnableControls;
موفق باشید.
Mahmood_M
پنج شنبه 25 شهریور 1389, 04:28 صبح
استفاده از عباراتی مثل " Error میده " یا " جواب نمی ده " یا " کار نمی کنه " یا ... هیچ اطلاعاتی راجع به مشکل شما به کاربری که می خواد جواب بده ، نمیده ، پس برای اینکه جواب بهتر و کاملتری بگیرید سعی کنید مشکلتون رو بهتر توضیح بدید ...
مثلا وقتی دستور زیر رو اجرا می کنید چه مشکلی پیش میاد ؟ هیچ اتفاقی نمی افته ؟ پیغام خطا نمایش داده میشه ؟ برنامه هنگ میکنه ؟ یا .. ؟؟
if (length(Edit1.Text)>0) or (length(Edit2.Text)>0) or (length(Edit3.Text)>0)or (length(Edit4.Text)>0)then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where box_number = '+Edit1.Text+'or cd_number ='+Edit2.Text+'or cd_name Like '+QuotedStr('%'+Edit3.Text+'%')+'or cd_content Like '+QuotedStr('%'+Edit4.Text+'%');
ADOQuery2.Open;
exit;
end;
موارد زیر رو چک کنید :
شما توی شرطهاتون با OR مقدارها رو چک می کنید ، فرض کنید فقط مقداری رو درون Edit4 ثبت کردید ، در این صورت کد شما اجرا میشه ولی مقداری برای Edit2 وجود نداره تا در دستور SQL مقدار فیلد cd_number برابر با Edit2.Text قرار بگیره ، درواقع رکوردهایی انتخاب میشن که مقدار cd_number برای اونها خالی باشه !
سعی کنید فاصله ها رو در دستورات SQL بین مقادیر و کلمات کلیدی مثل Or یا And یا ... رعایت کنید ، مثلا در دستور بالا بعد از مقدار درون Edit و کلمه ی کلیدی Or فاصله ای نیست ...
نکته ی آخر اینکه استفاده از پارامترها به جای مقادیر Edit ها میتونه خوانایی کد رو بهتر کنه ...
موفق باشید ...
shining_eye
پنج شنبه 25 شهریور 1389, 09:35 صبح
نه error میده نه خارج می شه
فقط وقتی اجرا می کنم بر اساس فقط 2 مقدار search می کنه حالا مهم نیست کدوم رو اول وارد کردیم
مثلا من edit4, edit3, edit2, edit1, رو رمم دارم اگه مثلا به ترتیب مقادیر edit 3بعد edit4وبعدedit2را وارد کنم مره بر اساس edit2 ,edit3 سرچ می کنه اصلا مقادیر edit4 رو در نظر نمی گیره.حتی اگه مقدار edit4 موجود نباشه ولی مقادیر edit2,edit3موجود باشه میره اون مقادیر رو می آره درصورتی که نباید وقتی edit4موجود نیست چیزی رو بیاره چون and گذاشتم.
shining_eye
یک شنبه 04 مهر 1389, 09:29 صبح
قبلا گفته بودم که من یه data base دارم که با sqlserver2000نوشتم که به delphi7ارتباطش دادم که با استفاده از stored procedure عملیات حذف ودرج و ویرایش رو انجام می ده.ولی من تو نوشتن سرچ به مشکل بر خوردم.من می خوام بتونم روی همه فیلدهام (دونه دونه مثلا با وارد کردن فقط مقدار یکی از edit ها که رو فرمم گذاشتم بتونم رو dbgrid م سرچ کنم و همچنین بتونم با وارد کردن 2 یا 3 تا از edit هایی که دارم بتونم سرچ رو انجام بدم ) الان من تونستم سرچ تکی روی یکی از edit ها و سرچ روی 2 تا از edit هام رو انجام بدم ولی برای سرچ روی 3 ویا 4 تا edit مشکل دارم یعنی به واقع اصلا سرچ رو که برای 3 تا edit که نوشتم کاری که می کنه انه که فقط بر اساس 2 تا از edit ها سرچ می کنه اونم اون 2تا edit که قبل تر باشن یعنی مثلا اگه edit1,edit2,edit3, edit4 فرمم داشته باشم اگه مقدار به edit 1,edit2 , edit4بدم بعد کلید سرچ رو بزنم می ره فقط بر اساس edit 1 , edit2 سرچ می کنه و اصلا مقدار edit 4 رو در نظر نمی گیره.چه مقدارش موجود باشه چه نباشه.
حالا امیدوارم توضیحاتم کامل شده باشه تا بلاخره یه راه حل واسه مشکلم پیدا کنم.ممنون می شم اگه بگید کجای کد هام اشتباه؟
procedure TForm2.search2Click(Sender: TObject);
begin
if(length(Edit1.Text)=0) and (Length(Edit2.Text)=0) and (Length(Edit3.Text)=0)and(Length(Edit4.Text)=0)the n
begin
ADOQuery2.Close;
ADOQuery2.sql.Text:='select * from cdtable';
ADOQuery2.Open;
exit;
end;
if(Length(Edit1.Text)>0) and (Length(Edit2.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where box_number= '+Edit1.Text+'and cd_number ='+Edit2.Text;
ADOQuery2.Open;
exit;
end
else if(Length(Edit1.Text)>0) and (Length(Edit3.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where box_number= '+Edit1.Text+'and cd_name Like '+QuotedStr('%'+Edit3.Text+'%');
ADOQuery2.Open;
exit;
end
else if(Length(Edit1.Text)>0) and (Length(Edit4.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where box_number= '+Edit1.Text+'and cd_content Like '+QuotedStr('%'+Edit4.Text+'%');
ADOQuery2.Open;
exit;
end
else if(Length(Edit2.Text)>0) and (Length(Edit3.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where cd_number= '+Edit2.Text+'and cd_name Like '+QuotedStr('%'+Edit3.Text+'%');
ADOQuery2.Open;
exit;
end
else if(Length(Edit2.Text)>0) and (Length(Edit4.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where cd_number= '+Edit2.Text+'and cd_content Like '+QuotedStr('%'+Edit4.Text+'%');
ADOQuery2.Open;
exit;
end
else if(Length(Edit3.Text)>0) and (Length(Edit4.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where cd_name like '+QuotedStr('%'+Edit3.Text+'%')+'and cd_content Like '+QuotedStr('%'+Edit4.Text+'%');
ADOQuery2.Open;
exit;
end;
end;
اینم کدهام که رو 3 تا edit نوشتم و کار نمی کنه
else if (Length(Edit1.Text)>0) and (Length(Edit2.Text)>0 ) and (Length(Edit3.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where box_number = '+ Edit1.Text +'and cd_number = '+ Edit2.Text +'and cd_name like '+ QuotedStr('%'+ Edit3.Text +'%');
ADOQuery2.Open;
exit;
shining_eye
سه شنبه 06 مهر 1389, 09:22 صبح
سلام ببخشید منم یه مشکلی تو جستجو دارم . کدم برای 2 تا and جواب درست میده ولی وقتی 3 تا رو andمی کنم درست کار نمی کنه میره بر اساس 2 تا مقداری که زودتر وارد شده باشند سرچ می کنه مشکل کدم کجاست؟
else if (Length(Edit1.Text)>0) and (Length(Edit2.Text)>0 ) and (Length(Edit3.Text)>0) then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select * from cdtable where box_number = '+ Edit1.Text +'and cd_number = '+ Edit2.Text +'and cd_name like '+ QuotedStr('%'+ Edit3.Text +'%');
ADOQuery2.Open;
exit;
aminrashid
پنج شنبه 22 مهر 1389, 19:08 عصر
به نام خدا
سلام
من همیشه فقط بحث ها را چک می کردم و لی حالا می خواهم راهنمایی کنم .
در هر کوئری که شما به کار می برید باید :
1 - اولین کاری که باید کنید این است که کوئری حتما بسته شود .
AdoQuery.close;
2- محتویات اسکیو ال کوئری باید پاک شود .
AdoQuery.clear;
3- به اسکیو ال کوئری داده اضافه شود .
ADOQUERY.Sql.ADD ('select * From BankName Where FieldName Like' +''''+'%'+ Trim(edit1.text)+'%'+'''')
4- درصورتی که خواستید به بقیه ادیت باکسها هم سرچ بدهید کافی است کد زیر را تکرار کنید .
AdoQuery.sql.append('And FieldName Like' +'''' + '%'+ Trim(Edit2.Text)+ '%'+'''')
5-کوئری را باز کنید و نتیجه را ببینید .
ADOQUERY.open
اگر مشکل حل شد که ان شا اله صد در صد حل می شود یه خدا پدر بیامرزی بفرست برای من و اونی که 10 سال پیش این کد را به من گفت
MOJTABAATEFEH
جمعه 03 دی 1389, 14:10 عصر
این درسته ولی تحت شبکه ترافیک رو بالا می بره وقتی برای تایپ هر کاراکتر یک دستور بازیابی ارسال بشه من جایی دیدم شبیه همین کار رو انجام میداد ولی فکر خود داده های بازیابی شده رو فیلتر میکرد ولی Locate رکورد جستجو شده رو به عنوان رکورد فعال در نظر میگیره و فیلتر نمیکنه با خاصیت فیلتر هم میشه یک کارهایی کرد کسی می دونه برای سرچ بر اساس چندتا فیلد باید چکار کرد؟ چون به صورت پویا هست و معلوم نیست کاربر چه ترکیبی از فیلدها رو برای جستجو انتخاب میکنه
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.