PDA

View Full Version : dbgrid و دسترسی به محتوای رکورد انتخابی



saba32
پنج شنبه 30 خرداد 1392, 11:55 صبح
سلام و وقت همگی بخیر

می خوام در dbgrid به رکورد انتخابی کاربر دسترسی داشته باشم یعنی مثلا مقدار فیلد city رو بگیرم. روی یه bottom کد زیر رو نوشتم
با فرض بر اینکه city اولین ستون از dbgrid هست و چنین فیلدی هم در جدول داخل db وجود داره

label1.caption:=DBGrid1.SelectedRows.Items[0] ;
این کد چرا غلطه و درستش چیه؟
خطا: list index out of bounds(0)
مرسی

Mahmood_M
پنج شنبه 30 خرداد 1392, 13:49 عصر
DBGrid به یک بانک اطلاعاتی وصل شده ، از طریق همون بانک باید به رکورد دسترسی داشته باشید ، مثلا :

ADOTable.FieldByName('City').AsString
مقادیر پیش فرض فیلدهای بانک اطلاعاتی مقادیر انتخاب شده در DBGrid هستند

alaveh
جمعه 31 خرداد 1392, 03:52 صبح
میتونی یک DBEdit رو فرمت قرار بدی و وصلش کنی به فیلدی که میخوای و مقدار Visible رو هم False کنی که دیده نشه . اینجوری با تعویض رکورد توسط کاربر روی DBGrid مقدار DBEdit هم خودش تغییر پیدا میکنه به همون رکوردی که کاربر انتخاب کرده و میتوی با دستور DBEdit1.Text مقدارش رو بخونی .

یوسف زالی
جمعه 31 خرداد 1392, 11:54 صبح
میتونی یک DBEdit رو فرمت قرار بدی و وصلش کنی به فیلدی که میخوای و مقدار Visible رو هم False کنی که دیده نشه

خیلی راه بدیه.
این کار اصلا اصولی نیست.
به طور پیش فرض دی بی گرید دیتاست رو لوکیت می کنه.
ممکنه شما مولتی سلکت کرده باشید، اون وقت باید چند تا دی بی ادیت بگذارید؟؟

برای مولتی سلکت به راجتی می تونید از خاصیت BookMark استفاده کنید.

ADO1.BookMark := DBGrid1.SelectedRows[i]; // in a loop

با این کار در حلقه دیتاست روی ردیفی ایست می کنه که دی بی گرید بهش اشاره می کنه.

هرگز از اجزای متصل به دیتاست برای "فن زدن" استفاده نکنید!

alaveh
جمعه 31 خرداد 1392, 15:34 عصر
خیلی راه بدیه.
این کار اصلا اصولی نیست.
به طور پیش فرض دی بی گرید دیتاست رو لوکیت می کنه.
ممکنه شما مولتی سلکت کرده باشید، اون وقت باید چند تا دی بی ادیت بگذارید؟؟

برای مولتی سلکت به راجتی می تونید از خاصیت BookMark استفاده کنید.

ADO1.BookMark := DBGrid1.SelectedRows[i]; // in a loop

با این کار در حلقه دیتاست روی ردیفی ایست می کنه که دی بی گرید بهش اشاره می کنه.

هرگز از اجزای متصل به دیتاست برای "فن زدن" استفاده نکنید!
متوجه نشدم مولتی سلکت منظورتون چیه . یعنی توی DBGrid چند خط با هم سلکت بشه ؟ یا توی DataSet منظورتونه ؟
ایرادی به نظر من نمیرسه . دارم استفاده میکنم و توی تستهای اولیه هم مشکلی ندیدم . اگر ایراد خاصی داره با یک مثال توضیح بدین که من هم استفاده نکنم .
چون خیلی ساده و راحت به هر فیلدی که نیاز هست میتونم دسترسی داشته باشم . حیفه که اگر مشکلی نداشته باشه از این راه استفاده نشه .
از دید کاربر هم که مخفی هست و کاربر نمیتونه توش دخالتی داشته باشه .
من خودم تقریبا فقط کارهام رو با کوئری انجام میدم و دیتاستهام کوئری هست . هر وقت هم که نیاز به کلید اصلی دارم و نمیخوام توی گریدم نمایش داده بشه از این راه استفاده میکنم . در مورد چند تا DBEdit هم بله بعضی فرمها هستند که نیاز به 3 یا 4 تا هم بوده و قرار دادم و با انتخاب خط جدید در DBGrid همه اونا هم عوض میشن .

یوسف زالی
جمعه 31 خرداد 1392, 23:07 عصر
منظور من مولتی سلکت روی گریده.
روش روش خوبی نیست. مثل اینه که برای نگهداری یک متغیر از نوع رشته بیاید یک لیبل روی فرم بگذارید و هایدش کنید.
البته جواب هم می ده اما برنامه بهینه نیست. در کارهای دیتابیسی یکم تاثیر روی کندی هم داره. سربار اضافه ای داره. دارید برای یک لوکیت داده، یک شی می سازید.
مثل این می مونه که به جای If از GoTo استفاده کنیم. اصلا اشکالی نداره و هردو هم جواب می ده.
اگر راهی وجود نداشت، کلک خوبیه، ولی وقتی راه اصولیش وجود داره قشنگ نیست.
برنامه نویس خوب اونیه که در شرایط مختلف بهترین بهینگی رو پیدا کنه.
البته این به معنی این نیست که من خودم برنامه نویس خوبی باشم، در مورد مطلبی که ازش اطلاع دارم، حرف زدم.
موفق باشید.