PDA

View Full Version : گفتگو: برنامه نویسی بانک اطلاعاتی تحت شبکه



en.kamali.ir
چهارشنبه 06 آذر 1387, 00:53 صبح
سلام .
لطفا تا آخر مطلب رو بخونید . ممنونم از توجهتون .
چند روز پیش توی سایت داشتم دور میزدم تا ببینم می تونم یک تاپیک پیدا کنم که مثالی از برنامه کلاینت و سرور داشته باشه !! برام جالب بود تاپیکی پیدا کردم که تقریبا 2 سال همه دوستان داشتند اونو تکمیل میکردند اما در آخر نتونستند یک برنامه بنویسند که تحت شبکه اجرا بشه . البته تمام دوستانی که اون تاپیک رو می نوشتند استاد بودند و می خواستند یک کلوپ ویدئویی را اداره کنند .
اینجا سعی دارم با استقاده از دوستان عزیز یک برنامه طراحی کنیم که این کار رو انجام بده .
در واقع راه اون دوستان رو می خوام ادامه بدم .
دوستان عزیزم در اون تاپیک یک مشکل داشتند و اون هم مشکل مدیریتی بود . همشون می توانستند برنامه رو به تنهایی بنویسند اما با هم نه !!!!
من مدت 5 ساله که دارم با دلفی برنامه می نویسم . اما تا حالا تحت شبکه کار نکردم . در این تاپیک قصد دارم با استفاده از اساتید و دوستانم کار تاپیک قبلی رو به پایان برسونیم .
هدف :
آموزش برنامه نویسی تحت شبکه
در واقع می خواهیم تاپیکی ایجاد کنیم که مرجع یادگیری این موضوع در سایت باشد .
درخواست :
از اساتیدی که در این زمینه آشنایی دارند تقاضا می کنم با ارسال پیام آمادگی خود را جهت همکاری اعلام نمایند .
همچنین از دوستانی که مایل هستند این تاپیک آغاز بشود تقاضا می کنم با در ج تقاضاشون در این بخش از اساتید دعوت به همکاری نمایند .
با تشکر از همه دوستان
محمد کمالی

vcldeveloper
چهارشنبه 06 آذر 1387, 02:01 صبح
اولین مشکلی که با آن برخورد می کنید، این هست:

هدف :
آموزش برنامه نویسی تحت شبکه

برنامه نویسی تحت شبکه یعنی چی؟ آیا فقط یک نوع خاص از برنامه هست که به آن برنامه تحت شبکه گفته میشه؟ آیا یک برنامه کلاینت سرور که داده های بانک اطلاعاتی را بین کلاینت ها و سرور منتقل می کند، برنامه تحت شبکه هست؟ یک برنامه چت چطور؟ یک FTP کلاینت چطور؟ یک مرورگر وب چطور؟ یک Web Server چطور؟ یک فایل سرور چطور؟ برنامه ایی که از طریق شبکه خودش را بروز می کند چطور؟ یک نرم افزار VoIP چطور؟، و خیلی نرم افزارهای دیگه. آیا به نظر شما نوشتن همه این برنامه ها مثل هم هست؟ اگر کسی این به اصطلاح برنامه نویسی تحت شبکه را یاد بگیرد، همه اینها را بلد هست که بنویسد؟!

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

مائده 100
چهارشنبه 06 آذر 1387, 08:24 صبح
با سلام
اول از شما دوست عزیز تشکر می کنم چون بحث خوبی را شروع کردید
من هم به نوبه خود از دوستان و اساتید عزیز خواهش می کنم در این بحث شرکت کنند .

mossaferin
چهارشنبه 06 آذر 1387, 11:42 صبح
سلام به دوستان

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

ممنون

_alish_
چهارشنبه 06 آذر 1387, 12:13 عصر
بهتر است ، يك نفر مدير بحث شود كه بحث هاي اضافه را حذف نماييد، بعد يك Index بحث ابتدا مشخص شود و بترتيب شروع و پايان و در انتها با يك عنوان نتيجه مشخص گردد.
البته نظرات آقاي كشاور درست مي باشد ولي به احتما زياد دوستان دنبال نوشتن يك برنامه با يك پايگاه داده هستند.
اگر نظر دوستان اين است، ايندكس موضوعي پيشنهادي اينجانب:
1-پايگاه داده SQLServer (بطور اجمالي نه طراحي و آناليز)
1-1-نصب پايگاه داده
1-2- ساختن يك جدول
2- دلفي
2-1- روشهاي اتصال به پايگاه داده
2-2-شناخت ADOConnection
2-3-شناخت AdoTable
2-4-شناخت AdoQuery
2-5-خواندن داده ها از جداول
2-6-ذخيره داده ها در جداول
2-7- يك پروژه كوچك

vcldeveloper
چهارشنبه 06 آذر 1387, 12:22 عصر
به احتما زياد دوستان دنبال نوشتن يك برنامه با يك پايگاه داده هستند.
اگر هدف تاپیک این باشه، باید به بخش کار با بانک های اطلاعاتی در دلفی منتقل بشه.

matinebi
چهارشنبه 06 آذر 1387, 12:44 عصر
بهتره به یکی از شاخه هایی که آقای کشاورز گفتند برویم تا مطالب منسجم شود
به نظر من بهتره از برنامه کلاینت سرور که داده های بانک اطلاعاتی را بین کلاینت ها و سرور منتقل می کند
شروع کنیم

en.kamali.ir
چهارشنبه 06 آذر 1387, 13:09 عصر
دوستان عزیز سلام .
خوشحالم که می بینم سایتی که به تازگی در آن عضو شدم سایتی فعال است .
چند مطلب :
1 . توضیح دوستمون در رابطه با برنامه نویسی تحت شبکه بسیار عالی بود و مطلبی رو یاد گرفتیم .
2 . هدف من از آغاز این تاپیک نوشتن برنامه کلاین و سرور است در واق یک چیزی مثل همون برنامه دوستان قبل که یک کلوپ بود . چیزی در اون سطح و اون شکل .
3 . در اون بحث من دیدم که دوستان با جدیت سعی دارند برنامه ای جامع و کاربردی بنویسند که البته هدف من این نیست . تقاضا دارم فقط راه اصلی برای نوشتن یک برنامه پیموده بشود . و از شاخه شاخه کردن و ریز شدن در جزییات برنامه پرهیز کنیم . مثلا این مطلب که اگر مشتری cd کرایه ای را شکست چه کار کنیم را ما لازم نداریم . یا حتی اگر تاخیر داشت جریمه را در نظر نمیگیریم . به طور واضحتر هدف را یک برنامه آموزشی قرار دهیم نه یک برنامه کاربردی !!
دوست عزیزمون فرمودند جای این تاپیک نا مناسب است . عذر خواهی منو بپذیرید . همونطور که می دونید تازه وارد هستم . .
خواهش :
تا روز جمعه همین هفته این تاپیک رو همینطور ادامه می دهیم . اجازه می دهیم که مشتاقانش به آن وارد شوند . لطفا برای دسته بندی شدن دوستانمون در 2 مطلب زیر عضو شوید یکی دانشجویان که برای یادگیری اومدند و دپیگری اساتید که برای کمک به ما وارد این تاپیک می شوند . نحوه ثبت نام هم ارسال یک پیام تشکر باشد .
البته چون من خودم نمیتونم تشکر کنم اینجا اعلام می کنم که در بخش دانشجو عضو می شوم . باتشکر
محمد کمالی

en.kamali.ir
چهارشنبه 06 آذر 1387, 13:10 عصر
دانشجویان تشکر کنند برای عضویت

en.kamali.ir
چهارشنبه 06 آذر 1387, 13:11 عصر
با تشکر کردن از این پیام در قسمت اساتید عضو شوید .

vcldeveloper
چهارشنبه 06 آذر 1387, 13:47 عصر
لازم نیست بصورت دانشجو و استاد تقسیم بشید....
یک سناریو تعریف کنید، آن سناریو را به چند بخش کلی تقسیم کنید، و بعد کار را با این بخش های کلی شروع کنید. و مراحلی که انجام میدید را اینجا ثب کنید. هر جا که به مشکلی برخورد کردید، آن را در همین تاپیک مطرح کنید تا هر کاربری که می تواند آن مشکل را توضیح دهد و راه حلی برای آن ارائه کند، اظهار نظر کند. اگر هم درباره اجزاء یک بخش مطمئن نیستید، آن را بصورت یک سوال در همین تاپیک مطرح کنید؛ مثلا، برای نوشتن برنامه X چه مراحلی نیاز است؟
کاربرانی که بتوانند جواب بدند، هر کدام مراحلی را ذکر می کنند. وقتی بر سر مراحل انجام کار به توافق رسیدید، ممکن هست در جزئیات هر مرحله باز هم نیاز به پرسش و نظرسنجی داشته باشید.

en.kamali.ir
چهارشنبه 06 آذر 1387, 14:14 عصر
علی جان با نظر شما مخالفم . قصدمون از ایجاد این تاپیک ایجاد یک کلاس درس است .
پیشنهاد من این است که یک مدیر پروژه ای را مدیریت کند که به انحراف نرود و همه با هم برنامه رو توی همین تاپیک بنویسیم .
به هر حال دیدن روند تکت به تک مراحل برای افراد مبتدی در این تاپیک هدف ماست .

en.kamali.ir
چهارشنبه 06 آذر 1387, 14:16 عصر
این جدا سازی هم برای این بود که افرادی که این تاپیک را ملاحضه می کنند از وجود افراد در کنار خودشون مطلع بشوند . و در واقع یک علاقه مندی در دوستان برای پیگیری به وجود آید .

manvaputra
چهارشنبه 06 آذر 1387, 15:10 عصر
به نظر من بهتره برای شروع کار قضیه رو محدود به یک LAN کنید یعنی طراحی برای شبکه های داخلی البته در قدم اول.
یه چیز دیگه هم هست اگه قراره جنبه آموزشی داشته باشه بهتره با یک مسئله ساده شروه بشه اگر مثلا بخواهید یه دفعه از دیتابیس تحت شبکه شروع کنید از همون اول دو راه ایجاد میشه یکی همون شبکه نویسی و دیگری مسائل خاص دیتا بیس در شبکه.

پس کلا باید از پایه شروع بشه مثلا برقراری کانکشن TCP یا UDP و صد البته مباحث مربوط به مالتی تردینگ که فکر می کنم بخش غیر قابل چشم پوشی و مهمی در برنامه نویسه شبکه است.

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

as13851365
چهارشنبه 06 آذر 1387, 17:09 عصر
کار خوبی رو شروع کردید من قبلا دنبالش رفتم و یک چیزهایی رو به کمک دوستان فهمیدم ولی کمی تا نیمه ابری بیخیالش شدم ولی اگه توی این تایپیک به صورت جدی شروع کنید من هستم ( البته به صورت دانشجویی ها یعنی برای یاد گرفتن وگرنه ما کوچیکتر از اونهایی هستیم که بخواهیم یاد بدیم )

امیدوارم که برنامه ای رو شروع کنید تا همه استفاده کنیم.

en.kamali.ir
چهارشنبه 06 آذر 1387, 20:52 عصر
از میدیر خوبمون علی جان باز هم تشکر می کنم .
اما چرا اینقدر عجول هستید .
عرض کردم تا جمعه صبر کنید و نظراتتون رو بفرمایید تا به وقتش . تا جمعه که همدیگر رو بشناسیم و هدفمون رو متحد کنیم .
تقاضا :
لطفا مسئولیت این پروژه رو به من بسپارید به عنوان کسی که این تاپیک رو شروع کردم .
اگر تونستم که تا پایان ادامه بدم که خدا رو شکر در غیر این صورت مسئولیت رو به کسه دیگری واگذار می کنم .
خودم رو پیشنهاد دادم چرا که با اهداف این تاپیک از همه بیشتر آشنایی دارم .
تشکر می کنم از همه دوستانی که اهمیت دادند . امیدوارم در پایان تاپیک رو داشته باشم که باز هم وارد سایت بشم .
محمد کمالی

en.kamali.ir
چهارشنبه 06 آذر 1387, 20:55 عصر
:لبخند:راستی اجازه دهید صورت مسئله و نیازمندی های مسئله رو هم من پیشنهاد بدم . مخالفین می توانند خشونت به خرج دهند:لبخند:

vcldeveloper
پنج شنبه 07 آذر 1387, 01:56 صبح
لطفا مسئولیت این پروژه رو به من بسپارید به عنوان کسی که این تاپیک رو شروع کردم .
تاپیک تا زمانی که در آن کاری خلاف قوانین سایت انجام نشده، در اختیار کاربر ایجاد کننده آن هست. شما می تونید طرح مورد نظر خودتان را پیش ببرید. مطالبی هم که گفته میشه، اظهار نظر شخصی هست.

amin_alexi
پنج شنبه 07 آذر 1387, 09:03 صبح
سلام!

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

en.kamali.ir
پنج شنبه 07 آذر 1387, 14:36 عصر
سلام امشب ساعت 11.5 الی 12 در سایت سوال اصلی مطرح می شود . از دوستانی که در این ساعت می توانند در سایت حضور داشته باشند تقاضا می کنم که حضور به هم رسانند تا به صورت آن لاین بتوانیم با هم صحبت کنیم با تشکر
محمد کمالی

zman123456
پنج شنبه 07 آذر 1387, 19:56 عصر
عزیز اگه دوست داری کسی چیزی یاد بگیره بهتره قبل از اینکه بی خیال بشه شروع کنی.
خیلی ها اینقدر وقت برای از دست دادن ندارن.
با تشکر

manvaputra
پنج شنبه 07 آذر 1387, 20:44 عصر
عزیز اگه دوست داری کسی چیزی یاد بگیره بهتره قبل از اینکه بی خیال بشه شروع کنی.
خیلی ها اینقدر وقت برای از دست دادن ندارن.
با تشکر

کاملا با گفته این دوست عزیز موافقم تاپیک به صفحه سه رسید ! به نظر من برو سر اصل مطلب از همین اول دراه دلزدگی ایجاد میشه

amin_alexi
جمعه 08 آذر 1387, 00:18 صبح
سلام

نقل قول: برنامه نویسی تحت شبکه (وارد شوید )
سلام امشب ساعت 11.5 الی 12 در سایت سوال اصلی مطرح می شود . از دوستانی که در این ساعت می توانند در سایت حضور داشته باشند تقاضا می کنم که حضور به هم رسانند تا به صورت آن لاین بتوانیم با هم صحبت کنیم با تشکر
محمد کمالی
و اما او نیامد !:چشمک:

en.kamali.ir
جمعه 08 آذر 1387, 00:26 صبح
سلام بد قولی من رو ببخشید به خدا برق رفته بود همین الان اومد .
به هر حال الان ساعت یک است و اولین ساعت های جمعه برنامه از الان آغاز شد .
قراره برنامه ای ساده بنویسیم .
یک فرهنگ لغت .
این برنامه برای هر آدم مبتدی که بتونه با هر زبان برنامه نویسی کار کنه یک برنامه پیش پا افتاده است .
درسته هدف هم همینه .
برنامه دارای یک بانک است شامل :
1. لغت
2. معنی
3. توضیحات
توانمندی های برنامه :
1 . درج اطلاعات
2. ویرایش
3. جستجو
4 . گزارش قابل چاپ
ویژگیهای برنامه .
این برنامه قادر است از طریق شبکه اجرا شود به نحوی که افراد یک شبکه lan بتوانند به طور هم زمان از تمامی اجزای برنامه استفده کنند .
همچنین در هر لحظه تمام کاربران از تغییرات بانک مطلع شوند .

en.kamali.ir
جمعه 08 آذر 1387, 00:30 صبح
توجه کنید دوستان ما قصد نوشتن یک برنامه حرفه ای رو نداریم و فقط قصد داریم با مبانی برنامه نویسی تحت شبکه آشنا شویم (البته اون بخشی از شبکه که به موضوع مربوطه )
ممکنه بعضی از دوستان بفرماییند که مثلا باید کاری کنیم که کاربران نتوانند لغات تکراری به بانک اضافه کنند . گرچه این کار کار ساده ای است اما هدف ما این نیست . به کاربردی بودن برنامه توجه نکنید و فقط به شناخت عناصر و همچنین نحوه ایجاد عناصر دقت کنیم .

en.kamali.ir
جمعه 08 آذر 1387, 00:34 صبح
سوال نخست :
چه بانکی را برای این کار پیشنهاد می کنید .؟؟
در جواب دادن به حجم اطلاعات توجه نکنید بلکه به امنیت و سادگی و همچنین کاربردی بودن آن در شبکه توجه فرمایید .
یکی از دوستان برای طراحی بانک و همچنین توضیح در مورد نحوه ایجاد این بانک داوطلب شوند .
با تشکر
محمد کمالی

amin_alexi
جمعه 08 آذر 1387, 11:51 صبح
سلام
مساله بانک !
مساله مکانیسمی که قراره با اون به بانک وصل شد ( از ADO استفتده می خوای بکنی یا از DbExpress یا BDE , ....)
برنامه به صورت Client و Server قراره اجرا بشه یعنی یک برنامه سرور و یک برنامه Client یا فقط یک برنامه وجود داره که تو هر سیستم قراره ConnectionString رو عوض کنیم !

پیشنهاد من
برنامه Client ,Server با معماری 3 لایه و با بانک SQL Server با استفاده از Sucket Connection که یک برنامه سرور موجود باشه که مدیریت Client ها رو بر عهده بگیره و برنامه های Client تنها در صورتی که برنامه Server اجرا باشه بتونن اطلاعات رو بگیرن
در سمت Client با ClientDataSet کار کنیم !

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

امید امرایی
جمعه 08 آذر 1387, 13:16 عصر
ضمن تشکر از amin_alex (http://barnamenevis.org/forum/member.php?u=47928) عزیز
بنده هم با نظر ایشون موافقم و معتقدم که ایجاد برنامه ای تنها با یک بانک اطلاعاتی راه دور که تمام هم و غمش تغییر IP باشه رو نمی شه برنامه نویسی شبکه گفت .
بنده عینا پیشنهادات دوست عزیزمون رو پیشنهاد می کنم و امید وارم بحث به نتایج خوبی برسه .

en.kamali.ir
جمعه 08 آذر 1387, 13:26 عصر
دوستان عزیز تا شب وقت دارند که نظرات خود را در باره بانک بفرماییند در غیر این صورت نظر دوستمون امین جان اعمال می شود . به همون نحوی که خودشون فرمودند
با تشکر
محمد کمالی

mortezakiaee
جمعه 08 آذر 1387, 14:23 عصر
ببخشید من هنوز متوجه نمی شم که چرا می خواید دو برنامه(یکی رو سرور یکی رو کلاینت) داشته باشید؟ چرا از یه برنامه رو سرور و یه shortcut رو کلاینت استفاده نمی کنید مثل همکاران سیستم. با این کار 90% ترانزاکشن ها رو SQL منتقل می شه و UI شما سرعتش بالاتر می ره. با یه ماژول launcher می تونید کاربراتون رو کامل کنترل کنید و هر تغییری رو به راحتی در همه کلاینت ها اعمال کنید:متفکر:

en.kamali.ir
جمعه 08 آذر 1387, 15:24 عصر
آقا مرتضی من این کار رو امتحان کردم اما مثلا در بانکی مثل bde کاربران از تغییرات کاربران دیگر در بانک متوجه نمی شوند اون هم تا زمانی که تمام کاربران برنامه های خود را ببندند و مجددا باز نمایند .
در ضمن کاربران وقتی short cut یک برنامه رو باز می کنند در واقع از بانکی که روی سرور هست یک بافر گیری می کنند . همچنین قصد داریم با اصول برنامه نویسی در شبکه آشنا بشیم .

vcldeveloper
جمعه 08 آذر 1387, 16:04 عصر
ببخشید من هنوز متوجه نمی شم که چرا می خواید دو برنامه(یکی رو سرور یکی رو کلاینت) داشته باشید؟ چرا از یه برنامه رو سرور و یه shortcut رو کلاینت استفاده نمی کنید مثل همکاران سیستم. با این کار 90% ترانزاکشن ها رو SQL منتقل می شه و UI شما سرعتش بالاتر می ره. با یه ماژول launcher می تونید کاربراتون رو کامل کنترل کنید و هر تغییری رو به راحتی در همه کلاینت ها اعمال کنید
همچین کاری نیاز داره که اولا همه کلاینت ها به پوشه اشتراک گذاشته شده دسترسی داشته باشند، که همیشه ممکن نیست، ثانیا، وقتی فایل را از روی سرور اجرا می کنید، برنامه روی حافظه سرور اجرا نمیشه، بلکه یک نسخه از آن در سیستم کلاینت Cache میشه، و در حافظه کلاینت اجرا میشه. اگر قرار باشه برنامه روی سرور اجرا بشه، باید از برنامه هایی مثل Remote Desktop که از Terminal Service ویندوز استفاده می کنند، استفاده کرد. نکته آخر هم اینکه، همیشه برنامه کلاینت Stand-alone نیست، بلکه گاهی نیاز به نصب برخی از اجزای خودش در سیستم کلاینت داره. پس اگر برنامه کلاینت فقط یک EXE باشه و وابستگی به چیز دیگه ایی نداشته باشه، فرقی نمیکنه که یک Shortcut از آن درست کنید و در کلاینت از آن استفاده کنید، یا خودِ فایل را در سیستم کلاینت کپی کنید؛ در هر دو حال، برنامه در حافظه کلاینت اجرا خواهد شد.

en.kamali.ir
جمعه 08 آذر 1387, 22:37 عصر
امین جان لطفا بانک اطلاعاتی خودت رو معرفی کن و نحوه ایجاد اون رو برای دوستان تشریح کن .
ممنونم .
همه ما منتظر هستیم

manvaputra
جمعه 08 آذر 1387, 23:34 عصر
دوست عزیز پس بهتره عنوان رو بذار بانک اطلاعاتی تحت شبکه .

amin_alexi
شنبه 09 آذر 1387, 08:45 صبح
سلام
من واسه شروع به صورت خیلی ساده عمل می کنم :لبخندساده:
ابزار مورد نیاز
Delphi7 , SQL Server 2000
در DB فقط یک جدول با مشخصاتی خواهید دید ساختم .. خیلی ساده :چشمک:
این هم Script مربوط به ساخت DB به همراه فایل Mdf و Ldf هر کدوم رو که راحتتر بودید استفاده کنید !
به همراه فایلهای Proje ساخته شده در دلفی (در اولین فرصت توضیحات رو میدم :بامزه: ... حد اکثر تا 12 امشب ... چون یک مقدار کار دارم :گیج:)
این رو گذاشتم که یه موقع بد قولی نکرده باشم ! :چشمک:

amin_alexi
شنبه 09 آذر 1387, 11:23 صبح
سلام :چشمک:
من ابتدا یک Project Group ساختم
File -> New -> Other -> New -> Project Group
بعد 2 تا Project دیگه به این Project Group اد کردم
File -> New -> Other -> New -> Application که به نامهای Client و Server ذخیره کردم !
حال از منو View -> Project Manager رو فعال و روی پروژه Server دبل کلیک می کنیم تا فعال بشه ... و بعد از مسیر زیر یک Remote Data Module به پروژه اضافه می کنیم !
File -> New -> Other -> New -> Multitier -> Remote Data Module
در بخش CoClass Name اسم RmtDMServer را تایپ و OK رو می زنیم !
تا این قسمت کارایی رو تو ضیح دادم که در پست قبلی با پیوست ضمیمه کردم !!!
در ادامه قصد دارم تعداد Connection هایی که به Server متصل هستند رو شناسایی کرده و از تعداد اونها مطع بشیم
ادامه در اولین فرصت ... :لبخند:

amin_alexi
شنبه 09 آذر 1387, 21:24 عصر
از اساتید بزرگوار هر کدوم دیدن در توضیحات من اشتباهی وجود داره یا نکته تکمیلی هست راهنمایی کنن !

من سعی می کنم پروژه رو قدم به قدم پیش ببرم ...
شما هم قدم به قدم خودتون انجام بدین تا اگه مشکلی داشتین همین اول بپرسین !! :متفکر:

سرور برنامه می تواند یک سری سرویسهایی برای Client فراهم کند ... :گیج:
این سرویسها می تواند شامل ارتباط با پایگاه داده و یا یک سرویس برای انجام محاسبات پیچیده باشد !! :کف:
وقتی داشتیم Remote Data Module رو انتخاب می کردیم در صفحه ای که CoClass Name رو انتخاب کردیم یک گزینه Combo به نام instancing وجود داشت ! که ما Multiple Instance رو انتخاب کردیم !
در این حالت برای هر Client در سمت Server تنها یک نسخه از فایل Exe سرور اجرا میشود !
واگر Single Instance رو انتخاب می کردیم به ازای هر Client یک نسخه از سرور ایجاد میشه !؟
در حالت Multiple یک کپی از نسخه سرور ایجاد میشه اما ... به ازای هر Client یک Remote Data Module نمونه سازی میشه ! (نمی دونم چه قدر یاASP.NET آشنا هستید ... :متفکر: مثل یک Application که اجرا میشه و Session که به ازای هر کاربر یک نمونه تولید میشه !) .........
حالا با توجه به این نکته که فهمیدیم به ازای هر Client یه Module ساخته میشه ...
می تونیم در رویداد TRmtDMServer.RemoteDataModuleCreate این موضوع رو اداره کنیم (در ادامه توضیح می دم)
تا اینجا برنامه Sesrvr آماده شده اگه این برنامه یک بار اجرا بشه این برنامه Register میشه !!!
برای برنامه Client باید ابتدا برنامه Client رو در Project Group فعال کنید و در فرم اصلی از تب DataSnap یک SocketConnection روی فرم می زاریم ... چند خاصیت این Object باید Set شود . که من در قسمت Host اسم Computere خودم Soft1 رو می زارم ! (یک Edit میزارم که بشه اسم Server رو در زمان اجرا عوض کرد ... شما نام Computer خودتون رو بزارین)
حالا بخش مهم ! ... در بخش سرور Name شما الان باید بتونید نام Server رجیستر شده (DataModule) رو داشته باشید !
اما اگه الان بخواین اون رو انتخاب کنید با یک Error مواجه میشید ! :عصبانی++:
علت : :لبخند: خیلی ساده !!!
چون ما از SocketConnection استفاده کردیم باید یک برنامه برای مدیریت Socket ها داشته باشیم ... :ناراحت: یعنی باید خودمون بنویسیم !!! :اشتباه:
نه بابا !!! :لبخند:
دلفی خودش واسه ما این رو گذاشته !!! :تشویق: و این برنامه باید در حال اجرا باشه تا بتونیم ServerName رو انتخاب کنیم ! (اگر در خط فرمان در پنجره Run این برنامه رو تایپ کنید scktsrvr.exe برنامه در قسمت TaskBar در اجرا میشه و Source رو هم در مسیر نصب E:\Program Files\Borland\Delphi7\Source\Vcl می تونید پیدا کنید !!) حالا می تونیم در قسمت ServerName یک سرور به نام Server.RmtDMServer را انتخاب می کنیم (به شرطی که یک بار برنامه Server رو اجرا کرده باشیم!) بعد از انتخاب قسمت ServerGUID به صورت Auto پر میشه !:بامزه:
یک Button می زاریم روی فرم و دستور زیر رو برای Connect شدن مینویسیم !

SocketConnection1.Host:=edtServerName.Text;
SocketConnection1.Connected:=Not SocketConnection1.Connected;
IF SocketConnection1.Connected Then btnConnect.Caption:= 'DisConnect'
Else btnConnect.Caption:='Connected';

حال اگه برنامه Client رو اجرا کنید ... و Connect رو بزنید میبینید که برنامه Server به صورت Auto اجرا میشه !!
Source رو Attach میکنم ..اما توضیح تعدادConnectionهای متصل به سرور رو بعدا توضیح می دم ... (ولی کدش رو نوشتم ... :چشمک:)
چند تا برنامه Client رو اجرا کنید و Connect رو بزنین و نتیجه رو ببینین !:قلب:
تا اینجا رو یک بار خودتون جلو برین و اگه نظر و سوالی دارین بپرسین تا ادامه رو داشته باشیم !:لبخندساده:

در ادامه (اگه سوالی نداشتین) کد مربوط به تعداد Connection های متصل به سرور رو میگم !

amin_alexi
یک شنبه 10 آذر 1387, 12:31 عصر
اما از Source بالا توضیح یک بخش مونده بود که الان توضیح میدم ! (در بخش پروژه Server )
همان طور که گفتم :لبخندساده: هنگامی که یک Client جدید به برنامه Connect می شه به ازای اون Client یک Remote Data Module ایجاد میشه !
دو رویداد مهم در این بخش وجود دارد ... یکی مربوط می شه به OnCreate و OnDestroy که از نام اونها معلومه کی فراخونی میشن !:گیج:
من برای اینکه تعداد Connection های متصل رو بتونم بشمرم در رویداد Create با PostMessage یکی به شمارنده در فرم Frm_Server اضافه می کنم و در رویداد Destroy یکی کم می کنم ...


procedure TRmtDMServer.RemoteDataModuleCreate(Sender: TObject);
begin
PostMessage(Frm_Server.Handle,UM_CONNECT,1,0);
end;
(
اگر می خوایید بدونید PostMessage چه کار می کنه :متفکر:
http://barnamenevis.org/forum/showthread.php?t=106053
کارش شبیه SendMessage ... باز خودتون یه Search بزنید
)
در فرم Frm_Server هم واسه اینکه Message فرستاده شده دریافت بشه باید کاری کرد !
که با این تابع این کار انجام میشه !

Procedure UMConnect(var Msg:Tmessage);message UM_CONNECT;
خوب حالا یک توضیح مختصر هم در مورد برنامه Client ....
در برنامه Client در فرم من یک Edit گذاشتم که بشه نام Computer سرور رو داد ...
می شه به جای نام Computer سرور از IP استفاده کنید ... برای این کار می تونید از خاصیت SocketConnection1.Address استفاده کنید ...
برای تغیر Port هم می تونید از این SocketConnection1.Port استفاده کنید .

من سعی می کنم آهسته و پیوسته برم جلو ... :لبخند:
اگه یه موقع دیدید بین Post هایی که می زنم خیلی تاخیر افتاد (منظورم بیشتر از 2 روزه ! :متفکر: !) بهم یادآوری کنید :چشمک:

moho63
یک شنبه 10 آذر 1387, 15:47 عصر
سلام و خسته نباشید
من هم کارهایی که گفتی انجام دادم و هم برنامه ای که شما گذاشته بودید رو اجرا کردم ولی در موقع اجرا وقتی دکمه کانکت رو میزنم Error می ده دو تا Error که عکسشونو ضمیمه کردم لطفا من رو راهنمایی کنید .
ممنونم

amin_alexi
یک شنبه 10 آذر 1387, 16:28 عصر
سلام
دوست عزیز حتما یک بار برنامه Server رو اجرا کن ! باید یک بار اجرا بشه !
شما برنامه scktsrvr.exe رو اجرا کردی !؟ اگه نه که در خط فرمان Run این رو بنویس scktsrvr.exe و اجرا کن ...
و بعد باید آدرس سرور رو درس وارد کنی ! ( من Soft1 گذاشتم) شما باید اسم Computer خودتو بزاری !؟
یا اگه در شبکه هستی و سرور در یک سیستم دیگه هست می تونی به جای Host از Address استفاده کنی و IP رو بزاری !
اگه همه اینها رو تست کردی نشد .. یک بار خودت مراحل رو از اول برو ببین برنامه خودت اجرا میشه !

از دوستان کسی اجرا کرده !
اونهایی که DownLoad کرده اند ، کسی اجرا کرده ؟ اگه مشکلی داشت بقیه دوستان هم بگن ....
تا به بخش ارتباط با DataBase وارد نشدیم کسی تا این بخش مشکل نداشته باشه ...
ممنون

en.kamali.ir
یک شنبه 10 آذر 1387, 20:17 عصر
دوستان عزیز با جواب هاشون اساتید رو دل گرم فرمایند .

manvaputra
یک شنبه 10 آذر 1387, 20:18 عصر
بابا مسئله هنوز شروع نشده کلی وسعت گرفته فکر نمی کنم با این روند برای مبتدی ها سودی داشته باشه

حرفه ای
یک شنبه 10 آذر 1387, 20:39 عصر
دوستان خوبم سلام
حدود دو سال است كه سري به سايت برنامه نويس نزده بودم :اشتباه:

اما حدود دو سال پيش مقاله اي تحت عنوان آموزش لایه میانی ( +COM ) در سبک MultiTier در اين سايت قرار دادم كه مي توانيد از لينك زير اطلاعات خوبي در اين خصوص مشاهده نماييد

http://barnamenevis.org/forum/showthread.php?t=59232

شايد تا دو سال ديگر خداحافظ :قلب::قلب:

en.kamali.ir
یک شنبه 10 آذر 1387, 23:07 عصر
بابا مسئله هنوز شروع نشده کلی وسعت گرفته فکر نمی کنم با این روند برای مبتدی ها سودی داشته باشه
برنامه نویسی در این سطح کاربران مبتدی نداره یعنی افرادی که این تاپیک رو مطالعه می فرمایند با برنامه نویسی آشنا هستند ومی خواهند اطلاعات خود را فزایش دهند .
تاپیک روند خوبی داره . از دوستان تشکر می کنم

amin_alexi
دوشنبه 11 آذر 1387, 08:02 صبح
سلام

بابا مسئله هنوز شروع نشده کلی وسعت گرفته فکر نمی کنم با این روند برای مبتدی ها سودی داشته باشهاگه شما قدو به قدم با ما پیش برین فکر میکنم خیلی سخت نباشه !
تو این مبحث اصطلاحات جدید زیاده ! شما یا سایره دوستان اگه هر جا مطلبی رو متوجه نشدید بگین تا توضیح بدم !:چشمک:
من هم به همین علت دارم قدم به قدم جلو می رم ... و یههووو کلی مطلب نمی گم ... چون هدف آموزشه نمی خوام مقاله ای وار جلو برم و خیلی دوست دارم با دوستان به حالت مباحثه جلو بریم تا جایه مبهمی نمونه و هر کی علاقه داره بتونه استفاده کنه و اگه فکر میکنید روند سرعت بالایی داره فاصله بین Post های آموزشی جدید رو 2 روز یا 3 روز در میان میزنم یا بیشتر تا هم خودتون کار کنید هم بتونیم بحث کنیم و رفع اشکال انجام بشه !:لبخندساده:

moho63
دوشنبه 11 آذر 1387, 09:09 صبح
سلام دوباره
ببخشید من همه کار هایی که گفتی انجام میدم ولی این Error ها رو بازم می ده نمی دونم چرا وقتی برنامه سرور رو اجرا می کنم در رجیستری ثبت نمی شه و کد رجیستری در قسمت serverGUIDِ نمیاد.

manvaputra
دوشنبه 11 آذر 1387, 09:53 صبح
برنامه نویسی در این سطح کاربران مبتدی نداره یعنی افرادی که این تاپیک رو مطالعه می فرمایند با برنامه نویسی آشنا هستند

دوست عزیز منظور من تر مبتدی توی برنامه نویسی نیست توی این مبحث خاصه

amin_alexi
دوشنبه 11 آذر 1387, 10:00 صبح
سلام دوباره
ببخشید من همه کار هایی که گفتی انجام میدم ولی این Error ها رو بازم می ده نمی دونم چرا وقتی برنامه سرور رو اجرا می کنم در رجیستری ثبت نمی شه و کد رجیستری در قسمت serverGUIDِ نمیاد.
از برنامه ای که من دادم استفاده می کنید یا برنامه رو خودتون از اول نوشتید !
اگه خودتون نوشتید بزارید اینجا تا ببینم !
در ضمن شما اول باید فیلد Host یا Address رو پر کنید ... بعد در ServerName نامی که Register شده رو انتخاب کنید و قسمت ServerGUID به صورت AUTO پر میشه !

moho63
دوشنبه 11 آذر 1387, 11:35 صبح
سلام دوستان
توی اونجایی که می خای نام سرور رو انتخاب کنی خالیه رجیستر شده ها ولی خالیه .وقتی هم که connected رو می خای True کنی این خطا رو میده.

amin_alexi
دوشنبه 11 آذر 1387, 12:49 عصر
سلام دوستان
توی اونجایی که می خای نام سرور رو انتخاب کنی خالیه رجیستر شده ها ولی خالیه .وقتی هم که connected رو می خای True کنی این خطا رو میده.
سعی کن وقتی سوال می پرسیم یه جوابی بدی!!!؟
من پرسیدم !

از برنامه ای که من دادم استفاده می کنید یا برنامه رو خودتون از اول نوشتید !
.....
ServerGuid رو پاک کن ... ServerName رو پاک کن .... برنامه scktsrvr.exe رو اجرا کن .... برنامه سرور رو اجرا کن ... بعد بیا دوباره ServerName رو ببین میتونی انتخاب کنی ‍‍!!!
اگه نشد دیگه نمی دونم !

vcldeveloper
دوشنبه 11 آذر 1387, 16:55 عصر
چرا بحثی که قرار بود به شکل ساده به ساختن یک برنامه Client\Server بپردازه را با مطرح کردن یک پروژه 3-tier، اون هم با استفاده از سوکت، پیچیده کردید؟!

amin_alexi
دوشنبه 11 آذر 1387, 18:43 عصر
سلام خدمت آقای کشاورز عزیز
با توجه به این پیشنهاد من ... (در پست 28)


سلام
مساله بانک !
مساله مکانیسمی که قراره با اون به بانک وصل شد ( از ADO استفتده می خوای بکنی یا از DbExpress یا BDE , ....)
برنامه به صورت Client و Server قراره اجرا بشه یعنی یک برنامه سرور و یک برنامه Client یا فقط یک برنامه وجود داره که تو هر سیستم قراره ConnectionString رو عوض کنیم !

پیشنهاد من
برنامه Client ,Server با معماری 3 لایه و با بانک SQL Server با استفاده از Sucket Connection که یک برنامه سرور موجود باشه که مدیریت Client ها رو بر عهده بگیره و برنامه های Client تنها در صورتی که برنامه Server اجرا باشه بتونن اطلاعات رو بگیرن
در سمت Client با ClientDataSet کار کنیم !

من این روش رو گفتم چون در این سایت خیلی کم دیدم در این موارد زیاد بحث شده باشه ... (معمولا اکثر برنامه های تحت شبکه فقط کافیه که ConnectionString رو عوض کنی تا تحت شبکه بشه کار کنه) بهتره یک کاری که کمتر بچه ها آشنا هستند رو شروع کنیم ...
من خودم تجربه عملی در این مورد رو داشتم و تا اونجا که بشه کمک می کنم ... اگه این طرح رو قبول کردین خودم اسارت رو واسه آموزش می زنم ...
__________________ که دوستان تایید کردند و پیشنهاد دیگه ای داده نشد ... من این بحث رو شروع کردم فکر کنم دوستان هم به اتفاق موافقند !! :لبخند:

manvaputra
دوشنبه 11 آذر 1387, 20:43 عصر
فکر کنم دوستان هم به اتفاق موافقند !دوست عزیز فکر کنم بیشتر دوستان به اتفاق بی خیال این تاپیک شدند به قول شاعر سکوتم از رضایت نیست

چرا بحثی که قرار بود به شکل ساده به ساختن یک برنامه Client\Server بپردازه را با مطرح کردن یک پروژه 3-tier، اون هم با استفاده از سوکت، پیچیده کردید؟!
دستت درد نکنه

en.kamali.ir
دوشنبه 11 آذر 1387, 22:51 عصر
دوست عزیز کاربر دائمی گرامی فکر نمیکنی تنها سود مورد مطرح شده از سمت شما برای دوستان نا امیدی بوده باشه . من فکر می کنم صحیح تر باشه دست پایین تر ها رو گرفت نه اینکه اونها رو لگد مال کرد . بی خیال شدن دوستان از این تاپیک فکر می کنم یک مقدار بی انصافی باشه میتونی به آمار این تاپیک یک سری بزنی !!!؟؟!!!
در ضمن لطفا به حاشیه ها نپردازید و فقط بحث های مربوط به موضوع مطرح گردد .
از مدیر خوبمون تقاضا می کنم پست های نا مرتبط به موضوع رو حذف کنند . و همچنین پیشنهاد خودشون رو در باره موضوعات این تاپیک بفرمایند .
لطفا در صورت داشتن پیشنهاد اون رو از ما دریغ نکنید و همچنین باید بگم خدا قوت خودتون توی بحث شرکت کنید ما که فقط امین جان رو فعلا می شناسیم . خدایی دستش هم درد نکنه داره واسه همه وقت می ذاره .

en.kamali.ir
دوشنبه 11 آذر 1387, 22:56 عصر
امین جان من توی برنامه server یک بانک گذاشتم و از طریق برنامه client به اون متصل شدم اما وقتی اطلاعات رو تغییر می دم مثلا یک رکورد رو حذف می کنم و برنامه رو می بندم و دوباره باز می کنم می بینم که رکورد حذف یا اضافه نشده . بهتره بگم اطلاعات در بانک ذخیره نمی شه .
eror هم نداره

AliReza Vafakhah
دوشنبه 11 آذر 1387, 23:31 عصر
سلام ببخشید دوستان از سوال که مطرح می کنم از همه پوزش می طلبم

سوال من این است که اگر قرار باشد من برنامه ای بنویسم که این برنامه از بانک اطلاعاتی که در شبکه است استفاده کند

باید چه کار کنم که برنامه من در چند مکان (مثلا اتاق های یک دانشگاه) توسط چندین فرد استفاده شود و با ذخیره و اعمال تغییرات برای تمام کاربران استفاده کنند از این برنامه یک Update Data ایجاد کنم (به روز رسانی داده ها و اطلاعات)

من هنوز تو این قضیه گیر کردم و از دوستان خواهش می کنم که مرا راهنمایی کنند تا موضوع این تاپیک را بهتر و واضعتر فرا بگیرم

با تشکر از همه برنامه نویسان

amin_alexi
سه شنبه 12 آذر 1387, 12:17 عصر
امین جان من توی برنامه server یک بانک گذاشتم و از طریق برنامه client به اون متصل شدم اما وقتی اطلاعات رو تغییر می دم مثلا یک رکورد رو حذف می کنم و برنامه رو می بندم و دوباره باز می کنم می بینم که رکورد حذف یا اضافه نشده . بهتره بگم اطلاعات در بانک ذخیره نمی شه .
eror هم ندارهاز چه طریقی به DataBase وصل میشی !
از چه Componentهای برای وصل شدن به DataBase استفاده می کنی !
تا چند دقیقه دیگه آموزش وصل شدن به DB رو از طریق DataProvider و ClientDataSet میفرستم !


سلام ببخشید دوستان از سوال که مطرح می کنم از همه پوزش می طلبم

سوال من این است که اگر قرار باشد من برنامه ای بنویسم که این برنامه از بانک اطلاعاتی که در شبکه است استفاده کند

باید چه کار کنم که برنامه من در چند مکان (مثلا اتاق های یک دانشگاه) توسط چندین فرد استفاده شود و با ذخیره و اعمال تغییرات برای تمام کاربران استفاده کنند از این برنامه یک Update Data ایجاد کنم (به روز رسانی داده ها و اطلاعات)

من هنوز تو این قضیه گیر کردم و از دوستان خواهش می کنم که مرا راهنمایی کنند تا موضوع این تاپیک را بهتر و واضعتر فرا بگیرم

با تشکر از همه برنامه نویسانبانک اطلاعاتی تحت شبکه مدلهای متفاوتی داvره ... در این تاپیک و تا اینجا من مدل 3tier با استفاده از Socket ها رو داریم بررسی می کنیم ...
در ادامه یا اتمام این بحث مدلهای دیگه ای رو بررسی خواهیم کرد !

amin_alexi
سه شنبه 12 آذر 1387, 12:26 عصر
سلام به دوستان
آمار دانلود قبلی نشانگر استقبال دوستان بود !!! :چشمک:
ممنون از همه ...... :تشویق:
من این بحث رو تا جایی که یک نفر هم پیگیر باشه ادامه میدم تا شاید خیرمون به کسی برسه!:ناراحت:
هر کدام از دوستان که تمایل به ایجاد بحث تدریس جدیدی در مورد برنامه نویسی با پایگاه داده تحت شبکه بودند (حالا هر مدلی) یک تاپیک جدید درست کنن و یک عنوان مناسب بزارن و بقیه دوستان رو واسه آموزش فرا خوانی کنند ... :لبخندساده:
من قول میدم اگه در مورد بحث مربوطه تخصصی داشتم حتما جزء اولین نفرا بیام و کمک کنم ...

و اما .... ادامه بحث :لبخند:

خوب حالا می خوایم اطلاعات رو از سمت Server به Clientها ببریم ! :کف:
ابتدا این BackUp منو بر گردونید یا یه چند خطی اطلاعات وارد DataBase کنید ...
اول می خوایم چند تا Object سمت برنامه Client بزاریم ... واسه دریافت اطلاعات از سمت
Server
یک DbGrid و DBNavigator از تب DataConrol
یک DataSource و ClientDataSet از تب DataAccess
حالا ارتباطها !
DbDrid برای نمایش اطلاعات احتیاج به یک DataSoure داره و ما به خاصیت DataSource اون DataSource1 رو انتساب می دیم و DataSource هم احتیاج به یک DataSet داره که ما در ایم مثال به خاصیت DataSet اون ClientDataSet1 رو انتساب می دیم
و همچنین خاصیت DataSource مربوط به DBNavigator رو به DataSource1 انتساب میدهییم
حالا باید به اطلاعات سمت سرور دسترسی داشته باشیم !!! و اطلاعات رو به ClientDataSet1 بیاریم ! اگه به خواص ClientDataSet1 دقت کنید یک خاصیت به نام RemoteServer و ProviderName داره ... که بعد از انجام تنظیمات سمت سرور در موردش صحبت می کنیم
در حقیقت ما احتیاج به یک فراهم کننده اطلاعات (DataSetProvider) داریم !
ما باید این DataSetProvider رو در سمت سرور آماده کنیم و از اینجا با اون ارتباط برقرار کنیم !!!
میریم به سمت Server ...... --> :لبخند:
در سرور باید با DataBase ارتباط برقرار کنیم واسه این کار در RemoteDataModule که ساختیم (همون که صفحه سفید داره :لبخندساده:) یک AdoConnection می زاریم و ConnectionString و کلیک می کنیم و مقدار دهی می کنیم !!
روی ... کنار خاصیت ConnectionString کلیک کرده تا پنجره ای باز شود Bulid رو میزنیم (ولی آروم بزنید یه موقع دیدید عصبانی بشه Connect نمیشه :لبخند:)
روی Microsoft OLE DB Provider for SQL SERVER دبل کلیک می کنیم تا به تب Connection بره و در قسمت Select Or enter a Server name می تونید "." یا اسم Instanc مربوط به SQL Server رو بزارین (من Software6\sql200 میزارم ) UserName و Password رو هم بزاریم
من User رو sa و Pass رو خالی میزارم و در قسمت Select the database on the server اسم DataBase رو انتخاب می کنیم من نام DicDB رو انتخاب می کنم ...
شما دوستان باید این تنظیمات Connection String رو حتما رو سیستم خودتون جدا گانه انجام بدین
این هم ConnectionString من

Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=DicBD;Data Source=Software6\sql2000حال خاصیت loginPrompt از AdoConnection رو False میزارم
حالا روی RemoteDataModule یک AdoQuery یا AdoTable میزاریم ...
که من AdoQuery میزارم و خاصیت Connection اون رو ADOConnection1 میزارم
ور در خاصیت SQL دستور SQL زیر رو می نویسم

Select * From Wordsحال از تب Data Access یک DataSetProvider روی فرم میزارم و خاصیت DataSet اون رو برابر ADOQuery1 می زارم !
حال یک بار برنامه Server رو کامپایل می کنیم ( بهتر این نکته رو به یاد داشته باشید که بعد از هر تغییری در هر برنامه Client یا Server اون برنامه رو جدا گانه کامپایل کنید !!! )

حالا بر گردیم یه سمت Client ......

حالا scktsrvr.exe رو در Run اجرا می کنیم !!

همونطور که گفتم اگه به خواص ClientDataSet1 دقت کنید یک خاصیت به نام RemoteServer و ProviderName داره که اون رو برابر SocketConnection1 قرار میدیم یعنی این ClientDataset باید برای گرفتن اطلاعات به ُSocketConnection1 وصل بشه که SocketConnection1 هم به برنامه Server وصل شده !
و بعد در خاصیت ProviderName در ClientDataSet روی Combo کلیک می کنیم تا باز بشه و احتمالا الان یک ایتم به نام DataSetProvider1 وجود داره که اون انتخاب می کنیم اگه تو لیست چیزی نبود اون رو دستی بنویسین ...
حالا برای گرفتن اطلاعات کافیه این خط دستور رو بنویسین !

ClientDataSet1.Active:=TRUE که اگه کد رو ببینید من به این روش استفاده کردم

ClientDataSet1.Active:= Not ClientDataSet1.Active;اگه هر دو برنامه رو کامپایل کنید و سپس برنامه Client رو اجرا کنید ... خواهید دید که اطلاعات در DBGrid نمایش داده میشه ! و اگر قطع ارتباط با سرور رو انجام بدین (همون باتنی که با اون به سرور وصل میشین نه باتی که اطلاعات رو دریافت می کنید) میبینید که اطلاعات در ClientDataSet هست و ما با توجه به اینکه به طور مستقیم با سرور در ارتباط نیستیم ولی اطلاعات در Client وجود داره (یکی از مزایای استفاده از ClientDataSet)

در ادامه تغییرات و ویرایش در ClientDataSet و فرستادن تغییرات اعمال شده در ClientDataSet به سرور ... :گیج:

امید امرایی
سه شنبه 12 آذر 1387, 18:42 عصر
بنده يه خورده از مطالب جا موندم اما جهت اطلاع، بحث بسيار خوب و جالب پيش ميره و عده زيادي از دوستان پيگير مطالب هستند در حالي كه ممكنه يك بار هم پست نداده باشن .

manvaputra
سه شنبه 12 آذر 1387, 18:52 عصر
من فکر می کنم صحیح تر باشه دست پایین تر ها رو گرفت نه اینکه اونها رو لگد مال کرد دوست عزیز من توی این مبحث خودم کسی هستم که پایین تر قرار دارم و یکی باید دستموم بگیره پس سو تفاهم نشه برا همین از همون اول گفتم مسئله رو پیچیده نکنید شما هي مي گید دوستان چرا راهنمایی نمی کنن خوب دوست عزیز شما ماشالله اصلا گوش نمی دی به حرف بقیه من هون اول گفتم بابا پله پله تا ملاقات خدا ! شما وقتی میایی مبحث دیتابیس رو توی شبکه مطرح می کنی بیشتر داری سیستم بانک اطلاعاتی رو جلو می بری تا مبحث شبکه رو همونطور هم که می دونید هر دوی موضوع ها موضوع های بزرگی هستند!


از مدیر خوبمون تقاضا می کنم پست های نا مرتبط به موضوع رو حذف کنند . و همچنین پیشنهاد خودشون رو در باره موضوعات این تاپیک بفرمایند .مدیر بنده خدا که نظرشون رو می دن

چرا بحثی که قرار بود به شکل ساده به ساختن یک برنامه Client\Server بپردازه را با مطرح کردن یک پروژه 3-tier، اون هم با استفاده از سوکت، پیچیده کردید؟!
ولی شما چه نه تنها به سوال ایشون جواب ندادید بلکه به راه خودتون ادامه دادید! پس دوست عزیز چرا از همون اول نظر همه رو خواستید ! همه نظر ها که نمی تونه باب میل شما باشه .
و این هم درست نیست اگه یکی مثل من می گه آقا چرا اینقدر سخت شروع کردید بهش انگ دل سرد کردن بقیه رو بزنید.
با تشکر

accpascal
سه شنبه 12 آذر 1387, 19:30 عصر
من تا حالادر این بحث post ندادم(شاید خیلی دیگه هم باشند) ولی از اول آن را پیگیری کرده ام متاسفانه بعضی از دوستان ناخواسته زیادی به حاشیه می پردازند شما لطفا خیلی به حاشیه نپرداخته و کارتان را ادامه دهید

amin_alexi
سه شنبه 12 آذر 1387, 20:54 عصر
سلام دوست عزیز manvaputra (http://barnamenevis.org/forum/member.php?u=45274)
نمیدونم چرا شما دارین شلوغش می کنین :متفکر:

مدیر بنده خدا که نظرشون رو می دن
نقل قول:
چرا بحثی که قرار بود به شکل ساده به ساختن یک برنامه Client\Server بپردازه را با مطرح کردن یک پروژه 3-tier، اون هم با استفاده از سوکت، پیچیده کردید؟!
ولی شما چه نه تنها به سوال ایشون جواب ندادید بلکه به راه خودتون ادامه دادید!
اگه به پست 53 با دقت نگاه کنید من جواب سوال آقای کشاورز عزیز رو دادم و ایشون هم تشکر کردند یعنی جواب قانع کننده بود ولی شما چرا دارین این قدر ......... نمی دونم ...
در هر تاپیک کسی که تاپیک رو ایجاد می کنه با توجه به گفته استاد کشاورز :تشویق:

تاپیک تا زمانی که در آن کاری خلاف قوانین سایت انجام نشده، در اختیار کاربر ایجاد کننده آن هست.و ایشون en.kamali.ir (http://barnamenevis.org/forum/member.php?u=83155) (کاربر ایجاد کننده) هم رضایت خودشون رو اعلام کردند (به همراه تمام کسانی که تشکر کردند و برنامه ها رو Download کردند)
خواهش می کنم دیگه مطلب خارج از موضوع تاپیک نگید تا هم تاپیک قفل نشه و هم از موضوع خارج نشیم ! :عصبانی++:
منم که گفتم

هر کدام از دوستان که تمایل به ایجاد بحث تدریس جدیدی در مورد برنامه نویسی با پایگاه داده تحت شبکه بودند (حالا هر مدلی) یک تاپیک جدید درست کنن و یک عنوان مناسب بزارن و بقیه دوستان رو واسه آموزش فرا خوانی کنند ... :لبخندساده:
من قول میدم اگه در مورد بحث مربوطه تخصصی داشتم حتما جزء اولین نفرا بیام و کمک کنم ...

ممنون از تمام دوستان :چشمک:

manvaputra
جمعه 15 آذر 1387, 10:14 صبح
دوست عزیز امین جان من اگه چیزی گفتم هدفم شلوغ کاری نبوده پس بهتره سو تفاهم ها کنار گذاشته بشه و کارو دوباره با انرژی بیشتر شروع کنی ما هم هستیم کنارتون یا علی

amin_alexi
جمعه 15 آذر 1387, 13:16 عصر
سلام به همه دوستان:لبخندساده:
ممنون خاطر لطفتون ...:قلب:
شرمنده از تاخیر چند روزه ... :خجالت:
باور کنید تنها یک سری مشکلات نذاشت که زودتر بیام ...
از دست کسی هم هیچ دلخوری ندارم
یکی 2 بار که من وقت داشتم Site رو نتونستم باز کنم (فکر کنم دوستان داشتن سایت رو Update می کردند !)
بعد آدم متاهل در سر های خودش رو داره !!! :ناراحت:
خلاصه شرمنده .... :لبخند:
ادامه بحث ...
اما اگه برنامه رو تا اینجا با من پیش اومده باشین دیدید که ما به بانک وصل شدیم و اطلاعات رو خوندیم ....
ولی تغییر و اضافه کردن و ... تنها تا وقتی برنامه در حال اجرا بود قابل مشاهده بود ... و با بستن برنامه تغییرات در بانک ثبت نمی شد ...
مشکل چی بود ؟! :متفکر:
همانطورر که قبلا هم گفته شد اطلاعات به Client می اد و ارتباط با بانک قطع میشه ...
اعمال تغییرات در DataBase ... :لبخندساده:
برای ذخیره تغیرات باید از متد ApplyUpdate از ClientDataSet رو فراخوانی کنیم ... :گیج:
این متدبا توجه به اینکه ClientDataSet به به یکProvider متصل است از طریق اون عملیات Update رو انجام میده !

If ClientDataSet1.ApplyUpdate (0) > 1 then
ShowMessage('Update Faile ')
چند نکته پیرامون ApplyUpdate ...
مقدار ورودی این متد به چه معناست !؟
این مقدار، تعداد Errorهای قابل قبول برای عملیات Update دیتاست ماست !
در اینجا صفر به این معناست که هیچ Errorی قابل قبول نبوده و در صورت برخورد با Error این تغییرات Cancel شوند !
یکی از مهمترین Errorها اینه که ما رکوردی رو تغییر بدیم و کاربر دیگه هم همون رکورد رو تغییر بده و هنگام ثبت تغییرات توسط مااین Error رخ می دهد ! :اشتباه:
من یک Button روی فرم گذاشتم و دستورات زیر رو توی اون نوشتم !


If ClientDataSet1.ApplyUpdates(0)>0 Then
Begin
If MessageDlg('Data Is Changed ... Reload Data ?!',mtConfirmation, [mbYes, mbNo], 0) = mrYes Then
Begin
ClientDataSet1.Active:=False;
ClientDataSet1.Active:=True;
Exit;
End;
End;
Showmessage('Data Saved To Server');

این دستورات سب میشه که اطلاعات با دستور ApplyUpdates به Server بره و ثبت بشه ... و اگر اطلاعات قبلا توسط یک نفر دیگه تغییر کرده باشه یک پیغام ظاهر می شه که می گه اطلاعات تغییر کرده آیا مایلید دوباره اطلاعات رو از سرور بخونید !:چشمک:
برای اینکه ما آخرین تغییرات رو ببینیم می تونیم با متد Refresh از ClientDataSet1 آخرین اطلاعات رو ببینیم !
شما برنامه Cleint رو چند بار اجرا کنید و اطلاعات رو در یک فیلد خاص ویرایش کنید و بعد ثبت کنید و در برنامه دیگه که در حال اجراست همون رکورد رو ویرایش کنید نتیجه رو ببینید !!!
ما تا اینجا به برنامه سرور وصل شدیم و اطلاعات رو گرفتیم و تونستیم به صورا همزمان ویرایش کنیم و ثبت کنیم و ... :تشویق:
این مبحث نکات ریز و درشت خیلی داره ... :گیج:
از اینجا به بعد به عهده شماست !!!! :لبخند:
حالا که با کلیت بحث به مقدار زیادی آشنا شدین با سوالهای جدید این مبحث رو پیشرفت بدین !! :تشویق:
منم تا اونجا که بلد باشم توضیح می دم و اگه موضوع دیگه ای یادم اومد باز مینویسم ....
شما خودتون سعی کنید یه برنامه از اول بنویسید تا با مشکلات آشنا بشین و اینجا مطرح کنید ...
من منتظر سوالهای شما هستم :چشمک:

en.kamali.ir
جمعه 15 آذر 1387, 23:22 عصر
سلام با تشکر .
سوالات :
1 . آیا این نوع برنامه نویسی فقط برای شبکه های محلی است ؟؟ یعنی اگه از طریق اینترنت به سرور متصل شدن امکان پذیر می باشد ؟؟ من از طریق اینترنت رو امتحان کردم نتیجه نگرفتم .
2. نوشتن query ها به چه شکلی است ؟
3 . چگونه میتوان وقتی بانک در سرور تغییراتی پیدا کرد آن را به client ها اطلاع داد ؟؟
4 . چگونه میتوان یک فرم برای گفتگو بین کلاینت با سرور و یا حتی کلاینت با کلاینت گذاشت ؟؟
چگونه میتوان تشخیص داد که چه افرادی در حال حاضر با برنامه در حال کار کردن هستند در واقع مثل یاهو مسنجر ورود و خروج کاربران را بتونیم ببینبم .
ممنون می شم اگه یکی از دوستان برای پاسخگویی اعلام آمادگی کنند .
در ضمن از تمامی بازدید کنندگانی هم که تا حالا در این بحث شرکت نکرده اند دعوت می کنم تا سوالات خودشون رو در این قسمت بپرسند .
با تشکر از همه دوستان به خصوص امین عزیز

amin_alexi
شنبه 16 آذر 1387, 07:56 صبح
سلام
ممنون بابت سوالهایی که پرسیدی ؟! :تشویق:
ولی یکی یکی ، یکی یکی :لبخند:!
تا بشه خوب سرش بحث کرد ....
امیدوارم سایر دوستان هم سوالهای خود را بپرسند و سایر دوستان هم برای جواب دادن آستین بالا بزنن ! :چشمک:

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

یعنی اگه از طریق اینترنت به سرور متصل شدن امکان پذیر می باشد ؟؟
بله ... من از طریق سیستم خودم به سایتم یک DataBase روی اون قرار داره متصل میشم (SQL Server) باید حق دسترسی داشته باشی و یا احیانا اگه لازم باشه باید از Port ی غیر از port پیش فرض SQL Server استفاده کنی !؟

من از طریق اینترنت رو امتحان کردم نتیجه نگرفتم
میشه دقیقا بگی به چه روشی این کار رو کردی !؟ کامل توضیح بده و اگه Error خاصی هم بوجود اومده اینجا بنویس ....
سواهای دیگه بمونه واسه وقتی که این رو جواب گرفتی ... ( یکی یکی ، یکی یکی !!!)

mohsencomputer81
شنبه 16 آذر 1387, 11:57 صبح
کسی میدونه چگونه میشه برنامه تحت شبکه ای نوشت که ConnectionString را بتوان هنگام اجرا و توسط کاربر قابل تغییر باشه؟
منظورم تنظیمات DataBaseName ،SQL_UserName ، SQL_Password و آدرس Server است

amin_alexi
شنبه 16 آذر 1387, 12:15 عصر
کسی میدونه چگونه میشه برنامه تحت شبکه ای نوشت که ConnectionString را بتوان هنگام اجرا و توسط کاربر قابل تغییر باشه؟
منظورم تنظیمات DataBaseName ،SQL_UserName ، SQL_Password و آدرس Server است
دوست عزیز این سوال ربطی به شبکه نداره ! (خواهشا سوالهای مرتبط با موضوع رو بپرسین در ضمن اگه یک Search میزدین در این مورد کلی مطلب گیر می آوردین !!)
ConnectionString یک رشته است که به راحتی میشه تنظیمات اون رو تغییر داد !!

ConnectionString:='Provider=SQLOLEDB.1;Password='+ Password+
';Persist Security Info=True;User ID='+UserName+
';Data Source='+ServerName;

این رو شما یک تابع کن که مقادیر ورودیش Passwordو UserNameو ServerName باشه !

en.kamali.ir
دوشنبه 18 آذر 1387, 14:14 عصر
سلام یه همه دوستان .
شرمنده کخ یک مدته که سر نمی زنم .
متاسفانه مادر بزرگم به رحمت خدا رفته و درگیر این مسایل هستم .
خواهش می کنم فعلا دوستان بحث رو ادامه بدهند تا من هم خودمو برسونم .
با تشکر .
محمد کمالی

zman123456
چهارشنبه 20 آذر 1387, 15:13 عصر
خدایش بیامرزد.از دوستان خواستارم تا برای مادربزرگ ایشون که زحمت تدریس این مطلب رو شروع کردن فاتحه ای خوانده شود تا ما هم در ادای دین به ایشون قدمی برداشته باشیم.

Saeed_m_Farid
چهارشنبه 20 آذر 1387, 16:41 عصر
سلام و خسته نباشید:
یه سوال میپرسم اگه جاش باشه: چرا همچین مبحثی تو این بخش باز میشه درحالی که بخشهایی مثل توسعه نرم افزارهای تحت شبکه (http://barnamenevis.org/forum/forumdisplay.php?f=136) یا http://barnamenevis.org/forum/clear.gif توسعه نرم افزار تحت وب (http://barnamenevis.org/forum/forumdisplay.php?f=137) همچنان دو سه تا تاپیک توشون هست و هیچکس طرفشون نمیره ما هم سوالاتمون پا در هما میمونه
البته اصلا قصد بی احترامی و دخالت ندارم فقط خواستم نظرمو بگم.
ممنون ...

vcldeveloper
چهارشنبه 20 آذر 1387, 16:55 عصر
یه سوال میپرسم اگه جاش باشه: چرا همچین مبحثی تو این بخش باز میشه درحالی که بخشهایی مثل توسعه نرم افزارهای تحت شبکه (http://barnamenevis.org/forum/forumdisplay.php?f=136) یا http://barnamenevis.org/forum/clear.gif توسعه نرم افزار تحت وب (http://barnamenevis.org/forum/forumdisplay.php?f=137) همچنان دو سه تا تاپیک توشون هست و هیچکس طرفشون نمیره ما هم سوالاتمون پا در هما میمونه
سلام،

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

انشاء الله به زودی تاپیک های موجود در تالار اصلی به زیر گروه های مناسب منتقل می شوند.

برای اطلاعات بیشتر به تاپیک زیر رجوع کنید:
http://www.barnamenevis.org/forum/showthread.php?t=134447

amin_alexi
جمعه 22 آذر 1387, 20:24 عصر
سلام به همه دوستان
اول از همه تسلیت می گم بابت فوت مادر بزرگ دوستمون ...
دیدم دوستان سوال نمی پرسن خودم یک نکته مهم به یادم اومد گفتم بنویسم ...

ادامه بحث

اضافه کردن متد به یک Remote Data Module

در این قسمت می خوام نحوه اضافه کردن متد به یک Remote Data Module را برای دوستان توضیح بدم
اگه یادتون مونده باشه گفتم که برنامه Server علاوه بر براهم کردن یک مجموعه داده می تواند یک سری سرویس هایی مثل انجام محاسبات پیشرفته انجام دهد یا مثلا بازگرداندن ساعت سیستم سرور ...
برای اضافه کردن متد باید در Unit مورد نظر در پنجره کد کلیک راست کرده و Add to Interface را انتخاب می کنیم که ما در Unit RtmDM این کار را انجام می دهیم
به عنوان مثال یک تابع که ساعت سیستم را برگرداند
در پنجره باز شده در قسمت Declaration باید خط تعریف عنوان تابع را کامل و صحیح و با پارامتر های استاندارد بنویسیم که من این رو می نویسیم

Function GetServerName:TDateTime;در هنگام تایپ یک Hint برای راهنمایی نمایش داده می شود ... شما در هنگام تایپ به تغییراتی که در Hint می شود دقت کنید .... :گیج:
این تابعی که من نوشتم ..به سادگی هر چه تمام !!

function TRmtDMServer.GetServerName: TDateTime;
begin
Result:=Now;
end;
حالا سمت Client :چشمک:
بک button روی فرم می زارم و کد زیر رو توش مینویسم ...

procedure TFrm_Main.btnGerSrvrTimeClick(Sender: TObject);
begin
ShowMessage(DateToStr(SocketConnection1.AppServer. GetServerTime));
end;
فقط باید دقت کنید که نام تابع رو دقیق همونی که توی Server هست بنویسین
نکته :
اگر می خواهین پارامتر ورودی و خروجی تابع سمت Server از نوع رشته باشه حتما باید به جای String از WideString استفاده کنید ... :چشمک:
حالا شما می تونید بعضی از کارهایی که قراره سمت سرور Check بشه رو به این صورت پیاده سازی کنید
مثلا کاربرانی که می خوان از برنامه استفاده کنن رو ببینین تو DataBase هستند ! واسه این کار یک متد بنویسین که نام و رمز رو بگیره و خروجی Boolean بده ....
یا واسه همین برنامه یک متد بنویسیم که یک کلمه رو بگیره و معنی رو بده ! :تشویق: و .... .

bmanfy
یک شنبه 24 آذر 1387, 16:57 عصر
سلام دوست عزیز .خیلی خیلی خسته نباشی .
ضمن تشکر در مورد مطالبی که توضیح دادی . خیلی خوب گفتی . من دیشب تا صفحه 7 رو خوندم و کار کردم و درست هم جواب داد . ایشالا از اونجا به بعد رو در همین روزها کار میکنم .
اما خوب مسائل و سوالاتی که برای من پیش اومد :
1 . برنامه رو نوشتم وقتی یک رکورد به جدول اضافه میکرم و بعد ApplayUpdate میکردم و Active مربوط به Clintdataset رو False و True میکردم اطلاعاتی که ثبت شده بود رو نشون نمداد و باید برنامه رو دوباره باز میکردم تا اونها رو نشون بده .
البته در این ضمینه خودم دوتا راه به نظرم رسید که :
1-1 Sucktconnection رو Dicconnect و cunnect کنم و دوباره اطلاعات رو بخونم که این به نظرم زیاد منطقی نمیاد .
2-1 مقدار CursorLocation مربوط به AdoConnection و AdoQuery رو از CluClient به CluServer تغییر دادم که این رو هم امتحان کردم جواب داد .
ایا روش درست همینه ؟ روش های دیگر به چه صورته ؟
من برنامه ی کوچکی رو با روشهایی که گفتید نوشتم (SqlServer2005 , Delphi7 ) که میزارم اینجا . اگه زحمتی نیست میشه برنامه ی منو ببینید و در مورد درستی یا نادرستی شیوه ی من نظر بدید .هر چند خارج از دستورات شما چیز زیادی ننوشتم و تنها ثبت و اصلاح و حذف داره .
اگه طلف کنید ببینید ممنون میشم .
چنتا سوالا دیگه هم دارم که ترجیح میدم یه پست دیگه برای اونها بزنم .

bmanfy
یک شنبه 24 آذر 1387, 17:06 عصر
خوب حالا سوال بعدی .
البته این سوال من میشه گفت یک سوال کلیه :
راستش من برنامه ای رو می خوام بنویسم که تحت شبکه باید باشه. که میشه گفت نیاز به دونستن در مورد این زمینه باعث شد که این تاپیک رو پیدا کنم .شاید پس از خواندن مطالب شما نظرم به طور کل در مورد برنامه های تحت شبکه عوض شد .
ایا برنامه ای رو که می خوایم بنویسیم و روشی رو که در اون استفاده میکنیم باید با دقت به شبکه ی که داریم باشه ؟
این روشی که شما میگید عمومیت داره و به سورت گسترده از اون استفاده میشه ؟
این برنامه هایی ایی که تو بازار هست و بیان شده که تحت شبکه هستن بر چه اصاصی نوشته شده اند ؟
برنامه ای که من دارم خوب کار با همین بانک اطلاعاتیه . در مورد شبکه ی اونها اطلاعاتی ندارم . البته برای یک سازمانه . ایا میتونم از همین روش برای اون برنامه استفاده کنم ؟ یا روش معقولی هست ؟

و یه در خواست دیگه دارم : چون یه کم سرعت پیشرفت این تاپیک کنده و من هم نیاز جدی دارم در این زمینه ! فایل آموزشی دارید که در اختیار من و سایر دوستانی که دوست دارند بزارین ؟

بازم خسته نباشید .

en.kamali.ir
دوشنبه 25 آذر 1387, 00:02 صبح
دوستان عزیز سلام . از همه دوستان تشکر میکنم . همه در مورد این تاپبک لطف دارند .
امین جان من اومدم که سوالام رو جدا جدا بپرسم .
من برنامه رو نوشتم توی lan هم جواب گرفتم اما خواستم یک امتحام کرده باشم اومدم 2 تا سیستم رو به طور جداگانه به اینترنت متصل کردم و در قسمت client آدرس سرور رو وارد کردم اما ارتباط با بانک برقرار نشد . منظورم از اون سوالی که پرسیده بودم این بود .
با تشکر .

amin_alexi
دوشنبه 25 آذر 1387, 16:03 عصر
سلام :چشمک:
خوشحالم میبینم که دوستان پیگیری می کنن ... :تشویق:

1 . برنامه رو نوشتم وقتی یک رکورد به جدول اضافه میکرم و بعد ApplayUpdate میکردم و Active مربوط به Clintdataset رو False و True میکردم اطلاعاتی که ثبت شده بود رو نشون نمداد و باید برنامه رو دوباره باز میکردم تا اونها رو نشون بده .
البته در این ضمینه خودم دوتا راه به نظرم رسید که :
1-1 Sucktconnection رو Dicconnect و cunnect کنم و دوباره اطلاعات رو بخونم که این به نظرم زیاد منطقی نمیاد .
2-1 مقدار CursorLocation مربوط به AdoConnection و AdoQuery رو از CluClient به CluServer تغییر دادم که این رو هم امتحان کردم جواب داد .
ایا روش درست همینه ؟ روش های دیگر به چه صورته ؟این رو هم تست کردین ! با این جواب میده یا نه ! :متفکر:

ClientDataSet1.Refresh;شرمنده برنامه تون رو نتونستم نگاه کنم ان شاء الله در اولین فرصت نگاه کنم ....

ایا برنامه ای رو که می خوایم بنویسیم و روشی رو که در اون استفاده میکنیم باید با دقت به شبکه ی که داریم باشه ؟بهتر که این طور باشه

این روشی که شما میگید عمومیت داره و به سورت گسترده از اون استفاده میشه ؟خیر عمومیت نداره ... لااقل من خیلی ندیدم .. کمتر از این روش استفاده میشه ... ولی مزایای زیادی داره ... مخصوصا برای تعداد Client بالا ...

این برنامه هایی ایی که تو بازار هست و بیان شده که تحت شبکه هستن بر چه اصاصی نوشته شده اند ؟معمولا از ado استفاده می کنن و برای وصل شدن Clientها به DataBase بر روی سرور فقط لازمه که ConnectionString رو عوض کرد ... که در مواقعی که تعداد Clientهای همزمان متصل به سرور زیاد بشه سر سرور خیلی شلوغ میشه و سرور کند میشه !! :گیج:

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

و یه در خواست دیگه دارم : چون یه کم سرعت پیشرفت این تاپیک کنده و من هم نیاز جدی دارم در این زمینه ! فایل آموزشی دارید که در اختیار من و سایر دوستانی که دوست دارند بزارین ؟در یکی از Post ها در همین تاپیک هم یکی از دوستان قبلا یه مقاله گذاشتن ...
در ضمن کتاب هم هست ... برنامه نویسی بانکهای اطلاعاتی Delphi7 & Kylix کتاب خوبیه

امید وارم سوالی از قلم نیفتاده باشه :چشمک:

amin_alexi
دوشنبه 25 آذر 1387, 16:07 عصر
دوستان عزیز سلام . از همه دوستان تشکر میکنم . همه در مورد این تاپبک لطف دارند .
امین جان من اومدم که سوالام رو جدا جدا بپرسم .
من برنامه رو نوشتم توی lan هم جواب گرفتم اما خواستم یک امتحام کرده باشم اومدم 2 تا سیستم رو به طور جداگانه به اینترنت متصل کردم و در قسمت client آدرس سرور رو وارد کردم اما ارتباط با بانک برقرار نشد . منظورم از اون سوالی که پرسیده بودم این بود .
با تشکر .در برنامه Client ادرس سرور رو چی دادین !؟
آدرس Server رو به چه صورت دادین !؟
IP دادین !? یا نام سرور !؟!؟
اگر IP دادین شاید لازم باشه حق دسترسی هم داده بشه ... خودم تا حالا تست نکردم ...
(من از فردا چند روز نیستم ... اگه اینترنت دمه دستم بود سر میزنم ... امیدوارم سایر دوستان هم بیان و به سوالها جواب بدن ممنون از همه )

vcldeveloper
سه شنبه 26 آذر 1387, 00:54 صبح
نقل قول:
این روشی که شما میگید عمومیت داره و به سورت گسترده از اون استفاده میشه ؟
خیر عمومیت نداره ... لااقل من خیلی ندیدم .. کمتر از این روش استفاده میشه ... ولی مزایای زیادی داره ... مخصوصا برای تعداد Client بالا ...
نقل قول:
این برنامه هایی ایی که تو بازار هست و بیان شده که تحت شبکه هستن بر چه اصاصی نوشته شده اند ؟
معمولا از ado استفاده می کنن و برای وصل شدن Clientها به DataBase بر روی سرور فقط لازمه که ConnectionString رو عوض کرد ... که در مواقعی که تعداد Clientهای همزمان متصل به سرور زیاد بشه سر سرور خیلی شلوغ میشه و سرور کند میشه !!
شما هر تعدادی هم که لایه داشته باشید، با افزایش تعداد کلاینت ها، ترافیک سرور شما افزایش پیدا میکنه. یکی از مزیت های طراحی چند لایه این هست که بشه این ترافیک را بین چند سرور تقسیم کرد.
بطور کلی، چه معماری Client\Server که در آن یک سرور با تعدادی کلاینت وجود دارند، و چه معماری n-tier یا چند لایه، که در آن امور مختلف بین چند سرور تقسیم می شوند، و برآیند پردازش ها به کلاینت ها ارسال می شود، مزایا و معایب خاص خودشان را دارند، و طراح سیستم باید متناسب با نیازهای پروژه انتخاب کند که کدامیک را استفاده کند. در بعضی پروژه ها Client\Server مناسب تر از n-tier هست. از طرف دیگه، چگونگی برقراری ارتباط بین لایه های مختلف در سیستم های n-tier هم هر کدام مزایا و معایب خاص خودشان را دارند، مثلا همین روش اتصال با DCOM که شما در این تاپیک آن را از طریق مثال توضیح می دهید، اشکالات فراوانی دارد، مثل: عدم سازگاری با فایروال های نصب شده در مسیر شبکه، محدودیت سرویس دهی فقط به کلاینت های ویندوز، و پیچیدگی تنظیمات مرتبط با آن.

بطور خلاصه, نمی توان یکی را به عنوان راه حل جامع برای همه سیستم ها انتخاب کرد، و باید متناسب با نوع پروژه طرح مناسب انتخاب شود.

bmanfy
جمعه 29 آذر 1387, 19:57 عصر
این رو هم تست کردین ! با این جواب میده یا نه ! :متفکر:

ClientDataSet1.Refresh;

اره این رو هم تست کردم اما خوب باز هم جواب نداد .
خوب حالا ایا اینکه مقدار CursorLocation مربوط به AdoConnection و AdoQuery رو از CluClient به CluServer تغییر دادم کاره درستی بوده یا نه ؟



معمولا از ado استفاده می کنن و برای وصل شدن Clientها به DataBase بر روی سرور فقط لازمه که ConnectionString رو عوض کرد ... که در مواقعی که تعداد Clientهای همزمان متصل به سرور زیاد بشه سر سرور خیلی شلوغ میشه و سرور کند میشه !! :گیج:


خوب حالا در مورد همین که میگید اموزش کاملی یا چیز دیگری دارین ؟
چند روش برای برنامه نویسی تحت شبکه هست ؟



در یکی از Post ها در همین تاپیک هم یکی از دوستان قبلا یه مقاله گذاشتن ...

اره این رو هم خوندم اما خوب در یکی از مراحلش به مشکل برخورد حالا اگه اجازه بدین همین جا میزارم شرمنده اگه به اینجا ربطی نداشت .

bmanfy
جمعه 29 آذر 1387, 19:59 عصر
خوب حالا همون مشکلی که برام پش اومد در باره ی همون پستی که گفتین :
سلام دوستان :
من ميخوام برنامه اي رو به سبك MultiTier با استفاده از لايه مياني Com+ بنويسم . اما در زمان ساخت اولين لايه با يه مشكلي مواجه ميشم به شرح زير :
پس از اينكه Remote data module رو ميسازم . ذخيرش ميكنم . و Dll هاي لايه مياني هم با موفقيت رجيستر ميشه . زماني كه Install Com+ Object رو كيليك ميكنم پنجره مربوطه باز ميشه و وقتي كه تيك جلوي نام Data remot Molude رو كليك ميكنم . پنجرا ه ي كه باز ميشه دوتا تب داره به تب دوم كه install into new application هست ميرم و نامData Remot Moduleي رو كه ساختم ميدم و سپس ok ,ok رو ميزنم كه با اين خطا مواجه ميشم .(A connection with the transaction manager was lost )
البته هر نامي رو كه ميدم اين خطا رو ميده .
من اين مراحل رو طبق يكي از تاپيك هاي تو همين سايت انجام دادم . البته به دليل متروك بودنش سوالم رو اينجا دارم ميگم .
چون ويندوزم رو خيلي وقت بود عوض نكرده بودم گفتم شايد مشكل از اون باشه اما وب از اون هم نبود .

lena abbaszadeh
سه شنبه 03 دی 1387, 08:31 صبح
سلام دوستان عزیز
به نظر من یک پروژه کوچک تعریف کنیم و روی اون کار کنیم که روند برنامه نویسی تحت شبکه رو با یه مثال
ساده یاد بگیریم.واقعا ممنونم ازین پیشنهاد

bmanfy
یک شنبه 08 دی 1387, 09:04 صبح
چه جوریاست چرا دیگه اینجا خبری نیست ؟

matinebi
سه شنبه 10 دی 1387, 05:26 صبح
بهتره ادامه بدین دوست عزیز حیف این تاپیکه اگه به این زودی از کار بیفته

yaas135
دوشنبه 14 بهمن 1387, 13:42 عصر
ديگه ادامه نمي دين؟

mjnikbn
پنج شنبه 01 اسفند 1387, 17:10 عصر
چرا تاپيك ادامه پيدا نكرد؟
تازه داشت به جاهاي بامزه كار مي رسيد!

accpascal
شنبه 10 اسفند 1387, 18:53 عصر
این تایپیک حیفه که نیمه کاره رها بشه
دوستان خیلی زحمت کشیده بودند و تقریبا کار داشت به آخر می رسید
من یک پروژه ای داشتم که در نوشتن آن از این تایپیک خیلی استفاده کردم ولی مشکل بزرگ من و فکر می کنم خیلی از دوستان نحوه ویرایش داده ها بود
من کاری کردم به این صورت که پروژه خود را که با همین روش بحث شده در این تایپیک شروع کرده بودم به این صورت ادامه دادم که برای ویرایش داده ها از وب سرویس استفاده کردم (با استفاده از پروتکل soap)
خیلی دوست دارم نظر دوستان را بدانم

afshin2020
جمعه 07 فروردین 1388, 16:09 عصر
تبریک میگم دوستان تاپیک بسیار عالی و فیدی درست کردید.
من یه مشکل کوچیک داشتم که امیدوارم اون هم حل بشه .
من به سرور کانکت میشم اما تو برنامه client یه مشکل دارنم و اون هم اینه که اولاً DataSetProvider سور رو cientDataSet من نمیشناسه و ثانیاٌ وقتی هم اسم DatasetProvider رو بصورت دستی وارد میکنم clientDataSet به DataSetProvider کانکت نمیشه در واقع خاصیت Active رو نمیتونم true کنم و error زیر رو میده.
The RPC Server is Unavailable
ممنون میشم اگه کسی راهنمایی کنه.

samyjoon
جمعه 14 فروردین 1388, 19:54 عصر
من در برنامه نویسی تحت شبکه تازه کار هستم و به نوبه خودم از طرح چنین موضوع مهمی و بحث راجب آن از تمام دوستان سپاسگذارم

ali.sabtenam
شنبه 21 اسفند 1389, 23:35 عصر
سلام دوستان
اتصال کلاینت به پایگاه داده سرور در شبکه Lan
1-
نصب SQL Server Management Studio 2005 بر روی سرور
2-
تولید پایگاه داده با دسترسی Remote
3-
برای اتصال کلاینت به پایگاه داده موجود در سرور بوسیله دات نت کافیه که در کانکشن تایپ بشه:
Data Source=myIPAddress\SQLEXPRESS;Initial Catalog=myDataBaseNAME;User ID=...;password

3-
حالا برنامه رو اجرا کنید !!!
بله ، اتصال برقرار میشه

4-
حالا مشكل اينه كه
برنامه به پايگاه وصل ميشه (حتي از كلاينت)ولي اگه بخوام براي برنامه Install بسازم بايد پايگاه داده رو به برنامه اضافه كنم!!!
با اين كانكشن :
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ myDataBaseNAME.mdf;Integrated Security=True;User Instance=True
حالا براي كلاينت هر كانكشني بزارم وصل نميشه ؟
*** نكته : وقتي برنامه اي براي كسي مي نويسيم و برنامه رو تحويلش ميديم SQL Server Management Studio كه براي مشتري كامل نصب نمي كنيم؟!!!!! هيچ برنامه اي نديدم SQL را كامل نصب كنه
حالا راهنمايي بفرماييد !! تشكر

Parseinfo
چهارشنبه 11 مرداد 1391, 12:57 عصر
دوستان عزیز سلام . از همه دوستان تشکر میکنم . همه در مورد این تاپبک لطف دارند .
امین جان من اومدم که سوالام رو جدا جدا بپرسم .
من برنامه رو نوشتم توی lan هم جواب گرفتم اما خواستم یک امتحام کرده باشم اومدم 2 تا سیستم رو به طور جداگانه به اینترنت متصل کردم و در قسمت client آدرس سرور رو وارد کردم اما ارتباط با بانک برقرار نشد . منظورم از اون سوالی که پرسیده بودم این بود .
با تشکر .

سلام. شما بايد براي سيستم سرورتون يك آي پي استاتيك تنظيم كنيد. با تماس با ارائه دهنده خدمات اينترنت (ADSL) تماس بگيريد و از اونها بخوايين كه يك IP Valide روي خط تلفن به شما بدن. بعد اون رو روي سيستم سرور تنظيم كنيد و همون IP رو از طريق سيستم كلاينت فراخواني كنيد.

Parseinfo
چهارشنبه 11 مرداد 1391, 13:22 عصر
سلام دوستان
اتصال کلاینت به پایگاه داده سرور در شبکه Lan
1-
نصب SQL Server Management Studio 2005 بر روی سرور
2-
تولید پایگاه داده با دسترسی Remote
3-
برای اتصال کلاینت به پایگاه داده موجود در سرور بوسیله دات نت کافیه که در کانکشن تایپ بشه:
Data Source=myIPAddress\SQLEXPRESS;Initial Catalog=myDataBaseNAME;User ID=...;password

3-
حالا برنامه رو اجرا کنید !!!
بله ، اتصال برقرار میشه

4-
حالا مشكل اينه كه
برنامه به پايگاه وصل ميشه (حتي از كلاينت)ولي اگه بخوام براي برنامه Install بسازم بايد پايگاه داده رو به برنامه اضافه كنم!!!
با اين كانكشن :
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ myDataBaseNAME.mdf;Integrated Security=True;User Instance=True
حالا براي كلاينت هر كانكشني بزارم وصل نميشه ؟
*** نكته : وقتي برنامه اي براي كسي مي نويسيم و برنامه رو تحويلش ميديم SQL Server Management Studio كه براي مشتري كامل نصب نمي كنيم؟!!!!! هيچ برنامه اي نديدم SQL را كامل نصب كنه
حالا راهنمايي بفرماييد !! تشكر

سلام دوست عزيز. شما بايد از SQL Server Database Engine يا SQL Server Express استفاده كني. اين نسخه ها كوچك شده SQL Server هستند و شامل موتور پايگاه داده و سرويس هاي لازم و ضروري براي كار با ديتابيس ها هستند و حجم خيلي كمتري نسبت به نسخه كامل SQL دارند و نصب آنها هم خيلي ساده است. اكثر نرم افزار هاي Install ساز مثل Install Shield امكاناتي دارند كه شما مي توانيد موتور پايگاه داده را درون فايل نصب خود قرار داده و در حين نصب نرم افزار شما، موتور پايگاه داده نيز نصب شود.

pandco
پنج شنبه 02 بهمن 1393, 11:24 صبح
با سلام

پس تاپیک ادامه نداره ؟

ممنون