بازدید: ٧٧٨

ایجاد یک فرم برای یک ارتباط چند به چند (آموزش پیشرفته اکسس)

بازگشت به صفحه اصلی آموزش پیشرفته اکسس

در جایی که یک ارتباط چند به چند وجود دارد، روشهای زیادی برای وارد کردن اطلاعات وجود دارند ولی برای این منظور بهتر است که بک فرم Order با یک سابفرم Order Details ایجاد کنیم. با وارد کردن داده های Order Details در سابفرم، کاربر می تواند یک Product Item را از فهرست کمبوباکس انتخاب کند.  البته Row Source استفاده شده برای فهرست کمبوباکس، داده ای است که از جدول Products بدست آمده است. بدین ترتیب می توانید تمام جنبه های یک ارتباط چند به چند موجود در یک فرم خالی را مشاهده کنید.

 

ایجاد فرم برای ارتباط چند به چند

شکل1: فرم چند به چند


ایجاد فرم برای ارتباط چند به چند

شکل 2: ساختار یک ارتباط چند به چند که فرم شما بر پایه آن می باشد.

 

به مکانی که هرکدام از فیلدهای Order Form در یک ساختار چند به چند قرار دارند، دقت کنید. در ادامه بطور مفصل به شرح آنها می پردازیم.

قسمت اصلی فرم Order، دارای سه فیلد می باشد که از tblorder مشتق شده اند(جدول سمت چپ شکل 2). این فیلدها، عبارتند از OrderId ، OrderDate و CustomerId که در بین آنها، فیلد سوم به نام CustomerId  یک کلید خارجی از tblCustomer می باشد(جدولی که جزیی از ارتباط چند به چند نیست و بنابراین در شکل 2 نمایش داده نشده است). 

ارتباط بین قسمت اصلی Order Form و سابفرم آن بصورت یک ارتباط  یک به چند بین جدول tblOrder و tblOrderDetails نشان داده می شود. اگرچه بعلت وجود یک ساختار ارتباط چند به چند، یک فرم پرس وجو (Query) برای Record Source سابفرم ایجاد کردیم که فیلدهایی از هر دو جدول tblOrderDetails و tblProducts دارد. همچنین دومین فیلد ProductId یک کمبوباکس است که از داده های جدول tblProducts همانند Row Source استفاده می کند.

اکنون می خواهیم نگاهی دقیقتری به طرح سابفرم و ساختار فرم پرس و جو(query) بیاندازیم:

 


ایجاد فرم برای ارتباط چند به چند

شکل 3: جدول طراحی سابفرم Order Details.

 


ایجاد فرم برای ارتباط چند به چند

شکل 4: فرم پرس و جو (query) مورد استفاده برای Row Source سابفرم.

 

همانطور که مشاهده می کنید، فیلدهای ProductId، ProductId و Quantity از جدول tblOrderDetails و CostPerUnit از جدول  tblProducts بدست آمده اند. البته ProductId یک کلید خارجی ازجدول  tblProducts است. همچنین یک فیلد محاسبه شده ای به نام total وجود دارد که حاصلضرب CostPerUnit در Quantity است تا قیمت خرید واقعی را نشان دهد.

شاید این سوال به ذهنتان رسیده باشد که چرا 2 تا فیلد ProductId وجود دارد؟ در جواب باید گفت که در حقیقت  ProductId دوم، شماره Id را نشان نمی دهد. از آنجایی که این فیلد توسط یک کنترل کمبوباکس در سابفرم نمایش داده می شود، داده ای را که نمایش می دهد می تواند مطابق آنچه که به آن محدود شده است، نباشد. برای اینکه کار با سابفرم آسانتر شود، کنترل ما به گونه ای تنظیم می شود تا ItemName محصول را از جدول tblProducts نمایش دهد که در آن به فیلد tblOrderDetails.ProductId  محدود شده است. اینکار با تنظیم خصوصیت Control Source کمبوباکس بر روی ProductId و خصوصیت Row Source برروی tblproducts انجام می شود. بدین ترتیب، استفاده این چنینی از کمبوباکس، این امکان را به سابفرم می دهد تا اطلاعات را از جدول Products که درسمت راست ارتباط چند به چند قرار دارد، بدست آورد.

حال ببینیم در هنگامی که کاربر داده ها را در سابفرم وارد می کند، چه اتفاقی رخ می دهد؟ اگر کاربر، شماره ProductId مربوط به Order Item را بداند، آنگاه آن شماره را در اولین ستون از سابفرم وارد میکند و از آنجایی که این فیلد، یک کلیدخارجی برای جدول Products می باشد، سایر فیلدهای سابفرم را نیز از جدول tblProducts با خود می آورد.  به عبارتی دیگر هنگامی که کاربر یک ProductId را وارد می کند، داده های موجود در فیلد CostPerUnit مربوط به آن محصول، در فیلد مناسبی از سابفرم نمایش داده می شوند. علاوه بر آن ItemName آن محصول در کنترل کمبوباکس نمایش داده می شود چرا که خصوصیت Row Source آن بر روی ItemName جدول tblProducts تنظیم شده است. اگر بنا به دلایلی کاربر ProductId را نداند، ممکن است اولین فیلد را خالی رها کند و مقدار مربوطه را از فهرست کمبوباکس انتخاب کند. از آنجایی که خصوصیت Control Source کمبوباکس بر روی ProductId جدول tblOrderDetails تنظیم شده است، و نیز خصوصیت Row Source آن برروی ItemName جدول tblProducts، نتیجه دست آمده دقیقا مطابق با زمانی است که شماره ProductId را مستقیما وارد کنید. همچنین سایر داده های موجود در جدول tblProducts نیز بر روی سابفرم قرار می گیرند. از اینرو اولین فیلد ProductId سابفرم، بطورخودکار پر می شود.

همانطور که مشاهده کردید، این فرم یک فرم ساده ای است که کار با آن آسان می باشد، که نه تنها تمامی جدولها را به صورت یک ارتباط چند به چند با هم نشان می دهد بلکه یک مثال کاربردی در ارتباط با نحوه کارکرد یک ارتباط چند به چند نیز می باشد.

 

بازگشت به صفحه اصلی آموزش پیشرفته اکسس

طراحی سایت و سئو توسط ضابط