# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi > گفتگو: برنامه نویسی بانک اطلاعاتی تحت شبکه

## en.kamali.ir

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

----------


## vcldeveloper

اولین مشکلی که با آن برخورد می کنید، این هست:



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


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

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

----------


## مائده 100

با سلام 
اول از شما دوست عزیز تشکر می کنم چون بحث خوبی را شروع کردید 
من هم به نوبه خود از دوستان و اساتید عزیز خواهش می کنم در این بحث شرکت کنند .

----------


## mossaferin

سلام به دوستان

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

ممنون

----------


## _alish_

بهتر است ، يك نفر مدير بحث شود كه بحث هاي اضافه را حذف نماييد، بعد يك 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

> به احتما زياد دوستان دنبال نوشتن يك برنامه با يك پايگاه داده هستند.


اگر هدف تاپیک این باشه، باید به بخش کار با بانک های اطلاعاتی در دلفی منتقل بشه.

----------


## matinebi

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

----------


## en.kamali.ir

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

----------


## en.kamali.ir

دانشجویان تشکر کنند برای عضویت

----------


## en.kamali.ir

با تشکر کردن از این پیام در قسمت اساتید عضو شوید .

----------


## vcldeveloper

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

----------


## en.kamali.ir

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

----------


## en.kamali.ir

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

----------


## manvaputra

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

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

----------


## vcldeveloper

> علی جان با نظر شما مخالفم . قصدمون از ایجاد این تاپیک ایجاد یک کلاس درس است .


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

----------


## as13851365

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

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

----------


## en.kamali.ir

از میدیر خوبمون علی جان باز هم تشکر می کنم . 
اما چرا اینقدر عجول هستید . 
عرض کردم تا جمعه صبر کنید و نظراتتون رو بفرمایید تا به وقتش . تا جمعه که همدیگر رو بشناسیم و هدفمون رو متحد کنیم . 
تقاضا :
لطفا مسئولیت این پروژه رو به من بسپارید به عنوان کسی که این تاپیک رو شروع کردم . 
اگر تونستم که تا پایان ادامه بدم که خدا رو شکر در غیر این صورت مسئولیت رو به کسه دیگری واگذار می کنم . 
خودم رو پیشنهاد دادم چرا که با اهداف این تاپیک از همه بیشتر آشنایی دارم . 
تشکر می کنم از همه دوستانی که اهمیت دادند . امیدوارم در پایان تاپیک رو داشته باشم که باز هم وارد سایت بشم .
*محمد کمالی*

----------


## en.kamali.ir

:لبخند گشاده!: راستی اجازه دهید صورت مسئله و نیازمندی های مسئله رو هم من پیشنهاد بدم . مخالفین می توانند خشونت به خرج دهند :لبخند گشاده!:

----------


## vcldeveloper

> لطفا مسئولیت این پروژه رو به من بسپارید به عنوان کسی که این تاپیک رو شروع کردم .


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

----------


## amin_alexi

سلام!



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


من خودم با صحبتهای آقای کشاورز موافقم! (با توجه به تجربه یک ساله ام در سایت!)
هدف دوستمون از ایجاد این تاپیک هدف مناسبیه ولی خیلی کلیه !
بهتره یک بحث مفید انتخاب بشه که همه شرکت کنند !

----------


## en.kamali.ir

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

----------


## zman123456

عزیز اگه دوست داری کسی چیزی یاد بگیره بهتره قبل از اینکه بی خیال بشه شروع کنی.
خیلی ها اینقدر وقت برای از دست دادن ندارن.
با تشکر

----------


## manvaputra

> عزیز اگه دوست داری کسی چیزی یاد بگیره بهتره قبل از اینکه بی خیال بشه شروع کنی.
> خیلی ها اینقدر وقت برای از دست دادن ندارن.
> با تشکر


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

----------


## amin_alexi

سلام



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


و اما او نیامد ! :چشمک:

----------


## en.kamali.ir

سلام بد قولی من رو ببخشید به خدا برق رفته بود همین الان اومد .
به هر حال الان ساعت یک است و اولین ساعت های جمعه برنامه از الان آغاز شد .
قراره برنامه ای ساده بنویسیم . 
یک فرهنگ لغت . 
این برنامه برای هر آدم مبتدی که بتونه با هر زبان برنامه نویسی کار کنه یک برنامه پیش پا افتاده است . 
درسته هدف هم همینه .
برنامه دارای یک بانک است شامل :
1. لغت 
2. معنی 
3. توضیحات 
توانمندی های برنامه :
1 . درج اطلاعات 
2. ویرایش 
3. جستجو 
4 . گزارش قابل چاپ
ویژگیهای برنامه .
این برنامه قادر است از طریق شبکه اجرا شود به نحوی که افراد یک شبکه lan بتوانند به طور هم زمان از تمامی اجزای برنامه استفده کنند . 
همچنین در هر لحظه تمام کاربران از تغییرات بانک مطلع شوند .

----------


## en.kamali.ir

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

----------


## en.kamali.ir

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

----------


## amin_alexi

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

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

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

----------


## امید امرایی

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

----------


## en.kamali.ir

دوستان عزیز تا شب وقت دارند که نظرات خود را در باره بانک بفرماییند در غیر این صورت نظر دوستمون امین جان اعمال می شود . به همون نحوی که خودشون فرمودند
با تشکر 
*محمد کمالی*

----------


## mortezakiaee

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

----------


## en.kamali.ir

آقا مرتضی من این کار رو امتحان کردم اما مثلا در بانکی مثل bde کاربران از تغییرات کاربران دیگر در بانک متوجه نمی شوند اون هم تا زمانی که تمام کاربران برنامه های خود را ببندند و مجددا باز نمایند . 
در ضمن کاربران وقتی short cut  یک برنامه رو باز می کنند در واقع از بانکی که روی سرور هست یک بافر گیری می کنند . همچنین قصد داریم با اصول برنامه نویسی در شبکه آشنا بشیم .

----------


## vcldeveloper

> ببخشید من هنوز متوجه نمی شم که چرا می خواید دو برنامه(یکی رو سرور یکی رو کلاینت) داشته باشید؟ چرا از یه برنامه رو سرور و یه shortcut رو کلاینت استفاده نمی کنید مثل همکاران سیستم. با این کار 90% ترانزاکشن ها رو SQL منتقل می شه و UI شما سرعتش بالاتر می ره. با یه ماژول launcher می تونید کاربراتون رو کامل کنترل کنید و هر تغییری رو به راحتی در همه کلاینت ها اعمال کنید


همچین کاری نیاز داره که اولا همه کلاینت ها به پوشه اشتراک گذاشته شده دسترسی داشته باشند، که همیشه ممکن نیست، ثانیا، وقتی فایل را از روی سرور اجرا می کنید، برنامه روی حافظه سرور اجرا نمیشه، بلکه یک نسخه از آن در سیستم کلاینت Cache میشه، و در حافظه کلاینت اجرا میشه. اگر قرار باشه برنامه روی سرور اجرا بشه، باید از برنامه هایی مثل Remote Desktop که از Terminal Service ویندوز استفاده می کنند، استفاده کرد. نکته آخر هم اینکه، همیشه برنامه کلاینت Stand-alone نیست، بلکه گاهی نیاز به نصب برخی از اجزای خودش در سیستم کلاینت داره. پس اگر برنامه کلاینت فقط یک EXE باشه و وابستگی به چیز دیگه ایی نداشته باشه، فرقی نمیکنه که یک Shortcut از آن درست کنید و در کلاینت از آن استفاده کنید، یا خودِ فایل را در سیستم کلاینت کپی کنید؛ در هر دو حال، برنامه در حافظه کلاینت اجرا خواهد شد.

----------


## en.kamali.ir

امین جان لطفا بانک اطلاعاتی خودت رو معرفی کن و نحوه ایجاد اون رو برای دوستان تشریح کن .
ممنونم . 
همه ما منتظر هستیم

----------


## manvaputra

دوست عزیز پس بهتره عنوان رو بذار بانک اطلاعاتی تحت شبکه .

----------


## amin_alexi

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

----------


## amin_alexi

سلام  :چشمک: 
من ابتدا یک 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

از اساتید بزرگوار هر کدوم دیدن در توضیحات من اشتباهی وجود داره یا نکته تکمیلی هست راهنمایی کنن !

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

سرور برنامه می تواند یک سری سرویسهایی برای  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

اما از 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 چه کار می کنه  :متفکر: 
https://barnamenevis.org/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

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

----------


## amin_alexi

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

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

----------


## en.kamali.ir

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

----------


## manvaputra

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

----------


## حرفه ای

دوستان خوبم سلام
حدود دو سال است كه سري به سايت برنامه نويس نزده بودم    :اشتباه: 

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

https://barnamenevis.org/showthread.php?t=59232

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

----------


## en.kamali.ir

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


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

----------


## amin_alexi

سلام



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


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

----------


## moho63

سلام دوباره
ببخشید من همه کار هایی که گفتی انجام میدم ولی این Error ها رو بازم می ده نمی دونم چرا وقتی برنامه سرور رو اجرا می کنم در رجیستری ثبت نمی شه و کد رجیستری در قسمت serverGUIDِ نمیاد.

----------


## manvaputra

> برنامه نویسی در این سطح کاربران مبتدی نداره یعنی افرادی که این تاپیک رو مطالعه می فرمایند با برنامه نویسی آشنا هستند


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

----------


## amin_alexi

> سلام دوباره
> ببخشید من همه کار هایی که گفتی انجام میدم ولی این Error ها رو بازم می ده نمی دونم چرا وقتی برنامه سرور رو اجرا می کنم در رجیستری ثبت نمی شه و کد رجیستری در قسمت serverGUIDِ نمیاد.


از برنامه ای که من دادم استفاده می کنید یا برنامه رو خودتون از اول نوشتید !
اگه خودتون نوشتید بزارید اینجا تا ببینم !
در ضمن شما اول باید فیلد  Host یا Address رو پر کنید ... بعد در ServerName نامی که Register شده رو انتخاب کنید و قسمت ServerGUID به صورت AUTO پر میشه !

----------


## moho63

سلام دوستان
توی اونجایی که می خای نام سرور رو انتخاب کنی خالیه رجیستر شده ها ولی خالیه .وقتی هم که connected رو می خای True کنی این خطا رو میده.

----------


## amin_alexi

> سلام دوستان
> توی اونجایی که می خای نام سرور رو انتخاب کنی خالیه رجیستر شده ها ولی خالیه .وقتی هم که connected رو می خای True کنی این خطا رو میده.


سعی کن وقتی سوال می پرسیم یه جوابی بدی!!!؟
من پرسیدم !



> از برنامه ای که من دادم استفاده می کنید یا برنامه رو خودتون از اول نوشتید !


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

----------


## vcldeveloper

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

----------


## amin_alexi

سلام خدمت آقای کشاورز عزیز
با توجه به این پیشنهاد من ... (در پست 28)



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


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

----------


## manvaputra

> فکر کنم دوستان هم به اتفاق موافقند !


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



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


دستت درد نکنه

----------


## en.kamali.ir

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

----------


## en.kamali.ir

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

----------


## AliReza Vafakhah

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

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

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

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

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

----------


## amin_alexi

> امین جان من توی برنامه server یک بانک گذاشتم و از طریق برنامه client به اون متصل شدم اما وقتی اطلاعات رو تغییر می دم مثلا یک رکورد رو حذف می کنم و برنامه رو می بندم و دوباره باز می کنم می بینم که رکورد حذف یا اضافه نشده . بهتره بگم اطلاعات در بانک ذخیره نمی شه .
> eror هم نداره


از چه طریقی به DataBase وصل میشی !
از چه Componentهای برای وصل شدن به DataBase استفاده می کنی !
تا چند دقیقه دیگه آموزش وصل شدن به DB رو از طریق DataProvider و ClientDataSet میفرستم !




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


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

----------


## amin_alexi

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

*و اما .... ا**دامه بحث*  :لبخند گشاده!: 

خوب حالا می خوایم اطلاعات رو از سمت 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 به سرور ...  :گیج:

----------


## امید امرایی

بنده يه خورده از مطالب جا موندم اما جهت اطلاع، بحث بسيار خوب و جالب پيش ميره و عده زيادي از دوستان پيگير مطالب هستند در حالي كه ممكنه يك بار هم پست نداده باشن .

----------


## manvaputra

> من فکر می کنم صحیح تر باشه دست پایین تر ها رو گرفت نه اینکه اونها رو لگد مال کرد


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




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


مدیر بنده خدا که نظرشون رو می دن 



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


ولی شما چه نه تنها به سوال ایشون جواب ندادید بلکه به راه خودتون ادامه دادید! پس دوست عزیز چرا از همون اول نظر همه رو خواستید ! همه نظر ها که نمی تونه باب میل شما باشه .
و این هم درست نیست اگه یکی مثل من می گه آقا چرا اینقدر سخت شروع کردید بهش انگ دل سرد کردن بقیه رو بزنید.
با تشکر

----------


## accpascal

من تا حالادر این بحث  post  ندادم(شاید خیلی دیگه هم باشند) ولی از اول آن را پیگیری کرده ام متاسفانه بعضی از دوستان ناخواسته زیادی به حاشیه می پردازند شما لطفا خیلی به حاشیه نپرداخته و کارتان را ادامه دهید

----------


## amin_alexi

سلام دوست عزیز manvaputra 
نمیدونم چرا شما دارین شلوغش می کنین  :متفکر:  



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


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



> تاپیک تا زمانی که در آن کاری خلاف قوانین سایت انجام نشده، در اختیار کاربر ایجاد کننده آن هست.


و ایشون en.kamali.ir (کاربر ایجاد کننده) هم رضایت خودشون رو اعلام کردند (به همراه تمام کسانی که تشکر کردند و برنامه ها رو  Download کردند)
خواهش می کنم دیگه مطلب خارج از موضوع تاپیک نگید تا هم تاپیک *قفل نشه* و هم از موضوع خارج نشیم !  :خیلی عصبانی: 
منم که گفتم 



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


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

----------


## manvaputra

دوست عزیز امین جان من اگه چیزی گفتم هدفم شلوغ کاری نبوده پس بهتره سو تفاهم ها کنار گذاشته بشه و کارو دوباره با انرژی بیشتر شروع کنی ما هم هستیم کنارتون یا علی

----------


## amin_alexi

سلام به همه دوستان :لبخند: 
ممنون خاطر لطفتون ... :قلب: 
شرمنده از تاخیر چند روزه ...  :خجالت: 
باور کنید تنها یک سری مشکلات نذاشت که زودتر بیام ...
از دست کسی هم هیچ دلخوری ندارم 
یکی 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

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

----------


## amin_alexi

سلام 
ممنون بابت سوالهایی که پرسیدی ؟!  :تشویق: 
ولی یکی یکی ، یکی یکی  :لبخند گشاده!: !
تا بشه خوب سرش بحث کرد ....
امیدوارم سایر دوستان هم سوالهای خود را بپرسند و سایر دوستان هم برای جواب دادن آستین بالا بزنن !  :چشمک: 



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


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



> یعنی اگه از طریق اینترنت به سرور متصل شدن امکان پذیر می باشد ؟؟


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



> من از طریق اینترنت رو امتحان کردم نتیجه نگرفتم


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

----------


## mohsencomputer81

کسی میدونه چگونه میشه برنامه تحت شبکه ای نوشت که ConnectionString را بتوان هنگام اجرا و توسط کاربر قابل تغییر باشه؟
منظورم تنظیمات DataBaseName ،SQL_UserName ، SQL_Password و آدرس Server است

----------


## amin_alexi

> کسی میدونه چگونه میشه برنامه تحت شبکه ای نوشت که 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

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

----------


## zman123456

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

----------


## Saeed_m_Farid

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

----------


## vcldeveloper

> یه سوال میپرسم اگه جاش باشه: چرا همچین مبحثی تو این بخش باز میشه درحالی که بخشهایی مثل *توسعه نرم افزارهای تحت شبکه یا*  *توسعه نرم افزار تحت وب*   همچنان دو سه تا تاپیک توشون هست و هیچکس طرفشون نمیره ما هم سوالاتمون پا در هما میمونه


سلام،

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

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

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

----------


## amin_alexi

سلام به همه دوستان 
اول از همه تسلیت می گم بابت فوت مادر بزرگ دوستمون ... 
دیدم دوستان سوال نمی پرسن خودم یک نکته مهم به یادم اومد گفتم بنویسم ...

*ادامه بحث*

*اضافه کردن متد به یک 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

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

----------


## bmanfy

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

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

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

----------


## en.kamali.ir

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

----------


## amin_alexi

سلام  :چشمک: 
خوشحالم میبینم که دوستان پیگیری می کنن ...  :تشویق: 



> 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

> دوستان عزیز سلام . از همه دوستان تشکر میکنم . همه در مورد این تاپبک لطف دارند . 
> امین جان من اومدم که سوالام رو جدا جدا بپرسم .
> من برنامه رو نوشتم توی lan هم جواب گرفتم اما خواستم یک امتحام کرده باشم اومدم 2 تا سیستم رو به طور جداگانه به اینترنت متصل کردم و در قسمت client آدرس سرور رو وارد کردم اما ارتباط با بانک برقرار نشد . منظورم از اون سوالی که پرسیده بودم این بود . 
> با تشکر .


در برنامه Client ادرس سرور رو چی دادین !؟
آدرس Server رو به چه صورت دادین !؟
IP دادین !? یا نام سرور !؟!؟ 
اگر IP دادین شاید لازم باشه حق دسترسی هم داده بشه ... خودم تا حالا تست نکردم ...
(من از فردا چند روز نیستم ... اگه اینترنت دمه دستم بود سر میزنم ... امیدوارم سایر دوستان هم بیان و به سوالها جواب بدن  ممنون از همه  )

----------


## vcldeveloper

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


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

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

----------


## bmanfy

> این رو هم تست کردین ! با این جواب میده یا نه ! 
> ClientDataSet1.Refresh;


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




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


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




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


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

----------


## bmanfy

خوب حالا همون مشکلی که برام پش اومد در باره ی همون پستی که گفتین :
سلام دوستان :
من ميخوام برنامه اي رو به سبك 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

سلام دوستان عزیز
به نظر من یک پروژه کوچک تعریف کنیم و روی اون کار کنیم که روند برنامه نویسی تحت شبکه رو با یه مثال 
ساده یاد بگیریم.واقعا ممنونم ازین پیشنهاد

----------


## bmanfy

چه جوریاست چرا دیگه اینجا خبری نیست ؟

----------


## matinebi

بهتره ادامه بدین دوست عزیز حیف این تاپیکه اگه به این زودی از کار بیفته

----------


## yaas135

ديگه ادامه نمي دين؟

----------


## mjnikbn

چرا تاپيك ادامه پيدا نكرد؟
تازه داشت به جاهاي بامزه كار مي رسيد!

----------


## accpascal

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

----------


## afshin2020

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

----------


## samyjoon

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

----------


## ali.sabtenam

سلام دوستان
اتصال کلاینت به پایگاه داده سرور در شبکه 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

> دوستان عزیز سلام . از همه دوستان تشکر میکنم . همه در مورد این تاپبک لطف دارند . 
> امین جان من اومدم که سوالام رو جدا جدا بپرسم .
> من برنامه رو نوشتم توی lan هم جواب گرفتم اما خواستم یک امتحام کرده باشم اومدم 2 تا سیستم رو به طور جداگانه به اینترنت متصل کردم و در قسمت client آدرس سرور رو وارد کردم اما ارتباط با بانک برقرار نشد . منظورم از اون سوالی که پرسیده بودم این بود . 
> با تشکر .


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

----------


## Parseinfo

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


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

----------


## pandco

با سلام 

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

ممنون

----------

