PDA

View Full Version : گفتگو: اتصال به بانک اطلاعاتی در شبکه



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

bmanfy
سه شنبه 17 دی 1387, 17:39 عصر
خوب :گام اول :
(داخل پرانتز : خدمت دوستان عزیزم عرض کنم که امیدوارم از این کارم که خودم بدون نظر سنجی شروع کردم ناراحت نشین ---> اخه میدونید با نظر سنجی به جایی نمی رسیم و برای اینکه قصدم اینه که رو اکثر سبک ها کار کنیم پس به همگیش میرسیم . و از اونجایی هم که هدف یادگیری هستش نه طراحی پروژه پس با اجازتون موضوع پرژه رو هم یه موضوع ساده خودم انتخاب می کنم که هم انعطاف پذیر باشه و .... )
اولین سبکی که اسمش رو هم نمیدونم و قصد دارم روش کار کنیم همون ساده ترین سبک ، همون سبکی که تا از هر کس میپرسی میگن این کاری نداره ، خیلی ساده است ، باید کانکشن استرینگت رو رو هر سیستم عوض کنی و .......
برنامه تنهای یک نسخه است (به صورت Client/Sever نیست ) که بانک اون بر روی سرور قرار میگیره و کلاینتها تنها برنامه رو دارن:
1 :
خوب برنامه که می خوایم روش کار کنیم یه برنامه خیلی ساده است که میشه خیلی کارها روش انجام داد (از نظر برنامه نویسی). یه برنامه ساده برای کالاهای تولید شده .
Delphi و SqlServer
ساخت جدولش رو که برای شروع میشه انحام بدم . از جدول به بعدش رو به کمک نیازمندیم. پس جدول رو میسازم تا بگید گامهای بعدی چیه
برنامه 3 تا جدول داره :
الف :
جدول مربوط به تولید کنندگان این جدول شامل 4 فیلد هستش (قصد شلوغ کردن ندارم )
کد شخص
نام شخص
شهر
تعداد کالایی که تولید کرده

ب :
جدول مربوط به کالا ها 2 تا فیلد داره :
کد کالا
نام کالا

ج:
جدول کالا های تولید شده که 3 تا فیل داره :
کد کالا
کد تولیدکننده
تعداد تولید

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

vcldeveloper
چهارشنبه 18 دی 1387, 00:17 صبح
اینجور مباحث که مربوط به اتصال کلاینت ها به یک سرور بانک اطلاعاتی (مثل SQL Server ) هستند، بیشتر به زیرگروه بانک اطلاعاتی مربوط هستند، تا به زیرگروه مباحث شبکه؛ پس تاپیک به زیرگروه مناسب منتقل میشه.

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

bmanfy
چهارشنبه 18 دی 1387, 17:07 عصر
با سلام .
به هر حال چون اسم شبکه بود من فکر کردم شاید مربوط به این بخش باشه .
حق با شماست نمیشه همه ی مطالب رو درون یک تاپیک بیان کرد . پس ترجیها برای هر گونه یک تاپیک جدا ایجاد خواهم کرد .

ممنون.

bmanfy
چهارشنبه 18 دی 1387, 17:16 عصر
پست پنجم رو دارم میزنم و هنوز کسی به جز آقای کشاورز پست نزده . اما خوب حتما به دلیل ایم محرمه و دوستان سرشون شلوغ تر از ماست . به هر حال امیدوارم .....

سلام دوستان خوبم .
بانك مربوط به برنامه اي رو كه قصد دارم روش كار كنيم رو ساختم . فايلش رو هم اينجا ميزارم . خوب هر كي خواست ميتونه برداره و اون رو Attach كنه . من با SQL Server 2005 اون رو ساختم كه به شرح زيره :
جداول :


Builders (توليد كنندگان)
Bid : int كد توليد كننده (كه كليد اصلي هم هست)
Bname : nvarchar(40) نام توليد كننده
City : nvarchar(20) شهر
Qty : int تعداد توليد كرده


Stuffs (كالاها)
Sid : int كد كالا
Sname : Nvarchar(40) نام كالا


ManuFacture (توليد)
Bid : Int كد توليدكننده
Sid : int كد كالا
Cnt : int تعداد توليد

خوب پس جداول مون به شرح بالا شد .
از اينجا به بعد كار اصلي شروع ميشه .
عمليات اصلي افزودن ، اصلاح و حذف رو بايد رو هر كدوم از اين جدول ها بايد انجام بديم .
(كه من خودم در اين زمينه چيزي نمي دونم . البته طبق اون چيزهايي كه ديشب انجام دادم به يك نتايجي رسيدم كه در پست بعدي اونها رو توضيح ميدم . كه البته اگه همينطور باشه كه فكر ميكنم تمام كارها رو انجام دادم و تنها يك مشكل پيش مياد كه حالا در پست بعدي ميگم )

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

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

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

bmanfy
چهارشنبه 18 دی 1387, 17:27 عصر
طبق بررسي هايي كه انجام دادم به نتايج زير رسيدم . اميدوارم كه اساتيد اين مطالب رو كه ميگم بررسي بكنن و درستي و يا عدم درستي اين مطالب رو منكعكس كنن .

خوب بريم سر اصل موضوع .
همانطور كه تو پست قبلي گفتم تنها كاري كه براي برنامه نويس ميمونه اينه كه جلوي نمايش خطاهاي سيستم رو بگيره و خطاهاي مربوط به خودش رو براي بالا بردن خوانايي برنامه نمايش بده .

اولين مسئله اينه كه برنامه نويس بدونه كجاها خطا پيش مياد : پس يافتن عوامل خطا ساز :
در كل ميشه گفت در زمان Update شدن جدول (Append , Edit , Delete) خطاهاي اصلي ما ايجاد ميشه كه ميتونه ناشي از اين باشه كه كاربران ديگه اطلاعات رو تغيير دادن :

: Append
زماني اضافه كردن تو شبكه منجر به خطا ميشه كه جدول ما داراي يك فيلد كليدي باشه و كاربر ديگری مقداري رو ثبت كرده باشه و ما قصد داشته باشيم مقداري جديد با همون مقدار كليدي كه كاربر ديگه وارد كرده ، وارد كنيم .
(البته همينجا بگم كه من از خطاهاي منطقي چشم پوشي ميكنم و تنها در مورد خطاهايي صحبت ميكنم كه ناشي از ناآگاهي ما در مورد تغييرات جدول است كه توسط كاربران ديگه ايجاد ميشه )
خوب در اين حالت خطا رخ ميده و در صورتي كه ما اون رو كنترل نكرده باشيم پيام خطايي از طرف خود برنامه نمايش داده ميشه .
پس ميتونميم با يك Try و Except به راحتي اون رو كنترل كنيم .پس به شكل زير عمل ميكنيم :


Try
AdoQuery.Append ;
AdoQuery[‘Fields’] := Values ;
AdoQuery.Post
Except
ShowMessage(‘Can Not Append’);
End;


: Edit
زماني Edit كردن جدول منجر به نمايش خطا ميشه كه ركوردي كه ما قصد تغيير در آن رو داريم توسط كاربر ديگري پاك شده يا تغيير كرده .
كه خوب اين رو هم به همون روش بالا ميتونيم به راحتي كنترل كنيم .


Try
AdoQuery.Edit ;
AdoQuery[‘Fields’] := Values ;
AdoQuery.Post ;
Except
ShowMessage(‘Can Not Edit ! ’);
End ;


: Delete
زماني Delete كردن منجر به نمايش خطا ميشه كه ركوردي رو كه قصد حذف اون رو داريم يا تغيير كرده و يا حذف شده .
كه خوب اين رو هم به همون روش قبلي ميشه كنترل كرد :



Try
AdoQuery.Delete ;
Except
ShowMessage(‘Can Not Delete!’);
End ;


پس اگه همين طور باشه . عملا نميشه گفت تفاوت زيادي با نوشت برنامه معمولي داره . فقط دوتا مسئله اينجا پيش مياد :

1.
چون قرار بانگ اصلي رو سرور باشه و رو باقي كلاينتها تنها برنامه نصب ميشه و بانك قرار نميگيره كانكشن استرينگ رو بايد چطور تنظيم كنيم . (البته چون اينجا ديگه به شبكه دسترسي نداشتم نتونستم تست كنم)
مثلا اگه بانك روي سرور با نام Server_Db و اي پي 120.10.101.12(مقادير وارد شده كاملا تصادفي هست ) باشه و نام بانك هم Db باشه اون وقت كانكشن استرينگ چي ميشه ؟

2.
به روز رساني اطلاعات چي . يعني اگه خواست كاربر اطلاعات رو Refresh كنه چي ؟
در اين زمينه ميشه Active مربوط به AdoQuery رو False و True كرد . اما خوب گاهي اوقات اين كار از نظر زماني هزينه ي زيادي رو در بر ميگيره .
مثلا فرض كنيد جدولي داريم با 70 فيلد و 500 ركورد . اينجا خوب يه كم طول ميكشه . آيا روشي براي Refresh كردن جدول هست كه اين كار رو با سرعت انجام بده ؟

داخل پرانتز ()
اينجا يك سوال خارج از بحث هم برام پيش اومد كه فكر ميكنم بگم كه ديگه ساير افراد به اون برنخورند .
من كد زير رو توي يك تابع نوشم :


Procedure Refresh();
Begin
Form1.AdoQuery.Active := False ;
Form1.AdoQuery.Active:=True ;
End ;


يك دكمه هم گذاشتم براي Refresh شدن اطلاعات . اما زماني كه تابع رو فراخواني ميكنم Refresh نميشه اما زماني كه مستقيما كد درون تابع رو استفاده مي كنم Refresh ميشه .
كسي در زمينه چيزي ميدونه ؟

خوب برم سر ادامه بحث (Refresh كردن اطلاعات)
گزينه ديگري هم هست توي Properties هاي AdoConnection و AdoQuery با نام CursorLocation كه دوتا مقدار داره : clUseClient و clUseServer كه به صورت پيشفرض روي clUseClient تنظيم شده . كه اگه به clUseServer تغييرش بديم يه كارايي ميشه باهاش كرد . اما به دليل اينكه در مورد اين زياد مطمئن نيست . توضيح در مورد اين رو به اساتيد ميسپارم .

سوالات و مسائل ديگري هم پيش مياد . اما اساسي نيست . پس مطرح كردن اونها رو ميگذام واسه بعد مشخص شدن راه حل اصلي برنامه نويسي شبكه .

البته تو برنامه من از يك بانك ديگه استفاده كردم و از تون بانكي كه تو تاپيك قبلي گفتم استفاده نكردم . به هر حال اون رو ميزارم اينجا . خوشحال ميشم دوستان به خصوص اساتيد در موردش نظر بدن .
اشياي اصلي برنامه شامل AdoConnection , AdoQuery , DataSource ميشه .ايا از شي خواص ديگه براي راحتي كار ميشه استفاده كرد ؟

با دلفي 7 و SQL Server 2005 كردم .(Server Name = .\SqlExpress). همون سرور پيش فرض Sql Server.فايل Exe پروژه رو هم نگذاشتم تا حجم فايل بالا نره .

bmanfy
پنج شنبه 19 دی 1387, 16:58 عصر
یعنی خداییش کسی نیست بگه این راه درسته و عمومیت داره یا نه؟:متعجب:

زکات علم نشر آن است.

javad3d
جمعه 20 دی 1387, 20:29 عصر
با سلام

یک راه هم اینه که پوشه برنامه رو در سرور شیر کنیم و به کاربر هایی که قراره از اون استفاده کنند دسترسی کامل رو اختصاص بدیم. و کلاینت با باز کردن پوشه شیر شده تنها exe برنامه رو اجرا کنه.
البته بهتره برای استفاده از دستور Select نیز از top استفاده کنیم تا ترافیک شبکه باعث time out اسکیول سرور نشه.

en.kamali.ir
جمعه 20 دی 1387, 21:32 عصر
سلام
کاملا با نظر شما مخالم .
بنده این نوع رو امتحان کردم اما دقیقا کارتون اشتباهه .
شما وقی فایل اجرایی رو به اشتراک میگذارید این طور نیست که برنامه رو روی سرور اجرا میکنید بلکه شما از برنامه اجرایی به همراه بانکهاش یک بافر گیری روی سیستم خودتون انجام میدید . برای اینکه از حرف من مطمئن بشید میتونید از طریق یک کلاینت برنامه رو اجرا کنید و سپس با استفاده از سرور کل برنامه رو اصلا پاک کنید یا اصلا سرور رو خاموش کنید در این صورت متوجه می شوید که کلاینت ها از این اتفاق کاملا بی اطلاع میمانند
فکر کنید شما برنامه خودتون رو صبح باز میکنید و تا شب همینطور اطلاعات داخلش میریزید ولی در زمانی که میخواهید برنامه خودتون رو ببندید سرور خاموش باشه اونوقت اطلاعات شما کجا میره ؟؟؟؟
به اهمیت این سوال خوب فکر کنید
ساده ترین روش از استفاده از connection string می باشد
در این موارد یک کم تحقیق کن که مثل من دچار مشکل نشی

bmanfy
شنبه 21 دی 1387, 16:31 عصر
با سلام

یک راه هم اینه که پوشه برنامه رو در سرور شیر کنیم و به کاربر هایی که قراره از اون استفاده کنند دسترسی کامل رو اختصاص بدیم. و کلاینت با باز کردن پوشه شیر شده تنها exe برنامه رو اجرا کنه.
البته بهتره برای استفاده از دستور Select نیز از top استفاده کنیم تا ترافیک شبکه باعث time out اسکیول سرور نشه.

خوب بلاخره دیدیم کسی هم نظر داد .
ممنون :اما میشه در مورد دستور Top که دربالا دربارش گفتین توضیح بدین ؟

bmanfy
شنبه 21 دی 1387, 16:38 عصر
سلام
کاملا با نظر شما مخالم .
بنده این نوع رو امتحان کردم اما دقیقا کارتون اشتباهه .
شما وقی فایل اجرایی رو به اشتراک میگذارید این طور نیست که برنامه رو روی سرور اجرا میکنید بلکه شما از برنامه اجرایی به همراه بانکهاش یک بافر گیری روی سیستم خودتون انجام میدید . برای اینکه از حرف من مطمئن بشید میتونید از طریق یک کلاینت برنامه رو اجرا کنید و سپس با استفاده از سرور کل برنامه رو اصلا پاک کنید یا اصلا سرور رو خاموش کنید در این صورت متوجه می شوید که کلاینت ها از این اتفاق کاملا بی اطلاع میمانند
فکر کنید شما برنامه خودتون رو صبح باز میکنید و تا شب همینطور اطلاعات داخلش میریزید ولی در زمانی که میخواهید برنامه خودتون رو ببندید سرور خاموش باشه اونوقت اطلاعات شما کجا میره ؟؟؟؟
به اهمیت این سوال خوب فکر کنید
ساده ترین روش از استفاده از connection string می باشد
در این موارد یک کم تحقیق کن که مثل من دچار مشکل نشی

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

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

bmanfy
شنبه 21 دی 1387, 16:52 عصر
خوب کسی هم تا به حال نگفته این روش من درسته و عمومیت داره نه .
یکی بگه دیگه روشی که همه ی برنامه نویسای حرفه ای لستفاده میکنند همینه یا نه ؟

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



'..... ; Data Source = ' + Server Name + '\SqlName ; ......'

mafazel
یک شنبه 22 دی 1387, 08:21 صبح
سلام دوست عزیز
بنظر میرسه این تاپیک رو برای آموزش دادن نوشتن برنامه تحت شبکه با SQL Server شروع کردی. اگر حدس من درست باشه:
1- کار بسیار خوبی کردی دستت هم درد نکنه ادامه بده چه استقبال بشه چه نشه (حتی شاید بد نباشه این تاپیک رو رها کنی و یک تاپیک شسته روفته در این زمینه درست کنی. البته خیلی باید زحمت بکشی تا یک مطلب آموزشی رو ارایه بدی.).
2- عنوان خوبی انتخاب نکردی عنوان فعلی و موارد مطرح شده فقط حول Connection String هست. اگر من بودم عنوان «آموزشی: نوشتن برنامه تحت شبکه با Delphi و SQL Server» رو انتخاب می کردم.
3- یکمی حاشیه زیاد میری. مستقیم برو سراغ اصل مطلب حاشیه ها خودبخود پیدا میشن.
4- بخدا Connection String اینقدر مهم نیست. یک استرینگ ساده است که شما باید نام سرور و دیتابیس رو در اون عوض کنید. یعنی کافیه یک بار این استرینگ رو از جایی بدست بیارید و بعد «تا نام سرور» رو در یک جا ذخیره کنید، نام سرور و دیتابیس رو از کاربر بگیرید و بقیه اش رو هم در یک استرینگ دیگه. بعد این سه تا رو بهم بچسبونید و به ADOConnection بدید. از دستور زیر هم میتونید استفاده کنید:


ADOConnection1.ConnectionString := PromptDataSource(FrmMain.Handle,'');

که پنجره استاندارد ساخت کانکشن استرینگ رو میده (چشم کاربر روشن خودش کانکشنش رو بسازه) من از این دستور استفاده می کنم و رشته حاصل رو در یک فایل متنی هم ذخیره میکنم و دفعات بعد از اون فایل استفاده می کنم. اگه اون فایل نبود مجدد دستور بالا رو میدم (اصلا ادعا نمی کنم این بهترین راهه).
5- چند بار پرسیدی روش شما عمومیت داره یا نه و حرفه ای ها چکار می کنند. اولا کسی ادعای حرفه ای بودن نداره، در ثانی میدونی که الگوریتم منحصر به فرد نیست هر کسی ممکنه یک الگوریتم رو بره و به جواب برسه بنابراین تا وقتی به مشکل بر نخوردی پیش برو البته وقتی میتونی ادعا کنی ایراد نداره که برنامه ات زیر بار مشکل نداشته باشه.
6- در مورد Refresh چرا تابع نوشتی؟ خوب همون دو تا دستور رو توی برنامه بنویس. از اسمهای مشابه پرهیز کن احتمال خطا بالا میره. حتی خود فرم هم Refresh داره. ضمنا ساده ترین و مطمئن ترین راه همون بستن و مجددا باز کردن جدول یا کوئری است (برای شروع خوبه).
7- حتما ساخت و استفاده از Stored Procedure و ارسال و دریافت اطلاعات به و از اون رو در تاپیک ات توضیح بده.
8- بعد از اون تا حد امکان در مورد View و Function و چیزهای دیگری مثل Trigger ها توضیح بده هرچند این مسایل یکمی مربوط به یه تالار دیگه میشه. اما در اینجا معرفی بشه بد نیست.
موفق باشی.

Atlas_softWare
یک شنبه 22 دی 1387, 13:01 عصر
با سلام
شما گفتید که ساختن connectionstring(البته فکر می کنم که منظورتون در زمان اجرا برنامه) ساده است .
می خواستم بدونم شما می تونید در مورد شئ Tsqlconnection چطوری می شه در زمان اجرا IP server را عوض کرد تا به یک server دیگر که بانک بر روی آن است وصل شد؟

bmanfy
یک شنبه 22 دی 1387, 17:07 عصر
دوست خیلی مرسی که در این باره صحبت کردی . انرژی مثبت یعنی همین . ممنون از لطفت.



2- عنوان خوبی انتخاب نکردی عنوان فعلی و موارد مطرح شده فقط حول Connection String هست. اگر من بودم عنوان «آموزشی: نوشتن برنامه تحت شبکه با Delphi و SQL Server» رو انتخاب می کردم.


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



6- در مورد Refresh چرا تابع نوشتی؟ خوب همون دو تا دستور رو توی برنامه بنویس. از اسمهای مشابه پرهیز کن احتمال خطا بالا میره. حتی خود فرم هم Refresh داره. ضمنا ساده ترین و مطمئن ترین راه همون بستن و مجددا باز کردن جدول یا کوئری است (برای شروع خوبه).


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



7- حتما ساخت و استفاده از Stored Procedure و ارسال و دریافت اطلاعات به و از اون رو در تاپیک ات توضیح بده.
8- بعد از اون تا حد امکان در مورد View و Function و چیزهای دیگری مثل Trigger ها توضیح بده هرچند این مسایل یکمی مربوط به یه تالار دیگه میشه. اما در اینجا معرفی بشه بد نیست.


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

vcldeveloper
یک شنبه 22 دی 1387, 17:18 عصر
می خواستم بدونم شما می تونید در مورد شئ Tsqlconnection چطوری می شه در زمان اجرا IP server را عوض کرد تا به یک server دیگر که بانک بر روی آن است وصل شد؟
TSQLConnection از جمله کامپوننت های dbExpress هست. این کامپوننت ها از ConnectionString استفاده نمی کنند، بلکه داده های مربوط به اتصال به سرور را بطور پیش فرض از یک فایل INI می خوانند.
اگر می خواید یک اتصال dbExpress را در Runtime مقداردهی کنید، باید ابتدا خودتان از طریق کد به خصوصیاتی مثل Driver، LibraryName, GetDriverFunc مقدار بدهید، و سپس اطلاعاتی مثل Username, Password, Database, HostName و غیره را بصورت پارامتر به Connection اضافه کنید. مثالی از این کار برای اتصال به بانک اطلاعاتی Interbase در لینک زیر وجود داره:
http://www.delphi3000.com/articles/article_3286.asp?SK=

Atlas_softWare
سه شنبه 24 دی 1387, 12:20 عصر
ممنون از راهنماییتون ، از این روش قبلا استفاده کردم ولی بعضی وقتها با وجود اینکه ip را هم در اجرا درست وارد می کنم برنامه هنگ می کنه و نمی تونه به server وصل بشه روش دیگه ای وجود نداره؟ یه جا خوندم با indyها میشه و راهش رو نمی دونم. اگه راهنماییم کنید ممنون میشم.

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

vcldeveloper
چهارشنبه 25 دی 1387, 02:24 صبح
یه جا خوندم با indyها میشه و راهش رو نمی دونم.
اون موقع دیگه اسمش نمیشه اتصال به بانک از طریق dbExpress (یا TSQLConnection)، بلکه اسمش میشه اتصال به بانک اطلاعاتی از طریق Indy.
Indy مکانیزم آماده ایی برای اتصال به بانک ارائه نمیده، چون Indy فقط یک سری کامپوننت برای اتصال به شبکه و کار با پروتکل های رایج شبکه هست. اگر بخواید با Indy به بانک وصل بشید، باید با Indy خودتون یک چیزی مثل dbExpress یا ADO بنویسید(!!) که فکر نمی کنم شما دنبال همچین چیزی باشید!
راه اتصال به بانک در زمان runtime از طریق dbExpress همان هست، حالا اینکه نرم افزار شما هنگ میکنه، میتونه هزار و یک علت مختلف داشته باشه.

rezazd
چهارشنبه 25 دی 1387, 13:41 عصر
اون موقع دیگه اسمش نمیشه اتصال به بانک از طریق dbExpress (یا TSQLConnection)، بلکه اسمش میشه اتصال به بانک اطلاعاتی از طریق Indy ............ هنگ میکنه، میتونه هزار و یک علت مختلف داشته باشه.

بهترین راه اینه که شما از ریجستری ها استفاده کنید یا از فایل های ini

با این روش شما با یک برنامه کوچک جدا گانه از کاربر( که معمولا خودتونید) اسم سرور/ بانک /و رمز رو میپرسید و با یک الگوریتم مسخره ای مثلا xor کردن کاراکتر ها با یک کارکارکتر +1 ( ثابت) اونها رو در رجیستری یا فایل ini بصورت رمز شده ذخیره میکنید
برنامه اصلی قبل از باز کردن دیتا بیس اطلاعات مربوطه را از رجیستری یا فایل ini میخواند
و در کانکشن استرینچ به صورت runtime قرار میدهد

ضمنا indy جهت کارهای وبی و اینترنتی مثل میل اف تی پی کاربرد دارد
حسن این کار چیست ؟
اولا برنامه شما روی هر کلاینتی اجرا نمیشود مگر شما بخواهید
دوما شما میتوانید کلاینت های مختلف رو با دسترسی های مختلف به بانک متصل کنید

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

vcldeveloper
پنج شنبه 26 دی 1387, 00:17 صبح
نقل قول:
نوشته شده توسط علی کشاورز http://barnamenevis.org/forum/images/buttons/viewpost.gif (http://www.barnamenevis.org/forum/showthread.php?p=664356#post664356)
اون موقع دیگه اسمش نمیشه اتصال به بانک از طریق dbExpress (یا TSQLConnection)، بلکه اسمش میشه اتصال به بانک اطلاعاتی از طریق Indy ............ هنگ میکنه، میتونه هزار و یک علت مختلف داشته باشه.

بهترین راه اینه که شما از ریجستری ها استفاده کنید یا از فایل های ini

با این روش شما با یک برنامه کوچک جدا گانه از کاربر( که معمولا خودتونید) اسم سرور/ بانک /و رمز رو میپرسید و با یک الگوریتم مسخره ای مثلا xor کردن کاراکتر ها با یک کارکارکتر +1 ( ثابت) اونها رو در رجیستری یا فایل ini بصورت رمز شده ذخیره میکنید
برنامه اصلی قبل از باز کردن دیتا بیس اطلاعات مربوطه را از رجیستری یا فایل ini میخواند
و در کانکشن استرینچ به صورت runtime قرار میدهد

خب این چه ارتباطی به سوال این بنده خدا داشت؟! این آقا می خواسته با dbExpress به یک بانک اطلاعاتی وصل بشه، و خصوصیات اتصال به بانک را هم بصورت runtime به dbExpress بده. مشکلش این نبود که چطور این خصوصیات را جایی ذخیره کنه، مشکلش این بود که dbExpress چیزی بنام ConnectionString برای تنظیم نداره تا ایشون بعد از دریافت اطلاعات سرور از کاربر، اتصال dbExpress را بصورت دینامیک تنظیم کند.

Atlas_softWare
پنج شنبه 26 دی 1387, 10:54 صبح
از توضیحاتتون ممنون،شما مثالی از استفاده indy ها دارید؟ اگه ممکنه برام بذارید.

vcldeveloper
پنج شنبه 26 دی 1387, 11:33 صبح
شما مثالی از استفاده indy ها دارید؟
Indy مشکلی را که بهش اشاره کردید حل نمیکنه! قبلا هم گفتم که Indy راه حلی برای استفاده از پروتکل های متداول شبکه هست، نه برای اتصال به بانک اطلاعاتی. اونی که شما دیدید کسی گفته از Indy میشه استفاده کرد، طرف در سمت سرور با یکی از روشها اتصال به بانک اطلاعاتی مثل DBExpress یا ADO رکوردها را از بانک دریافت میکنه، بعد فقط از Indy برای انتقال رکورد به کلاینت ها استفاده میکنه، که میشه یک برنامه 3-tier.
جواب سوال شما Indy نیست که بخواید وقتتان را روی آن تلف کنید.

alireza1010
پنج شنبه 11 تیر 1388, 16:32 عصر
سلام به همگی دوستان من بیشتر سعی می کنم کل تاپیک ها رو بگردم بعد سوال کنم اما متاسفانه در باره اینتربیس و دی بی اکسپرس جز این مقاله البته عالی چیزی پیدا نکردم لطف کنید تو مباحث ریزتره اینتر بیس در دلفی وارید شید . من می خوام بدون کمک sql server تو شبکه بانکمو بین دو تا کلاینت اشتراک کنم شنیدم با دی بی اکسپرس می شه کتابی هم خریدم اما ترجمه است و اصلا چیزی نفهمیدم برنامه نویسی دلفی را هم بلدم اگه نمی شه لطف کنید یه تاپیک یا پی دی اف خوب درمورد sql server و نحوه کار با اون تو دلفی بهم معرفی کنید بخدا دیگه خسته شدم بس که گشتم . ممنون قربون همتون منتظرم