PDA

View Full Version : اعمال حذف و ویرایش در دی بیگرید با کلیک روی عناصر...........؟



tik_tak
پنج شنبه 02 اسفند 1386, 18:58 عصر
باسلام
میخواستم

حذف :::::

وقتی دیبی گرید جدول ونشون میده کاربر با کلیک روی هر رکوردی که میخواد و بعد زدن دکمه دیلیت اون رکورد حذف بشه

ویرایش::::

با کلیک روی فیلدها و اعمال تغییرات در فیلدهای خود دی بی گرید وبعد زدن دکمه ثبت تغییرات اعمال شده در جدول سیو بشه ...
ممنون

tik_tak
پنج شنبه 02 اسفند 1386, 19:16 عصر
اگه با ADOQuery بانکت رو به DBGrid وصل کردی؛
حذف :


ADOQuery1.Delete;



نه...............................

dkhatibi
پنج شنبه 02 اسفند 1386, 19:40 عصر
از هرچی استفاده کنی متدهای Post ، Edit و Delete برای همین منظور در دیتاست شما وجود دارند.
کلا عمل ویرایش در dbgrid به طور خودکار انجام می شه و ذخیره سازی اون هم پس از رفتن به سطر بعد به طور خودکار انجام می شه!
برای حذف Ctrl+Delete به طور خودکار پشتیبانی می شه و در صورتیکه بخواهید از لید del استفاده کنید در رویداد InkeyPress همون Dbgrid متد delete رو فرا بخوانید.

tik_tak
پنج شنبه 02 اسفند 1386, 20:19 عصر
ROW CANNOT LOCATED FOR UPDATING.SOME VALUES MY HAVE BEEN CHANGED SINC IT WAS LAST READ.

تو جدول پیرو این خطا میاد

SYNDROME
پنج شنبه 02 اسفند 1386, 21:38 عصر
کمی توضیح دهید چه کار کرده اید.
دستور داخل ADOQuery و یا . . . را بگویید.
رکوردی را که می خواهید پاک کنید مثلا در جدول بانکتان فیلد کلید ندارید و امکان حذف رکورد وجود ندارد.
موفق باشید

tik_tak
پنج شنبه 02 اسفند 1386, 22:23 عصر
ّبینید سوال من اینه :

در یه دی بی گرید وقتی جدول نشون داد ه میشه
میخوام کاربر با کلیک مثلا روی سطر سوم و بعد کلیک روی باتون اون سطر حذف بشه.

درحالت ویرایش هم میخوام کاربر روی فیلد دلخواه روی هر سطری که بود کلیک کنه و ویرایش کنه و ثبت کنه .

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

ممنون

SYNDROME
جمعه 03 اسفند 1386, 08:18 صبح
با توضیحات شما همان دستور aDO.Delete جواب می دهد.
نگفتید آیا بانکتان فیلد کلید دارد یا نه؟
موفق باشید

Amir_Safideh
جمعه 03 اسفند 1386, 10:18 صبح
دوست غزیز tik_tak کدی که دوستان دادن باید کار کنه اگر کار نمیکنه یه احتمال میتونه در اینجا وجود داشته باشه و اون هم اینه که زمانی که شما میخواهید یه رکورد رو پاک کنید جدول دوم شما در حالت Edit یا Insert باشه یعنی این که شما تغییرات قبلی رو ذخیره نکردید و حالا دارید سعی میکنید که یه رکوردی رو حذف کنید که تغییر جدیدی رو به بانک ارسال کنید .
خوب برای رفع مشکل یه پیشنهاد بهت میکنم . برای ذخیره کرده اطلاعات فقط از دستور Post استفاده نکن این کد رو در زمان ذخیره اطلاعات اعمال کن .

try
ADOConnection1.BeginTrans;
ADOTable2.UpdateBatch;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
End;

این کد رو شما به جای ADOTable2.Post قرار بده و در ضمن مطمئن شو که در زمانی که کاربر میخواد یه رکورد رو حذف کنه جدول دوم شما اطلاعاتش رو قبلا ذخیره کرده باشه و در حالت Edit یا Insert نباشه .
خوب شاید بپرسی که چطور میشه فهمید که جدول دوم در حالت Edit یا Insert هست یا نه خوب این کار هم خیلی ساده انجام میشه .
فرض میکنیم که کاربر میره و روی دکمه Delete کلیک میکنه خوب ما قبل از این که برنامه به دستور Delete برسه یه کد کنترلی اضافه میکنیم که اگر جدول در حالت Edit یا Insert بود دستور Delete انجام نشه تا مشکلی پیش نیاد . این کد رو در رویداد OnClick مربوط به دکمه Delete قرار بده :

if ADOTable2.State in [dsEdit,dsInsert] then
ShowMessage('You should save your new information!')
else
begin
ADOTable2.Delete;
ADOTable2.UpdateBatch;
end;

موفق باشید.