PDA

View Full Version : نوشتن یک برنامه چند کاربره



hormuz
شنبه 23 دی 1385, 22:53 عصر
با سلام
من می خوام یک برنامه چند کاربره بنویسم که بانک اون SQLServer2000 .
می خواستم از دوستان بپرسم که بهترین روش برای نوشتن این برنامه چه روشی است یعنی استفاده از چه کمپوننتها و ابزارهایی.
در ضمن این موضوع رو چه جوری کنترل کنم.
وقتی یک کاربر یک رکورد جدید ایجاد میکنه که اون رکورد یک فیلد یونیک داره ، چه جوری کاربر دیگه نیاد یک رکورد جدید به جدول اضافه کنه که همون رکورد رو داشته باشه.
برای توضیح بیشتر موضوع بالا
ببینید فرض کنیم من دوتا جدول دارم که باهم بصورت Master/Details و از طریق فیلد ID با هم ارتباط دارند.
حالا وقتی رکورد جدیدی رو در جدول Master ایجاد کنیم و چند رکورد متناظر با آن هم در جدول Details خوب خوانا خواه برای ارتباط بین این دو جدول فیلد ID هم مقدار دهی میشود اما اگر در یک کامپیوتر دیگه ، یه کاربر دیگه هم چنین کاری کرده باشه و بر حسب اتفاق هم ID رو استفاده کرده باشه اون وقت موقع ذخیره کردن یا Update کردن اطلاعات یکی از کاربران به پیغام خطا بر می خورد.
بهترین روش برای حل این مشکل چیه؟
متشکرم.

MNosouhi
شنبه 23 دی 1385, 23:57 عصر
می خواستم از دوستان بپرسم که بهترین روش برای نوشتن این برنامه چه روشی است یعنی استفاده از چه کمپوننتها و ابزارهایی.
بهترین روش برنامه نویسی چند لایه (MultiTier) هستش و معمولا از clientdataset استفاده میکنن.

وقتی یک کاربر یک رکورد جدید ایجاد میکنه که اون رکورد یک فیلد یونیک داره ، چه جوری کاربر دیگه نیاد یک رکورد جدید به جدول اضافه کنه که همون رکورد رو داشته باشه.
اگه فیلد رو از نوع autoinc تعریف کنید خود sql تضمین می کنه که مقادیر تکراری وارد نشه.

hormuz
دوشنبه 25 دی 1385, 03:55 صبح
ممنون از توجهتون
در مورد جواب اولتون آیا شما منبع خاصی برای یادگیری Multitire ویا cliendataset سراغ دارید.
ولی در مورد جواب دومتون باید بگم که من اول فیلد ID برنامم رو از نوع AutoInc تعریف کرده بودم (توی برنامه یک DataModul دارم که با چند تا ADOTable و یک ADOConnection به بانک SQL وصل هستم و توی فرم های برنامم هم از clientdataset استفاده می کنم که با Provider به همین ADOTableها متصلند) ولی موقع Insert یک رکورد فیلد ID جدول خالی می موند و چون جداولم Master/Details بود و حتما فیلد ID قبل از ApplyUpdate کردن ClientDataSet باید مقدار می گرفت خودم با کد نویسی به اون مقدار میدادم ولی خوب این مقدار ممکن بود موقع ApplyUpdateکردن جدول دیگه یونیک نباشه.
امید وارم منظورم رو رسونده باشم
بازهم از همکاریتون متشکرم.

MNosouhi
دوشنبه 25 دی 1385, 11:32 صبح
در مورد جواب اولتون آیا شما منبع خاصی برای یادگیری Multitire ویا cliendataset سراغ دارید.
برای شروع می تونید در همین سایت جستجو کنید ، و برای کار کردن حرفه ای سایت بورلند مقاله های جالبی داره.

ولی موقع Insert یک رکورد فیلد ID جدول خالی می موند
این یکی از معایب midas هستش ، درستش اینه که بعد از هر insert مقدار فیلدهای autoinc توسط سرور برگردانده شود که این کار رو انجام نمیده ، در نتیجه شما باید بعد از هر insert یک بار refresh کنید تا برنامت مقدار فیلد autoinc رو بدست بیاره .