ورود

View Full Version : اشتراک گذاشتن دیتابیس



me1364
دوشنبه 21 بهمن 1387, 01:01 صبح
من میخواستم برنامه ایی بنویسم که در اون بتونم sql را روی یک سیستم نصب کنم و بقیه کلاینتها دیتا بیس را از روی سرور بخونند در سایت جستجو کردم یک روش آقای کشاورز گفته بوند که انجام دادم کار هم داد یک فایل متنی وجود داشت و اطلاعات مربوط به کانکشن از این فایل خونده میشه این فایل روی همه سیستمها ریخته میشه و ای پی سرور را درون اون مینویسم. الانم برنامه نوشتم درست کار میکنه فقط یک مشکل داره وقتی که یک کلاینت داده ایی اضافه میکنه در کلاینت دیگر اگر لیست باز باشه همان لحظه به محظ اضافه شدن داده در کلاینت دیگر نمایش داده نمیشه حتی در سرور و حتما باید یکبار datasource من disable بشه تا اطلاعات نمایش داده باشه برای این مشکل باید چکار کنم خیلی جستجو زدم اما پیدا نکردم موضوعی من میخوام بدون اینکه فرم لیست اطلاعات در یکطرف بازه را بخوام ببندم اگر داده ایی در طرف دیگر وارد شد همان لحظه داده به نمایش در بیاید.چه کارهای دیگری باید انجام بدهم.
از SQL Server 2000 استفاده میکنم.
باتشکر.

SYNDROME
دوشنبه 21 بهمن 1387, 06:24 صبح
چون DataSet در هر کلاینت اطلاعات را داخل خود Fetch می کند امکان نمایش تغییرات بانک بر روی آن تا Refresh دوباره وجود ندارد.
شما برای این کار باید به جای ADOQuery از SDAC استفاده کنید.
می توانید این ابزار را با مثالها از سایتهای فلان بگیرید.
موفق باشید

me1364
چهارشنبه 23 بهمن 1387, 20:08 عصر
سلام من رفتم sdac را گرفتم البته فعلا نسخه تریالش یک برنامه کوچک به عنوان تست نوشتم تا ببینم چی میشه نتیجه ایی که میخوام داره یا نه اما دیدم یک پیغام خطا میده که دوتا فایل sdac120.bpl , dac120.bpl وقتی این دو فایل را روی سیستم ریختم یک پیقام دیگه داد میخوام بدونم چون نسخه من تریال هستش اینطوریه یعنی اگر نسخه فول تهیه کنم این مشکل را نداره؟

vcldeveloper
پنج شنبه 24 بهمن 1387, 02:32 صبح
نسخه دلفی خودتون چند هست؟ آیا موقع دانلود، نسخه ایی که مربوط به دلفی خودتون بود را انتخاب کردید؟

mafazel
پنج شنبه 24 بهمن 1387, 13:49 عصر
الانم برنامه نوشتم درست کار میکنه فقط یک مشکل داره وقتی که یک کلاینت داده ایی اضافه میکنه در کلاینت دیگر اگر لیست باز باشه همان لحظه به محظ اضافه شدن داده در کلاینت دیگر نمایش داده نمیشه حتی در سرور و حتما باید یکبار datasource من disable بشه تا اطلاعات نمایش داده باشه برای این مشکل باید چکار کنم خیلی جستجو زدم اما پیدا نکردم موضوعی من میخوام بدون اینکه فرم لیست اطلاعات در یکطرف بازه را بخوام ببندم اگر داده ایی در طرف دیگر وارد شد همان لحظه داده به نمایش در بیاید.چه کارهای دیگری باید انجام بدهم.

سلام دوست عزیز
وارد شدن اطلاعات در یک کلاینت و دیده شدن آن در کلاینت دیگر دو مسئله است:
1- بلافاصله پس از وارد شدن اطلاعات در یک کلاینت، در سرور نیز وارد و اطلاعات آن آپدیت شود!
2-پس از وارد شدن اطلاعات در سرور، تغییرات به اطلاع کلاینت های دیگر هم رسانده شود و آنها هم آپدیت شوند!
نگرانی شما و اکثر دوستانی که تازه بحث شبکه را بصورت جدی شروع می کنند به مورد دوم بر میگرده. دقت کنید که این کار ضروری نیست. یعنی «اکیدا لازم» نیست که هر تغییری در سرور بلافاصله به کلاینتها هم اطلاع داده شود و آنها هم اطلاعات خودشان را بروز کنند. اگر واقعا بخواهید اینطور باشد باید چیزی شبیه به چت بنویسید که هر تغییری به اطلاع همه رسانده شود. این کار ترافیک سنگین و غیر ضروری در شبکه شما ایجاد می کند. نگران این مسئله نباشید. معمولا روش این است که هر کلاینتی آزادانه اطلاعات خود را وارد یا ویرایش می کند و موقع اعمال آن در سرور تازه چک میشود که خطایی وجود دارد یا خیر و به آن کلاینت اطلاع داده می شود (البته من اینطور فکر میکنم. ممکن است اساتید سایت با این روش موافق نباشند!).
اگر هم یک کاربر بخواهد واقعا اطلاعاتش آپدیت باشد باید دکمه بازخوانی! را بزند که در آن عمل بازخوانی اطلاعات از سرور انجام شود.
در بعضی موارد حساس از بحث قفل کردن یک رکورد توسط یک کاربر استفاده می شود.
من اکثرا برای درج، ویرایش یا حذف از Stored Procedure استفاده می کنم و در آن (که در سرور اجرا می شود) خطاهایی که ممکن است پیش بیاید را چک می کنم و در صورت خطا به کاربر اطلاع می دهم.
منتظر نظرات دوستان دیگر در این مورد هستم!

me1364
پنج شنبه 24 بهمن 1387, 14:33 عصر
نسخه دلفی خودتون چند هست؟

نسخه دلفی من 2009 هستش رفتم در سایت مربوطه و نسخه تریال مربوط به دلفی 2009 را دانلود کردم.

me1364
پنج شنبه 24 بهمن 1387, 14:38 عصر
وارد شدن اطلاعات در یک کلاینت و دیده شدن آن در کلاینت دیگر دو مسئله است:
1- بلافاصله پس از وارد شدن اطلاعات در یک کلاینت، در سرور نیز وارد و اطلاعات آن آپدیت شود!
2-پس از وارد شدن اطلاعات در سرور، تغییرات به اطلاع کلاینت های دیگر هم رسانده شود و آنها هم آپدیت شوند!


سلام
شما حالا برای حل مشکل من چه پیشنهادی میکنید یعنی میفرمائید من گزینه ایی بگذارم تا کاربر هر وقت به محض انتخاب آن گزینه اطلاعات از سرور به روز شود؟؟؟

me1364
جمعه 25 بهمن 1387, 23:44 عصر
اقای کشاورز به نظرتون اگر نسخه فول را تهیه کنم این مشکل حل میشه؟
یا اینکه به غیر از این کامپوننت برای این کار شما چه چیزی پیشنهاد میکنید؟

Unique
شنبه 26 بهمن 1387, 01:03 صبح
سلام !

موضوعی که شما اشاره کردین برای من از این لحاظ جالبه که هنوز به این مشکل بر نخوردم که نیاز باشه همه کلاینت ها آخرین تغییرات را ببینند !!!

ببین دوست عزیز ! شما اصلا توضیح ندادین چیکار میخواهین انجام بدین در صورتی که کاری که شما میخواهین انجام بدین به نظرم منطقی نمیاد !

معمولا برنامه های پایگاه داده تحت شبکه چندین فرم دارند ! که در خیلی از موارد ممکنه اصلا دو تا کلاینت جاهای مختلفی از یک برنامه باشند ! در ضمن کلاینت ها که میخواهند اطلاعات را درج کنند اصلا نیاز ندارند بدونند کی داره چی درج میکنه یا کرده ! مهم اینه که بر اساس منطق شما اطلاعات Duplicate وارد نشه ! که این به عهده شما و منطق برنامست ! اگه قراره یه لیست را مشاهده کنه معمولا آخرین تغییرات را نشون میدند یه حالت Refresh هم میگذارند حالا به صورت یک Button یا در حالت آماتور Timer (عجب راه حل مسخره ای) میدونی چرا ؟ چون نیاز نیست لحظه به لحظه اطلاعات Update بشن !

اگر میخواهین در زمان درج یا حذف یا ویرایش از نمایشگرتون مثلا DBGRID دو تایی بودن یا هر مسئله ای را چک کنین ! فکرتون اشتباهه و باید این کار را در زمان درج یا حذف یا ویرایش هر کلاینت انجام بدین !

اگر شما میخواهین مثلا یک Message Board یا Chat Room را شبیه سازی کنین ! به نظرم بهترین کار اینه که برنامه به صورت Timer اخرین اطلاعات را بگیره !

اگه سناریو کارتون را بگین بچه ها بیشتر کمکتون میکنند !

ferdin
شنبه 26 بهمن 1387, 01:51 صبح
سلام
من از مطالب مفیدی که در این تایپیک هست استفاده کردم و از دوست خوبم که این سوال را مطرح کرد و دوستانی که جواب دادن تشکر می کنم.:تشویق:

SYNDROME
شنبه 26 بهمن 1387, 06:30 صبح
اقای کشاورز به نظرتون اگر نسخه فول را تهیه کنم این مشکل حل میشه؟
یا اینکه به غیر از این کامپوننت برای این کار شما چه چیزی پیشنهاد میکنید؟
من خودم کمی با این نسخه ها کار کرده ام و جواب داده است.شاید ورژن اشتباهی را دانلود کرده اید.


نگرانی شما و اکثر دوستانی که تازه بحث شبکه را بصورت جدی شروع می کنند به مورد دوم بر میگرده. دقت کنید که این کار ضروری نیست. یعنی «اکیدا لازم» نیست که هر تغییری در سرور بلافاصله به کلاینتها هم اطلاع داده شود و آنها هم اطلاعات خودشان را بروز کنند.
دوست عزیر در دنیای حرفه ای امروز یکی از خواسته های کاربران همین است.
حتی با گذاشتن دکمه Refresh هم کاربران قانع نمی شود.
آنها دوست دارند در همن لحظه که کاربران دیگر اطلاعات وارد می کند مدیر اطلاعات جدید را ببینید و یا حتی بر روی گزارش او تاثیر بگذارد.
خود من هم همنوز به شکل کامل در برنامه استفاده نکرده ام ولی حتماً یکی از امکانی است که در آینده به برنامه اضافه می کنم.
موفق باشید

vcldeveloper
شنبه 26 بهمن 1387, 16:13 عصر
دوست عزیر در دنیای حرفه ای امروز یکی از خواسته های کاربران همین است.
حتی با گذاشتن دکمه Refresh هم کاربران قانع نمی شود.
آنها دوست دارند در همن لحظه که کاربران دیگر اطلاعات وارد می کند مدیر اطلاعات جدید را ببینید و یا حتی بر روی گزارش او تاثیر بگذارد.
این ربطی به دنیای حرفه ایی و غیر حرفه ایی نداره، بلکه بستگی به نیازهای پروژه داره. در یک پروژه لازم هست کاربران بلافاصله به تغییرات اعمال شده توسط دیگران دسترسی داشته باشند، در یک پروژه هم اصلا نیازی نیست همچین امکانی وجود داشته باشه.

me1364
یک شنبه 27 بهمن 1387, 00:26 صبح
معمولا برنامه های پایگاه داده تحت شبکه چندین فرم دارند ! که در خیلی از موارد ممکنه اصلا دو تا کلاینت جاهای مختلفی از یک برنامه باشند ! در ضمن کلاینت ها که میخواهند اطلاعات را درج کنند اصلا نیاز ندارند بدونند کی داره چی درج میکنه یا کرده ! مهم اینه که بر اساس منطق شما اطلاعات Duplicate وارد نشه


سلام

من با زدن مثالی اهمیت این موضوع را برایتان میگویم شما داروخانه یک بیمارستان را در نظر بگیرید فرض کنید روزانه تعداد زیادی به این محل مراجعه می کنند در قسمتی باید یک نفر (پذیرش) نسخه بیمار را در یافت و ثبت کند در قسمت دیگر یعنی صندوق نه تنها اینکه نمیشه گفت مهم نیست اطلاع داشته باشد در کلاینت دیگر چه خبره حتی لازم است برای ادامه فرایند همان لحظه بدون زدن دکمه ایی نسخه بیمار را مشاهده کند تا مبلغ داروها را حساب کند این فقط مثال برای دو قسمت بود امیدوارم متوجه منظور من شده باشید.

من این سیستم را در جایی دیدم و مطمئنم قابل اجرا هستش منتهی به نظر من باید به کمک هم دیگه این مشکل را حل کنیم .

SYNDROME
یک شنبه 27 بهمن 1387, 06:29 صبح
این ربطی به دنیای حرفه ایی و غیر حرفه ایی نداره، بلکه بستگی به نیازهای پروژه داره. در یک پروژه لازم هست کاربران بلافاصله به تغییرات اعمال شده توسط دیگران دسترسی داشته باشند، در یک پروژه هم اصلا نیازی نیست همچین امکانی وجود داشته باشه.
با تشکر از علی کشاورز
ولی فکر نکنم چندان هم بی ربط باشد
کاربران حرفه ای مانند حسابداران خیلی به این نکته توجه دارند چون دوست دارند با ورود سند توسط یک کاربر گزارش مرور حسابهای آنها در همان لحظه تغییر کند حتی اگر گزارش جلوی انها باز باشد و دارند از اطلاعات آن استفاده می کنند.
ولی در خیلی از جاهای دیگر چنین نیازی را از شما نخواهند.
کاربری که سیستم آن تک کاربره است از شما چنین امکانی را نمی خواهد.
ببخشید کمی از بحث خارج شدم
موفق باشید

vcldeveloper
یک شنبه 27 بهمن 1387, 16:48 عصر
کاربران حرفه ای مانند حسابداران خیلی به این نکته توجه دارند چون دوست دارند با ورود سند توسط یک کاربر گزارش مرور حسابهای آنها در همان لحظه تغییر کند حتی اگر گزارش جلوی انها باز باشد و دارند از اطلاعات آن استفاده می کنند.
این مثال شما بیشتر همان پست من را تایید می کند. آنجا هم گفتم که لزوم وجود همچین قابلیتی به نوع نیازمندی های برنامه بستگی دارد، نه به حرفه ایی بودن یا نبودن کاربر. اون مثالی که شما زدید، یا یکی دیگه از کاربران درباره داروخانه زد، فقط نشان می دهند که در یک برنامه مدیریت داروخانه، یا در یک برنامه حسابداری، وجود همچین امکانی مفید یا در پاره ایی مواقع لازم هست. این به معنی آن نیست که آن کاربران حرفه ایی هستند، یا اگر یک برنامه نویس در همه برنامه هایش از این قابلیت استفاده کند، برنامه حرفه ایی تری نوشته است!
سربار استفاده از همچین مکانیزمی بسیار بالا ست، و فقط باید در سناریوهایی که واقعا به آن احتیاج هست ازش استفاده کرد؛ یعنی نوع نیازمندی های پروژه شما تعیین می کند که شما از همچین مکانیزم هایی استفاده کنید یا نکنید.

me1364
یک شنبه 27 بهمن 1387, 17:57 عصر
فقط باید در سناریوهایی که واقعا به آن احتیاج هست ازش استفاده کرد

سلام.
فکر میکنم بر سرعت شبکه هم تاثیر بگذاره و یه کم برنامه کندتز عمل کنه آیا این نظر من درسته؟

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

accpascal
یک شنبه 27 بهمن 1387, 19:30 عصر
سلام.
فکر میکنم بر سرعت شبکه هم تاثیر بگذاره و یه کم برنامه کندتز عمل کنه آیا این نظر من درسته؟

اما من مجبورم این قابلیت را استفاده کنم اگر کسی پیشنهادی برای حل این مشکل داشته باشه ممنون میشم.
اگر باید از این قابلیت استفاده کنی در جداولی و یا فرم هایی آن را اعمال کن که واقعا مجبوری

vcldeveloper
دوشنبه 28 بهمن 1387, 09:40 صبح
اما من مجبورم این قابلیت را استفاده کنم اگر کسی پیشنهادی برای حل این مشکل داشته باشه ممنون میشم.
چندین تاپیک در این زمینه وجود دارند که در آنها روش های مختلفی برای انجام این کار توضیح داده شدند. من شخصا حداقل به دو سه تا از اون تاپیک ها جواب دادم.

me1364
دوشنبه 28 بهمن 1387, 12:28 عصر
چندین تاپیک در این زمینه وجود دارند که در آنها روش های مختلفی برای انجام این کار توضیح داده شدند

سلام من کلا همه این کار را با جستجو در همین سایت یاد گرفتم و انجام دادم اما این یکی را پیدا نکردم میشه لطف کنید لینکش را قرار بدید یا اینکه بگید چه چیزی را جستجو کنم خیلی سرچ زدم پیدا نکردم

vcldeveloper
سه شنبه 29 بهمن 1387, 00:20 صبح
یا اینکه بگید چه چیزی را جستجو کنم خیلی سرچ زدم پیدا نکردم
Query Notification
SDAC
CursorType = ctKeyset

اگر بخواید معماری نرم افزار را تغییر بدید:
3-tier
DataSnap
DCOM
RemObjects DataAbstract

me1364
شنبه 03 اسفند 1387, 08:48 صبح
سلام دوستان ممنون از راهنمایی هاتون یک سوال دیگه هم دارم در این رابطه اینکه میخوام بدونم نام این روشی که من در این سایت جستجو کردم و انجام دادم در پست 1 نوشتم را میخواستم بگید چیه یعنی منظورم این هست که از چه معماری هستش امیدوارم متوجه منظورم شده باشید آیا روش های دیگری نیز وجود داره اگر اره میشه نام روش های دیگه را هم ببرید ممنون از لطفتون

vcldeveloper
شنبه 03 اسفند 1387, 18:02 عصر
میخوام بدونم نام این روشی که من در این سایت جستجو کردم و انجام دادم در پست 1 نوشتم را میخواستم بگید چیه یعنی منظورم این هست که از چه معماری هستش
Client\Server