PDA

View Full Version : سوال: Relationship



مجتبی جوادی
سه شنبه 21 مهر 1388, 13:26 عصر
دوستان سلام
من از بانک اکسس در برنامه ام استفاده می کنم . حالا می خواهم با دلفی Relationship را در بانک اکسس ایجاد کنم(با کد نویسی) . لطفا راهنمایی کنید
با تشکر

vcldeveloper
سه شنبه 21 مهر 1388, 23:15 عصر
با مقدار دادن به خصوصیات MasterSource و MasterField می تونید یک جدول را به عنوان جدول Detail به جدول دیگه (جدول Master) متصل کنید.

مجتبی جوادی
چهارشنبه 22 مهر 1388, 09:56 صبح
آقای کشاورز ممنون از لطفتان
اگه ممکن بیشتر توضیح بدید یا اینکه یک مثال بزنید ممنون میشم
با تشکر

Mahmood_M
چهارشنبه 22 مهر 1388, 12:57 عصر
اگه ممکن بیشتر توضیح بدید یا اینکه یک مثال بزنید ممنون میشم
فرض کنید جدولی داریم با عنوان لیست مشترکین ، در این لیست نام و یک کد برای هر مشترک ثبت می شه ، پس دو فیلد داریم در جدول اصلی ، یکی نام و یکی کد ، حالا در جدول دیگه ای مشخصات کامل مشترک رو ثبت میکنیم ، جدول فرض کنیم از جدول دوم فقط مشخصات مشترکی که در جدول اصلی انتخاب میشه رو برای نمایش نیاز داریم ، برای این کار کد مشترک رو در جدول دوم هم ثبت میکنیم ...
اما برای ارتباط ، جدول دوم ( مشخصات کامل ) که از نوع ADOTable هست ، یک خاصیت با نام MasterSource داره که از نوع TDataSource هست ، باید با استفاده از این خاصیت جدول رو به DataSource ای که به جدول اصلی وصل هست ارتباط بدیم ...
در مرحله ی بعد باید با استفاده از خاصیت MasterField از جدول دوم نام فیلدی که اطلاعات یکسان با جدول اصلی درش قرار می گیره مشخص کنیم ، که در اینجا فیلد کد بود ...

با این کار ، هر وقت در جدول اول مشترکی با کدی خاص انتخاب شده ، در جدول دوم هم مشترکی که اون کد رو داره نمایش داده میشه ( در واقع هر رکوردی که مقدار کدش برابر با کد رکورد انتخاب شده در جدول اول باشه نمایش داده میشه )

مورد بالا تنها یک مثال بود ...

در اینجا (http://www.delphiplus.mihanblog.com/post/20) هم یک مثال عملی گذاشتم ...

موفق باشید ...

مجتبی جوادی
پنج شنبه 23 مهر 1388, 10:30 صبح
آقا محمود ممنون از لطف شما
تمام این چیزهایی که زحمت کشیدید را بنده بلد هستم . فقط میخواستم بدونم از طریق دلفی چگونه می تونم این ارتباط را برقرار کنم یعنی در اکسس Relationship ایجاد بشه

vcldeveloper
پنج شنبه 23 مهر 1388, 15:05 عصر
یعنی در اکسس Relationship ایجاد بشه
یعنی چی که در اکسس Relationship ایجاد بشه؟ یعنی شما در دلفی کدی بنویسید که یک بانک اطلاعاتی Access را به گونه ایی تغییر دهد که وقتی شما آن را در MS Access باز کردید، ببینید بین بعضی از جداول Relationship ایجاد شده؟ اگر منظور این هست، می تونید از دستورات SQL مربوط به تغییر ساختار جداول مثل CREATE TABLE یا ALTER TABLE استفاده کنید.
جزئیات استفاده از این دستورات به دلفی مربوط نمیشه، و باید در تالار مربوط به بانک های اطلاعاتی یا تالار Access سایت آن را بپرسید.

مجتبی جوادی
پنج شنبه 23 مهر 1388, 20:12 عصر
آقای کشاورز یعنی از داخل دلفی نمی شود ارتباط بین دو جدول در اکسس را ایجاد کرد؟ همان دستوراتی که شما میفرمائید را با یک کامند باید بشود اجرا کرد.

vcldeveloper
جمعه 24 مهر 1388, 02:06 صبح
آقای کشاورز یعنی از داخل دلفی نمی شود ارتباط بین دو جدول در اکسس را ایجاد کرد؟ همان دستوراتی که شما میفرمائید را با یک کامند باید بشود اجرا کرد.
شما باید دستور SQL مربوطه را بنویسید. دستور SQL مربوطه را که بلد بودید، می تونید با دلفی یا هر زبان برنامه نویسی دیگه ایی که میتونه به اون بانک وصل بشه، این دستور را به بانک مورد نظر ارسال کنید، و در بانک اجرا کنید.

مجتبی جوادی
جمعه 24 مهر 1388, 11:54 صبح
ممنون آقای کشاورز
موضوع اینه که من دستور sqlش را نمی دونم . در قسمت اکسس هم پیدا نکردم . اگه شما می دونید ممنون میشم توضیح بدید
با تشکر

vcldeveloper
جمعه 24 مهر 1388, 21:21 عصر
موضوع اینه که من دستور sqlش را نمی دونم .
ALTER TABLE

حسین شهریاری
شنبه 25 مهر 1388, 09:44 صبح
سلام!!

دوست گرامی به همان شکلی که آقای کشاورز هم فرمودن شما اگر کد SQL بلد باشید مهم نیست
با چه زبانی و با چه پایگاه داده ای دارید کار میکنید.مشکل اینکه اکثر عزیزان هنوز نمیدونند که SQL یک
زبان پرس و جو است!!!
و چیزی که من از مشکل شما متوجه شدم این بود که شما هر زمانی که نیاز داشته باشین میتونید
با یک دستور ساده SQL هر تعداد جدول را که داشته باشید با هم Joinکننین و خروجی مورد نظرتون را
بدست بیارین و هیچ کونه نیازی نیست که از قبل و به اون شکلی که توی فکر شما هستش Relationخاصی ایجاد کرد.موارد فوق الذکر با Query قابل انجام است.البته شما میتونید برای راحتی کار اگه با اکسس کار میکنید تمام دستوراتتون را Query و اگه از SqlServer استفاده میکنید دستوراتتون را تبدیل به
View کرده و در برنامه فقط آنرا Select کنین در این صورت دیگه نیاز نیست عبارات رشته ای طولانی را سر هم کنید و خطای شما کمتر میشه.

موفق باشید-شهریاری

مجتبی جوادی
شنبه 25 مهر 1388, 11:52 صبح
خسته نباشید!!!!!
خودم همه این اطلاعات را میدونم فقط کد sql برای ایجاد ارتباط Relationship را نمی دونم
بهرحال ممنون!!!!

حسین شهریاری
شنبه 25 مهر 1388, 13:08 عصر
اینطوری:

select table1.field1,table1.field2,table2.field1,table2.f ield2,... from table1 inner join table2
(on(table1.keyfield=table2.keyfield

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

امیدوارم به کارتون بیاد-موفق باشید

مجتبی جوادی
شنبه 25 مهر 1388, 20:15 عصر
آقای شهریار ممنون از لطف شما
فکر کنم شما متوجه منظور من نشدید . این یک تقاضاست و من خودم تمام این موارد را می دانم لطفا به شکل زیر توجه کن . من میخوام آن ارتباط یک به بینهایت در فایل اکسس ایجاد بشه نه اینکه یک تقاضا از فایل درخواست کنم . امیدوارم متوجه شده باشی . چیزی شبیه کد زیر

CurrentDb.CreateRelation("MyRelationship", "Table1", "Table2", dbRelationLeft Or dbRelationUpdateCascade Or dbRelationDeleteCascade)

MohsenTi
یک شنبه 26 مهر 1388, 08:30 صبح
سلام دوستان
آخه چرا این بحث ساده رو اینتوری پیجش میدید
کد مربوطه اینه

ADOConnection1.Execute('ALTER TABLE Table2 ADD FOREIGN KEY(RelateCode) REFERENCES Table1(Code)')
که RelateCode فیلدی از تیبل دو که قرار در رلیشن شرکت کنه
و Table1 نام تیبل مستره
و Code فیلد دوم شرکت کننده در رلیشنه واز تیبله یکه

مجتبی جوادی
سه شنبه 28 مهر 1388, 12:07 عصر
دوست عزیزممنون از لطف شما
چطور میشه از وجود این ارتباط مطلع شده یعنی برنامه اول چک کنه اگه ارتباط وجود نداشت این ارتباط را ایجاد کنه
چون با هر بار اجرای این کد ارتباط تکرار می شود
ممنون