PDA

View Full Version : Master/Details در DBExpress قابل ویرایش



Mohammad_Mnt
چهارشنبه 16 آذر 1384, 19:18 عصر
چطوری باید رابطه مستر / دیتیلز را توی ClientDataSet هایی که به SQLTable متصل هستند پیاده سازی کنم ؟

vcldeveloper
پنج شنبه 17 آذر 1384, 04:02 صبح
http://www.barnamenevis.org/forum/showthread.php?t=30655

Mohammad_Mnt
پنج شنبه 17 آذر 1384, 22:30 عصر
من جوابم رو نگرفتم آقای کشاورز
من این اجزا را توی فرمم می گذارم :
TSQLConnection
TSQLDataSet جدول مستر
TSQLDataSet جدول دیتیلز
TDataSource برای Join بین دیتاست ها
تا این جا همه چیز خوب کار میکنه . حالا من برای هر SQLDataSet یک TDataSetProviderو TClientDataSetوTDataSource میگذارم تا اون ها را به TDBGrid متصل کنم . ولی هر کاری می کنم نمی شه !!!

vcldeveloper
جمعه 18 آذر 1384, 03:35 صبح
من جوابم رو نگرفتم آقای کشاورز
همون لینکی که در بالا دادم شما را راهنمایی میکنه.

می تونید ارتباط Master/Detail را در بین دو ClientDataSet بجای SQLDataSet ها ایجاد کنید و با استفاده از DataSetProvider خودتون برای عملیات Update کد بنویسید و مشخص کنید که کدوم جدولها باید Update بشند.

Mohammad_Mnt
جمعه 18 آذر 1384, 16:06 عصر
امکان نداره که رابطه مستر/دیتیلز را بین دو اسکیوال.دیتاست ایجاد کنم و کلاینت دیتاست ها را بهشون متصل کنم و با ApplyUpdates همهی تغییرات ذخیره بشن ؟

vcldeveloper
شنبه 19 آذر 1384, 02:21 صبح
امکان نداره که رابطه مستر/دیتیلز را بین دو اسکیوال.دیتاست ایجاد کنم و کلاینت دیتاست ها را بهشون متصل کنم و با ApplyUpdates همهی تغییرات ذخیره بشن ؟
میشه. می تونید بین دو DataSet یک رابطه Master\Detail ایجاد کنید و DataSetProvider را به DataSet اول متصل کنید. دو تا ClientDataSet ایجاد کنید و اولین ClientDataSet را به DataSetProvider متصل کنید. روی ClientDataSet اول دابل-کلیک کنید و در پنجره ایی که باز میشه Ctrl+F بزنید تا تمام فیلدهای آن ایجاد بشند. یکی از فیلدها از نوع DataSet تعریف شده و اسمش هم همون اسم دیتاست Detail هست (مثلا SQLDataSet2).
ClientDataSet دوم را به چیزی وصل نکنید، فقط خصوصیت DataSetField آن را بر روی نام همان فیلد DataSet ایی که در ClientDataSet بود تنظیم کنید.
به این ترتیب CLientDataSet1 اطلاعات موجود در SQLDataSet1(مستر) و ClientDataSet2 هم اطلاعات Details را دریافت میکنه.
برای ذخیره تغییرات از ApplyUpdates مربوط به ClientDataSet1 استفاده کنید. اگه در ذخیره تغییرات مربوط به جدول Detail مشکل داشتید، سعی کنید مشکل را از طریق خصوصیات یا رویدادهای DataSetProvider برطرف کنید (مثلا ResolveToDataSet را True کنید، یا در رویدادهای قبل از Update کدی بنویسید که عملیات Update را کنترل کند).

Mohammad_Mnt
شنبه 19 آذر 1384, 19:00 عصر
مرسی . لطف کردین

Mohammad_Mnt
شنبه 19 آذر 1384, 19:03 عصر
مرسی لطف کردین

Mohammad_Mnt
شنبه 19 آذر 1384, 19:35 عصر
علی آقا ، کارهایی که گفتین رو انجام دادم ولی این خطارو می ده . CommandText دیتاست ها اینه :


SQLDataSet1 => Select * From Master
SQLDataSet2 => Select * From Details where ID=:DetailsID

vcldeveloper
دوشنبه 21 آذر 1384, 01:48 صبح
کارهایی که گفتین رو انجام دادم ولی این خطارو می ده
برای اینکه کارها آسونتر بشه، بهتره برای جدول Detail از SQLTable استفاده کنید و از خصوصیات MasterSource و MasterField آن برای برقراری ارتباط با جدول Master استفاده کنید.