ورود

View Full Version : event مربوط به تغییر رکورد در DBGRID



kheyri
سه شنبه 17 بهمن 1385, 11:06 صبح
سلام دوستان.
من یک DBGRID دارم که اطلاعاتشو از یک ADOQuery میگیره . میخوام وقتی رکورد جاری رو روی DBGRID تغییر میدم یک Query دیگه بر اساس رکورد جاری اجرا بشه . ولی هیچ event مناسبی در DBGrid پیدا نکردم که کوئری رو توش بنویسم که با تغییر رکورد کوئری دوم اجرا بشه. البته اینو بگم که با Event مربوط به OnCellClick تونستم اینکارو بکنم ولی با این روش نمیشه با کیبرد ( کلیدهای جهت ) کوئری دوم رو اجرا کرد. امیدوارم منظورمو رسونده باشم.
اگر راه حل مناسبی وجود داره لطفاً منو راهنمایی بفرمائید.

m-khorsandi
سه شنبه 17 بهمن 1385, 12:50 عصر
از Eventهای DataSet متصل به DBGrid استفاده کن.

kheyri
سه شنبه 17 بهمن 1385, 14:18 عصر
ممنون از راهنمائیتون. از OnDataChange مربوط به Datasource استفاده کردم مشکل حل شد. خیلی ممنونم. ولی یه مشکل دیگه پیش اومد و اون اینه که وقتی روی DBGride اسکرول میکنم و به رکورد آخر میرسم ، کوئری خیلی خوب اجرا میشه ولی وقتی کلید جهت پائین رو میزنم و DBGride به EOF میرسه ،کوئری دوم ارور میده. حالا چطور میشه این اشکال رو رفع کرد؟

m-khorsandi
سه شنبه 17 بهمن 1385, 14:20 عصر
پیغام خطا رو بنویسید!

kheyri
سه شنبه 17 بهمن 1385, 14:52 عصر
سلام. تصویر پنجره خطا رو در پست قبلی اضافه کردم. به نظر میاد وقتی DBGridبه EOF میرسه کوئری دوم نمیتونه ( مقدار Null رو که از مقدار فیلد مربوطه از DBGrid برمیگرده) رو تبدیل به مقدار مورد نیاز در کوئری خودش بکنه.
در اینجا DBGrid اطلاعاتشو از Adq2 میگیره و من روی مقدار فیلد Shobe یک کوئری دیگه به اسم Adq1 نوشتم . دستورش هم به شکل زیر هست.


dm.adq1.SQL.Text:='SELECT * FROM KOL WHERE Shobe=' + inttostr(dm.Adq2.fieldbyname('shobe').Value);

m-khorsandi
سه شنبه 17 بهمن 1385, 15:17 عصر
قبل از این دستور، مقدار این فیلد رو چک کن و اگه Null نبود ادامه بده،
مثلاً :


if not dm.Adq2.fieldbyname('shobe').isnull then
dm.adq1.SQL.Text:='SELECT * FROM KOL WHERE Shobe=' + inttostr(dm.Adq2.fieldbyname('shobe').Value);

یا به هر روش دیگه ای.

kheyri
سه شنبه 17 بهمن 1385, 15:39 عصر
خیلی ممنون جناب خرسندی. مشکل کاملا حل شد.