PDA

View Full Version : سوال: مشكل در حذف ركورد جستجو شده



connector
شنبه 09 مرداد 1389, 12:53 عصر
با سلام
من با کد زیر عمل جستجو را انجام میدهم

adoQuery2.Active:=FALSE;
adoQuery2.SQL.Clear;
adoQuery2.SQL.Add('SELECT * ');
adoQuery2.SQL.Add('FROM Karfarma');
adoQuery2.SQL.Add('WHERE (LastName LIKE ''%'+ EDIT2.Text+'%'') ');
adoQuery2.ExecSQL;
adoQuery2.Active:=TRUE;
DBGrid1.DataSource:=DataSource2;حالا بعد از اینکه رکورد موردنظر پیدا شد وقتی از دستور adotable1.Delete برای حذف رکورد استفاده میکنم اولین رکورد موجود در دیتابیس حذف میشه و نه رکورد جستجو شده لطفا بفرمایید با چه کدی میتونم همون رکورد جستجو شده و یافته شده را حذف کنم؟
با تشكر

حمیدرضاصادقیان
شنبه 09 مرداد 1389, 13:39 عصر
سلام.دوست عزیز اولین نکته اینکه شما وقتی داری از دستور Select استفاده میکنی نیازی نیست کوئری رو Execute کنی. همون که Active:=true رو انجام میدی کفایت میکنه.
برای Delete شما اول داری با استفاده از Adoquery رکوردت رو جستجو میکنی بعد میای روی Adotable اونو Delete میکنی؟!!!!! این دوتا چه ارتباطی باهم دارند.
اگر میخواهی همین رکوردی که جستجو کردی رو حذف کنه به جای Select * from کافیه بنویسی Delete from .
در انتها هم Adoquery2.execsql; بعد هم یکبار Adotable رو باز و بسته میکنی.
همین.
موفق باشید.

vcldeveloper
یک شنبه 10 مرداد 1389, 15:50 عصر
علاوه بر توضیحات آقای صادقیان؛ وقتی با SELECT از بانک کوئری می گیرید، نتیجه حاصله یک یا چند رکورد هست. اگر شما می خواید یکی از رکوردهای برگشت داده شده را حذف کنید، باید اول کرسر دیتاست را روی آن رکورد منتقل کنید. متدهایی مثل Delete یا Edit روی رکورد فعلی دیتاست عملیات انجام میدند. وقتی هم که یک دیتاست باز میشه، به طور خودکار اولین رکورد آن، رکورد فعلی هست.

پس یا باید رکورد یا رکوردهای مربوطه را با استفاده از دستور DELETE در SQL حذف کنید، یا اگر میخواید از متد Delete مربوط به Dataset در دلفی استفاده کنید، باید ابتدا بر روی رکورد مورد نظر حرکت کنید، و سپس متد Delete را اجرا کنید.