ورود

View Full Version : امكان تحت شبكه كردن يه برنامه تك كاربره كه از adotalbe استفاده شده؟!؟



oghab
سه شنبه 12 خرداد 1388, 10:22 صبح
به نام خدا
با سلام خدمت اساتيد گرامي
يه سوال شايد به ظاهر ساده داشتم. خواهش ميكنم راهنمايي كنيد.
من يك برنامه دارم با حدود 30-40 جدول در sql Server كه در برنامه براي ارتباط با اونها از adotable استفاده كردم. يعني 30-40 تا adotable دارم كه همشون به يك adoconnection كه به database مربوطه وصل شده وصل هستند.
براي تغيير و اضافه و حذف ركوردها هم از dbnavigator استفاده كردم و اين كار را با كدنويسي انجام ندادم.
حالا سوال من اين هست كه ميشه اين برنامه را تحت شبكه كرد؟ يك سبكه كوچيك مثلا 5 كاربره. كه databse روي يكي از كامپيوترها باشه و اون چهارتاي ديگه از طريق شبكه به database كه روي كامپيوتر اصلي هست وصل بشند. و همزمان به برنامه ركورد اضافه كنند و يا تغيير بدند.
آيا استفاده از adotable و dbnavigator باعث ميشه (اصطلاحش را يادم رفته :( اگه لطف كنيد بگيد به اين مسئله چي گفته ميشه خيلي ممنون ميشم ) كه در استفاده از يه جدول خاص دچار مشكل بشند و مثلا وقتي همزمان هر دو ميخواهند يه ركورد اضافه كنند. يا هر دو همزمان بخواهند يه ركورد خاص را ويرايش كنند مشكل پيش مياد؟ يا تحت شبكه كردن اين برنامه امكان پذير هست؟

ar_mokhtari
سه شنبه 12 خرداد 1388, 11:12 صبح
من خودم تجربه ورود اطلاعات با dbnavigator رو نداشتم و كد نويسي ميكنم اما فكر نميكنم تفاوتي در هنگام post شدن اطلاعات به DB رو داشته باشه. توي SqlServer هيچگاه ورود اطلاعات يا ويرايش اطلاعات همزمان اتفاق نميافته. هميشه يك client زودتر درخواستش ميرسه هرچند اين زمان كسري از ثانيه باشه. خوب اگر موضوع ورود اطلاعات باشه كه دو ركورد مجزا خواند داشت و اگر ويرايش اطلاعات باشه هركدوم زودتر post كنند زودتر ويرايش ميشه.

oghab
سه شنبه 12 خرداد 1388, 11:42 صبح
من خودم تجربه ورود اطلاعات با dbnavigator رو نداشتم و كد نويسي ميكنم اما فكر نميكنم تفاوتي در هنگام post شدن اطلاعات به DB رو داشته باشه. توي SqlServer هيچگاه ورود اطلاعات يا ويرايش اطلاعات همزمان اتفاق نميافته. هميشه يك client زودتر درخواستش ميرسه هرچند اين زمان كسري از ثانيه باشه. خوب اگر موضوع ورود اطلاعات باشه كه دو ركورد مجزا خواند داشت و اگر ويرايش اطلاعات باشه هركدوم زودتر post كنند زودتر ويرايش ميشه.

خيلي ممنون از راهنمايي تون.
يه نفر به من ميگفت كه وقتي تو از adotable استفاده ميكني. چون همه جدولها باز (open) هستند. تحت شبكه مشكل پيدا ميكني و همزمان نمي تونند كار كنند و مشكل پيدا ميكنه. (كاش اصطلاحش يادم مي آمد) ولي خب حرف شما هم منطقيه.
اگه بدونم با اطمينان خاطر به مشتريم بگم كه اين برنامه را ميشه تحت شبكه كرد يا امكانش را نداره خيلي خوب ميشه. قبلا در مورد تحت شبكه كردنش مطالعاتي كردم ولي چون چند چند تا كامپيوتر شبكه در خاتيارم نبوده هيچوقت نشده امتحان كنم. ولي ميخوام بدونم واقعا ميشه بدون مشكل اين كار را كرد. چون اون يه نفر كه زياد هم ازش مطمئن نيستم ميگفت كلا برنامه اي كه با adotable و dbnavigator باشه را نميشه شبكه كرد.

ar_mokhtari
سه شنبه 12 خرداد 1388, 12:03 عصر
يه نفر به من ميگفت كه وقتي تو از adotable استفاده ميكني. چون همه جدولها باز (open) هستند. تحت شبكه مشكل پيدا ميكني
من توي برنامه فقط از AdoQuery استفاده ميكنم و AdoTable رو تجربه ندارم ولي از SqlServer مطمئن هستم. اگه از دوستان كسي با AdoTable توي شبكه مشكل داشته لطفاً راهنمايي كنه.

vcldeveloper
سه شنبه 12 خرداد 1388, 18:39 عصر
بستگی به نحوه استفاده شما داره؛ اینکه از AdoQuery استفاده کنید یا از AdoTable، به خودی خود مشکلی بوجود نمیاره، بلکه نحوه استفاده شما هست میتونه مشکل ایجاد کنه؛ مثلا اینکه فیلدهای کلید به چه شکلی در جداول تعریف شدند، آیا فیلدهای Identity مربوط به SQL Server هستند، یا برنامه خودش به این فیلدها مقدار میده، یا اینکه سیاست برنامه شما در برخورد با ویرایش های همزمان چی هست؟ آیا اگر دو کاربر دو فیلد متفاوت از یک رکورد را ویرایش کنند، برای برنامه شما قابل قبول هست، یا در هر هنگام ویرایش هر فیلدی از آن رکورد، باید کل رکورد در برابر ویرایش قفل بشه؟ و مسائلی از این قبیل.

oghab
سه شنبه 12 خرداد 1388, 19:09 عصر
بستگی به نحوه استفاده شما داره؛ اینکه از AdoQuery استفاده کنید یا از AdoTable، به خودی خود مشکلی بوجود نمیاره، بلکه نحوه استفاده شما هست میتونه مشکل ایجاد کنه؛ مثلا اینکه فیلدهای کلید به چه شکلی در جداول تعریف شدند، آیا فیلدهای Identity مربوط به SQL Server هستند، یا برنامه خودش به این فیلدها مقدار میده، یا اینکه سیاست برنامه شما در برخورد با ویرایش های همزمان چی هست؟ آیا اگر دو کاربر دو فیلد متفاوت از یک رکورد را ویرایش کنند، برای برنامه شما قابل قبول هست، یا در هر هنگام ویرایش هر فیلدی از آن رکورد، باید کل رکورد در برابر ویرایش قفل بشه؟ و مسائلی از این قبیل.

ممنون از اينكه وقت گذاشتيد. همه جدولهام به جز يكي فيلد كليدشون در sql داراي identitiy برابر yes هستند و خود sql مقدار دهي ميكنه. فقط كليد اصلي يكي از جدولها هست كه خود برنامه مقدار دهي ميكنه و در حال حاضر به اين صورت عمل ميكنه كه هر بار چك ميكنه عددي كه براي كليد تعيين شده در جدول وجود نداشته باشه و اگه وجود نداشت اضافه ميكنه و اگه وجود داشت پيغام ميده كه عدد ديگه اي انتخاب كنيد.
در مورد ويرايش همزمان يك ركورد فكر نميكنم زياد اتفاق بيفته و اگه همزمان دو كاربر بخواند يك ركورد را ويرايش كنند اينكه هركدوم بعد از نفر بعدي كار تغييرش را انجام داد تغييراتش ثبت بشه كفايت ميكنه. يعني اطلاعات به نحوي نيست كه يك تغيير كل رودن برنامه را تغيير بده. اطلاعات هر ركورد يه سري ديتاي معمولا ثابت هستند كه چيزي به اونها بستگي نداره و فكر نميكنم براي اين برنامه قفل ركورد لزومي داشته باشه. چون اطلاعات يه سري پرونده ذخيره ميشه (تقريبا ميشه گفت يه برنامه براي بايگاني اطلاعات هست) و مثلا موجودي انبار نيست كه ويرايش همزان باعث ايجاد مشكل بشه. و به نظرم ويرايش همزان مشكلي براي برنامه ايجاد نخواهد كرد.
حالا با توجه به چيزهايي كه گفتم فكر ميكنيد اين برنامه با اين روش برنامه نويسي (adotable و dbnavigatior) ميتونه تحت شبكه بشه؟
بازم ممنونم

vcldeveloper
چهارشنبه 13 خرداد 1388, 08:07 صبح
فقط كليد اصلي يكي از جدولها هست كه خود برنامه مقدار دهي ميكنه و در حال حاضر به اين صورت عمل ميكنه كه هر بار چك ميكنه عددي كه براي كليد تعيين شده در جدول وجود نداشته باشه و اگه وجود نداشت اضافه ميكنه و اگه وجود داشت پيغام ميده كه عدد ديگه اي انتخاب كنيد.
میتونه در شرایط خاصی ایجاد مشکل کنه: کاربر 1 بررسی میکنه که آیا شماره رکورد مورد نظرش وجود داره یا نه، در زمانی که داره بررسی میکنه، کاربر 2 همان شماره را بررسی میکنه. هر دو جواب میگیرند که شماره مربوطه وجود نداره، و می تونند شماره را ثبت کنند، ولی در این لحظه، کاربر 1 شماره را ثبت میکنه، و زمانی که کاربر 2 می خواد شماره را ثبت کنه، خطا دریافت میکنه که شماره از در جدول وجود داره.


در مورد ويرايش همزمان يك ركورد فكر نميكنم زياد اتفاق بيفته و اگه همزمان دو كاربر بخواند يك ركورد را ويرايش كنند اينكه هركدوم بعد از نفر بعدي كار تغييرش را انجام داد تغييراتش ثبت بشه كفايت ميكنه.
LockType را بر روی Optimistic تنظیم کنید.


يعني اطلاعات به نحوي نيست كه يك تغيير كل رودن برنامه را تغيير بده. اطلاعات هر ركورد يه سري ديتاي معمولا ثابت هستند كه چيزي به اونها بستگي نداره و فكر نميكنم براي اين برنامه قفل ركورد لزومي داشته باشه.
دیتاست ها را طوری تنظیم کنید که در هنگام ویرایش رکرودها فقط مقدار فیلدهای کلید و فیلدهای تغییر یافته را مقایسه کنند، نه کل فیلدها را. برای این کار باید از Dynamic Properties استفاده کنید. چگونگی انجامش قبلا در سایت بحث شده، می تونید عبارت Row cannot be located را در سایت جستجو کنید.

Mask
دوشنبه 08 تیر 1388, 23:39 عصر
با سلام به همه اساتید
من یه برنامه تک کاربره دارم که بانکم sql میشه از ابتدا بگید برا اینکه برنامم چند کاربره بشه و یه سرور باشه که برنامه و بانک اطلاعاتی روش باشه و بقیه کلاینت ها از اون استفاده کنم باید چیکار کنم.
از اول لطفا بگید.
من تا حالا این کار رو نکردم.

Mask
جمعه 12 تیر 1388, 17:25 عصر
سلام به همه دوستان
چرا پس کسی جواب نمیده.
مثل اینکه حوصله ندارید:لبخند:
اگه ممکنه یکی از دوستان یه جواب به من بده.

Ahmad Chehreghani
جمعه 12 تیر 1388, 19:13 عصر
سلام به همه دوستان
چرا پس کسی جواب نمیده.
مثل اینکه حوصله ندارید:لبخند:
اگه ممکنه یکی از دوستان یه جواب به من بده.

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

mskm100
پنج شنبه 18 تیر 1388, 02:02 صبح
سلام
من یه برنامه تک کاربره دارم و بانکش رو با sql server کار کردم و از ado connectio , ado table , ado query , data source استفاده کردم و از طریق odbc با این بانک ارتباط برقرار کردم ، من میخوام این برنامم رو تحت شبکه کنم ولی دو تا مشکل دارم :
1) من در شبکه ای که win server روی سرورش نصب بود و sql server هم نصب بود برنامم رو نصب کردم و script بانکم رو اجرا کردم و در odbc هم ثبتش کردم ولی مشکل اصلیم اینه که چه جوری باید بانک رو در odbc کلاینت ثبت کنم بدون اینکه sql server روی کلاینت نصب بشه و یا اصلا این کار احتیاجی هست یا نه ؟

2) منظور از اینکه به جای local اسم سرور رو وارد کنیم ، همون اسم admin سروره یا اون اسمی که تو service manager هست و یه سری شماره جلوشه ؟ و اینکه این اسم باید با فرمت مشخصی وارد بشه ، مثلا داخل پرانتز باشه یا همینطور معمولی وارد بشه ؟

من فکر کنم اگر این مشکل شبکه کردن با ado connection و adotable و اینها رفع بشه مشکل خیلی ها حل می شه

Ahmad Chehreghani
جمعه 19 تیر 1388, 10:52 صبح
من فکر کنم اگر این مشکل شبکه کردن با ado connection و adotable و اینها رفع بشه مشکل خیلی ها حل می شه

odbc !!!

شما کافيه وقتي روي AdoConnection دوبار کليک مي کنيد، روي دکمه Build کليک کنيد و Provider for SQL Server رو انتخاب کنيد، روي کليد Next کليک کنيد در قسمت Server name اسم کامپيوتري که اس کيو ال روش نصب هست رو بديد و بعد اگه به اسکيوال نام کاربري و رمز معرفي کرديد رمز و نام کاربري بديد، در غير اين صورت گزينه Use Windows NT رو انتخاب کنيد. در قسمت database هم نام ديتابيست رو انتخاب کنيد و تمام.

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