PDA

View Full Version : جستجوی دو درخواست با ADOQuery



kh1387
جمعه 06 دی 1387, 20:31 عصر
با سلام
دوستان عزیز
بنده می خوام با ADOQuery نام فرد و شماره ملی اش را بدهم و در بانک جستجو کرده و آنرا بیابد.
کد زیر رو هم نوشتم ولی نمی دونم چرا کوئری اش جواب نمی ده؟
نکته: txtSNPlane نام فرد و txtDestination شماره ملی فرض شود!
در ضمن در قسمت شماره ملی فرد txtDestination باید حتما Destination وارد شود و چنانچه شماره ملی وارد شود Errory بدین مضمون می گیرد:



ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'Select * From reservation Where SNPlane = '+ Trim(txtSNPlane.Text)+
'and Destination ='+Trim(txtDestination.Text)+'';
ADOQuery1.ExecSQL;
ADOQuery1.Open;
{ADOQuery1.Filtered:=false;
ADOQuery1.Filter:= 'SNPlane = '+Trim(txtSNPlane.Text);{+' and Destination = '+
Trim(txtDestination.Text)+'';
ADOQuery1.Filtered:=true; }
//ADOQuery1.SQL.Add('Select * From reservation Where SNPlane ='+'"'+Trim(txtSNPlane.Text)+'"'+' and Destination = '+'"'+Trim(txtDestination.Text)+'"');
if (ADOQuery1.Fields.Fields[0].AsString) <> '' then
begin
DBGrid.Columns[0].Field := ADOQuery1.Fields.Fields[0];
//DBGrid.Columns[2].Field := ADOQuery1.FieldByName('DateMove');
end
else begin
showMessage('.ÑæÇÒí ÈÇ Çíä ÔãÇÑå æ Èå Çíä ãÞÕÏ æÌæÏ äÏÇÑÏ');
//txtSNPassenger.SetFocus;
end;

shervin farzin
جمعه 06 دی 1387, 23:52 عصر
سلام
دو نکته در کدی که نوشته بودید به نظرم رسید که اونها رو اصلاح کردم.
حالا از این کد استفاده کنید

ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'Select * From reservation Where SNPlane = '+QuotedStr(Trim(txtSNPlane.Text))+' and Destination = '+QuotedStr(Trim(txtDestination.Text));
ADOQuery1.Open;
if ADOQuery1.Fields.Fields[0].AsString <> '' then
DBGrid.Columns[0].Field := ADOQuery1.Fields.Fields[0]
else
showMessage('.ÑæÇÒí ÈÇ Çíä ÔãÇÑå æ Èå Çíä ãÞÕÏ æÌæÏ äÏÇÑÏ');

نکته مهم این بود که شما در جدولتون احتمالا SNPlane و txtDestination رو از نوع String تعریف
کردید بنابر این ورودی های اونها هم در کد Sql باید بین دو علامت تگ ( ' ... ' ) قرار داشته
باشن . QuotedStr در کد بالا همین کار رو براتون انجام میده .
موفق باشید .

kh1387
شنبه 07 دی 1387, 14:43 عصر
خیلی متشکرم
بله دقیقا همین کار رو کرده بودم یعنی از نوع رشته ای در نظر گرفته بودم اما مشکلی که پیش اومده اینه که:
وقتی اسم و شماره ملی رو می دیم، هیچی رو بر نمی گردونه!
چرا؟
آیا اصلا این کد درسته؟
در اصل می خوام این الگوریتم رو پیاده سازی کنم که اگر ADOQuery ام از رکوردی پر شده بود اونها رو بریزه داخل DBGrid بنابراین کد زیر رو نوشتم.
دوستان لطف کنند بگویند این کد درسته؟ اگه نه چه کدی رو بنویسم؟
متشکرم

if (ADOQuery1.Fields.Fields[0].AsString) <> '' then
begin
DBGrid.Columns[0].Field := ADOQuery1.Fields.Fields[0];
//DBGrid.Columns[2].Field := ADOQuery1.FieldByName('DateMove');
end

خیلی ممنونم

shervin farzin
شنبه 07 دی 1387, 15:37 عصر
سلام
اگر منظورتون اينه كه در صورتي كه Select شما خروجي داشته باشه ، اونها رو در Grid ببينيد
ميتونيد به كمك يه DataSourec اطلاعات رو از AdoQuery وارد Grid كنيد به اين ترتيب كه اول
AdoQuery رو به Datasource و پس از اون Datasource رو به DBGrid متصل كنيد . در اين حالت
اگر خروجي Select مقدار برگردونه يا هيچ نتيجه اي نداشته باشه ، شما نتيجه رو در Grid خواهيد
ديد . براي چك كردن اين كه آيا Select نتيجه داشته يا نه ميتونيد از كد زير استفاده كنيد :

if ADOQuery1.RecordCount <> 0 then
begin
...
end;
موفق باشيد

bmanfy
یک شنبه 08 دی 1387, 12:40 عصر
خیلی متشکرم
بله دقیقا همین کار رو کرده بودم یعنی از نوع رشته ای در نظر گرفته بودم اما مشکلی که پیش اومده اینه که:
وقتی اسم و شماره ملی رو می دیم، هیچی رو بر نمی گردونه!
چرا؟


به نظر من دلیل اینکه چیزی برنمیگردونه این باشه که شما از = استفاده کرده اید . و هم چنین از And . فقط کافیه اینجا تو نامی که ذخیره کردی یا اون نامی که جستجو میکنی یه فاصله خالی اضافی خرده باشه .
خوب میتونید از لایک استفاده کنید و در ضمن در ایتدا و انتهای رشته ی مورد جستجوتون هم % بزارین اون وقت نشون میده .
.