View Full Version : چه مواردی را در سمت سرور برنامه باید پیاده سازی کرد؟
amir_alaki
شنبه 23 آبان 1394, 17:36 عصر
با سلام
دوستان می خواستم از تجربه های کاریتون در مورد نوشتن یک سرو DataSnap صحبت کنید و اینکه چه مواردی را برای اینکه سروی چابک تر داشته باشیم باید رعایت و یا پیاده سازی کنیم
البته جزئیات بیشتر به نوع پروژه برمیگرده ولی کلیات رو میشه فعلا بررسی کرد.
و اینکه چه مواردی رو در سمت سرور پیاده سازی کرد؟
مثلا در یک سروری که برای سیستم حسابداری نوشته شده است بهتر محاسبات مانده حساب مثلا در ClientDataset ریخته بشه و در سرور محاسبات مانده گیری روش انجام بشه و یا در کلاینت؟
یا اینکه آیا سرور باید آمار اتصال کلاینت ها و قطع شدنشون رو داشته باشه؟
تشکر
Mask
شنبه 23 آبان 1394, 17:53 عصر
دوستان می خواستم از تجربه های کاریتون در مورد نوشتن یک سرو DataSnap صحبت کنید و اینکه چه مواردی را برای اینکه سروی چابک تر داشته باشیم باید رعایت و یا پیاده سازی کنیم
البته جزئیات بیشتر به نوع پروژه برمیگرده ولی کلیات رو میشه فعلا بررسی کرد.
سلام. حرف که زیاده. اما بر اساس تجربه شخصیم استفاده از TCP خیلی بهتر و سریعتر هست نصبت به HTTP.
سعی کنید ارتباطات رو حفظ کنید. وصل و قطع شدن کلاینت به سرور بار زیادی در تعداد یوزر بالا برای سرور داره.
سعی کنید با دید مالتی ترد و مالتی تایر طراحی رو شروع کنید. البته دیتا اسنپ خیلی از موارد رو به خودی خود پشتیبانی میکنه. اما جایزه خودتون با دقت این عملیات رو بررسی کنید.
مثلا در یک سروری که برای سیستم حسابداری نوشته شده است بهتر محاسبات مانده حساب مثلا در ClientDataset ریخته بشه و در سرور محاسبات مانده گیری روش انجام بشه و یا در کلاینت؟
مطمئنن باید سمت سرور عملیات پردازشی انجام بشود. باید سعی بشه عملیات گرافیکی و UI سمت کاربر و محاسبات سمت سرور انجام بشود. دقت کنید با استفاده از متد کشینک از تکرار پردازشها جلوگیری کنید.
ا اینکه آیا سرور باید آمار اتصال کلاینت ها و قطع شدنشون رو داشته باشه؟
یک برنامه قوی باید تمام مراحل اتصال، اینسرت ، ویرایش و .. رو با دقت لاگ گیری بکنه. اتصال و قطع ارتباط که موضوع لازم و پیش پا افتاده ای هست.
البته موارد اموزشی و تجربه زیاده ، اما با درگیر شدن خودتون با این منوال خیلی از مشکلات به خودیه خود تجربه جالبی براتون میشود.
موفق باشید.
amir_alaki
یک شنبه 24 آبان 1394, 11:00 صبح
متشکرم بابت نظر ها و راهنمایی هاتون جناب MASK ، دوستان دیگر هم اگه تجربه مشابه دارند لطفا مطرح کنند
ابوالفضل عباسی
دوشنبه 25 آبان 1394, 19:10 عصر
باسلام خدمت شما دوستان عزیز
من خودم با اینکه سن و سال زیادی ندارم نظر قطعی نمی دم ولی تاجایی که خودم کارکردم میگویم.:لبخند::چشمک:
من از TCP و FTP به شدت کار کرده ام چه درزمینه کامپیوتر و چه در زمینه اندروید(PC-PC) هم (Android-PC) هم (Android-Android) یکمی هم با HTTP کارکردم
ولی نظر شخصی من با TCP هست چون سرعت بالاتری داره و هم میتونی چک کنی اگر اتصال قطع شده اطلاعات رو در cache ذخیره کن و وقتی ارتباط برقرار شد ارسال کن،و این یعنی نظارت کامل روی datasnap.
شما باید توی گود این تبادل اطلاعات از طریق دلفی بیوفتی تا بفهمی کدوم راه مناسب ترینه.:متفکر:
ولی خودم یه سوال داشتم از کسانی که در datasnap قوی هستند: وقتی از طریق datasnap میخوام از بانک اطلاعاتی استفاده کنم (از بانکی که رو کامپیوتر اجراست و از اندروید میخوام دریافت کنم)از هر دوطرف ping میگیرم ارتباط برقرار هست ولی داخل برنامه تبادل انجام نمیشه:متعجب:.اما وقتی انتی ویروس کامپیوتر رو خاموش میکنم سریع اطلاعات تبادل میشه.چرا اینطور هست؟
یعنی اگر انتی ویروس وصل باشه تبادل انجام نمیشه؟چه 2 کامپیوتر باهم و چه اندروید به کامپیوتر اینطوریه؟
اگر اینطوری باشه که خیلی بد میشه که!!!؟؟:اشتباه:(چون دائم باید انتی ویروس رو خاموش کنی:عصبانی:)
amir_alaki
دوشنبه 25 آبان 1394, 20:33 عصر
باسلام خدمت شما دوستان عزیز
من خودم با اینکه سن و سال زیادی ندارم نظر قطعی نمی دم ولی تاجایی که خودم کارکردم میگویم.:لبخند::چشمک:
من از TCP و FTP به شدت کار کرده ام چه درزمینه کامپیوتر و چه در زمینه اندروید(PC-PC) هم (Android-PC) هم (Android-Android) یکمی هم با HTTP کارکردم
ولی نظر شخصی من با TCP هست چون سرعت بالاتری داره و هم میتونی چک کنی اگر اتصال قطع شده اطلاعات رو در cache ذخیره کن و وقتی ارتباط برقرار شد ارسال کن،و این یعنی نظارت کامل روی datasnap.
شما باید توی گود این تبادل اطلاعات از طریق دلفی بیوفتی تا بفهمی کدوم راه مناسب ترینه.:متفکر:
ولی خودم یه سوال داشتم از کسانی که در datasnap قوی هستند: وقتی از طریق datasnap میخوام از بانک اطلاعاتی استفاده کنم (از بانکی که رو کامپیوتر اجراست و از اندروید میخوام دریافت کنم)از هر دوطرف ping میگیرم ارتباط برقرار هست ولی داخل برنامه تبادل انجام نمیشه:متعجب:.اما وقتی انتی ویروس کامپیوتر رو خاموش میکنم سریع اطلاعات تبادل میشه.چرا اینطور هست؟
یعنی اگر انتی ویروس وصل باشه تبادل انجام نمیشه؟چه 2 کامپیوتر باهم و چه اندروید به کامپیوتر اینطوریه؟
اگر اینطوری باشه که خیلی بد میشه که!!!؟؟:اشتباه:(چون دائم باید انتی ویروس رو خاموش کنی:عصبانی:)
با سلام
متشکرم که نظر دادین
این مورد ماله Firewall هست که آنتی ویروس فعال میکنه و پورت های سیستم شما رو می بنده
باید شماره پورت DataSnap رو در قسمتی که در تصویر زیر هست باز کنید.
136846
ابوالفضل عباسی
سه شنبه 26 آبان 1394, 13:11 عصر
دستت دردنکنه کارم رو راحت تر کردی.:تشویق:
ولی یه سوال نمیشه یه پورتی رو انتخاب کرد که نیاز نباشه پورت های بسته شده رو بازکنی؟در datasnap
چون من اینطوری برای هر کلاینت باید پورت بازکنم و این خطرناکه چون ممکنه از اون پورت سیستم ها هک بشه.
Mask
سه شنبه 26 آبان 1394, 15:48 عصر
فقط پورت دیتا اسنپ رو باز کنید. نه همه پورتها رو
ابوالفضل عباسی
سه شنبه 26 آبان 1394, 17:13 عصر
ببخشید این سوال رو میپرسم:
توی این لیست پورت ها کدومش برای دیتا اسنپه هست که بازش کنم؟:متعجب:
Mask
سه شنبه 26 آبان 1394, 20:28 عصر
بوسیله برنامه های جانبی مثل ProcessHacker و ... میتونید ببینید چه برنامه ای چه پورتی رو اشغال کرده.
amir_alaki
سه شنبه 26 آبان 1394, 21:17 عصر
سلام پورت datasnap رو خودت تعريف ميكني،هموم رو توي سرور و كلاينت باز كن
پيش فرضش ٢١١ و ٨٠٨٠ براي tcp و http
ابوالفضل عباسی
چهارشنبه 27 آبان 1394, 09:52 صبح
خیلی ممنون با همون برنامه Process Hacker پورت datasnap رو پیدا کردم و بازش کردم.
برنامه خوبیه Process Hacker راحت پورت هایی که برنامه ها استفاده میکنند رو میتونی پیدا کنی و ببندی و یا باز کنی
soft-c
سه شنبه 11 اسفند 1394, 09:00 صبح
ولی نظر شخصی من با TCP هست چون سرعت بالاتری داره و هم میتونی چک کنی اگر اتصال قطع شده اطلاعات رو در cache ذخیره کن و وقتی ارتباط برقرار شد ارسال کن،و این یعنی نظارت کامل روی datasnap.
میشه در مورد cache بیشتر توضیح بدید. آیا در مورد این موضوع کد یا برنامه ای دارید که بتوان استفاده کرد؟
یک سوال دیگه :
اگر من جدول را مستقیما وارد قسمت سرور بکنم و بعد روی اونها عملیات انجام بدم بهتره یا اینکه متدهای دسترسی را سمت سرور فقط بنویسم و خروجی جداول را به کلاینت ارسال کنم ؟
ابوالفضل عباسی
سه شنبه 11 اسفند 1394, 09:33 صبح
با سلام جدول رو روی سرور تنظیم کنید و از طریق کلاینت به اون رکورد جدید اضافه کنید،اینطوری فقط یک رکورد میفرستید و پهنای باند و ترافیک ایجاد نمیشه.
ولی اگر جدول در کلاینت باشه ،باید کل بانک رو انتقال بدی که ممکنه توی انتقال یک بیت جابه جا و یا گم بشه و بانک ناقص فرستاده بشه.
درمورد cache هم نمونه کد که بتونم بذارم ندارم(شاید توی اینترنت باشه)ولی در tcp مثل دانلود منیجر یک فایل روی سیستم ایجاد میشه و شروع دریافت میکنه و یک زمان که اتصال قطع میشه،cache هست و درصورد برقراری ارتباط فایل از ادامه شروع به دریافت میشه.
soft-c
سه شنبه 11 اسفند 1394, 09:52 صبح
اگر جدول را مستقیما در سرور وارد کنم و بعد اون جدول را به clientdataset در کلاینت وارد کنم چطوره؟
جدول را که مستقیما در سرور وارد می کنم یعنی عملیاتهایی مانند فیلتر و ... را هم روی همون جدول پیاده سازی کنم و دیگه نیازی به نوشتن sp و function نیست ؟( منظورم اینه که مثل قبل که sp را روی sql server می نوشتیم و پارامتر را از کلاینت ارسال می کردیم)
ابوالفضل عباسی
سه شنبه 11 اسفند 1394, 09:56 صبح
جدول رو مستقیما در سرور وارد کنید و در کلاینت از clientdataset استفاده کنید برای نمایش و اصلاحات و اضافه کردن رکورد.
فیلتر روی clientdataset انجام میشه و اگر میخواهید که روی جدول اصلی در سرور فیلتر انجام بشه نیاز به function و پروسیجر هایی هست که مستقیما روی جدول اصلی ایجاد بشه.
برای ارتباط هم sqlconnection میشه استفاده کرد.
نمونه datasnap توی Sample های دلفی هست که میتونید الگو بگیرید.
soft-c
سه شنبه 11 اسفند 1394, 09:59 صبح
جدول اصلی منظورتون جدولی هست که روی سرور وارد کردیم یا جدول موجود روی sql server.
اگر بخواهیم روی clientdataset این عملیات انجام بشه یک بحثی به وجود می اید و اون اینکه اگر هم زمان چند تا کاربر بخواهند روی این اطلاعات کار کنند :
1- چه طوری بقیه کاربرها از این تغییرات در لحظه مطلع بشوند؟
2- چگونه جلوی درج اطلاعات تکراری در ارسال های هم زمان کاربرها گرفته شود ؟
ابوالفضل عباسی
سه شنبه 11 اسفند 1394, 10:00 صبح
همون جدولی که روی سرور هست رو میگوییم جدول اصلی یا main table
که اگر بانکتون sql هست، جدول اصلی جدول sql میشود.(درصورتی که در برنامه روی سرور قرار نیست عملیات های دیگری انجام بشود،اگر قرار عملیات های دیگری انجام شود،جدول اصلی،جدول سرور است که به بانک sql متصل است.)
به نظرم شما در برنامه روی سرور به بانک sql اتصال داشته باش و با datasnap به جدول برنامه داخل سرور متصل شوید.این طوری sql server بین کلاینت ها درگیر نمیشود و فقط با برنامه اصلی متصل و درگیر است.
soft-c
سه شنبه 11 اسفند 1394, 10:04 صبح
اگر بخواهیم روی clientdataset این عملیات انجام بشه یک بحثی به وجود می اید و اون اینکه اگر هم زمان چند تا کاربر بخواهند روی این اطلاعات کار کنند :
1- چه طوری بقیه کاربرها از این تغییرات در لحظه مطلع بشوند؟
2- چگونه جلوی درج اطلاعات تکراری در ارسال های هم زمان کاربرها گرفته شود ؟
ابوالفضل عباسی
سه شنبه 11 اسفند 1394, 10:07 صبح
باید روی کلاینت ها یک function نوشته شود که جدول اصلی سرور یا Sql server رو رفرش کند و قبل از ثبت اطلاعات و فرستادن به جدول اصلی چک بشه که این اطلاعات تکراری هست یا نه.
مثالی که خود دلفی برای datasnap دارد به همه ی این ها توجه کرده است،اعم از رفرش بانک اطلاعاتی.
این function رو یک تایمر داخل کلاینت باید بر عهده بگیرد که هر چند ثانیه و یا هر چند دقیقه بانک اطلاعاتی رو رفرش کند.
یا میتوان بجای function داخل کلاینت روی سرور،داخل برنامه اصلی این کار رو به عهده یک تایمر گذاشت که بانک اطلاعاتی رو رفرش کند.(این طوری بهتر هست)
من خودم برای پروژه های datasnap یا از access استفاده میکنم یا sql server و در مواقعی که از sql server استفاده میکنم.فقط سرور رو به sql متصل میکنم،و رفرش بانک رو هر 30 ثانیه انجام میدهم.(تنها مشکل این روش،اینکه سرور درگیر تایمر و حلقه های پشت سرهم زمانی که حجم اطلاعات و رکورد ها زیاد هست میشه که،اون هم با خاموش و روشن کردن تایمر جلوی اون رو گرفتم و هیچ وقت دوبار تایمر روی هم اجرا نمی شوند که رَم رو درگیر بکنند.)
soft-c
سه شنبه 11 اسفند 1394, 10:14 صبح
آیا امکان استفاده از firedac هم به جای sqlconnection وجود داره؟
ابوالفضل عباسی
سه شنبه 11 اسفند 1394, 10:32 صبح
من خودم برای بانکی که با استفاده از firedac در سرور موجود است رو با Sqlconnection از طریق کلاینت ها به سرور ارتباط میدهم.
و با fdmemtable بانک رو از طریق datasnap به کلاینت ها انتقال میدهم.
fdconnection این قابلیت sqlconnection رو ندارد
soft-c
چهارشنبه 12 اسفند 1394, 09:37 صبح
من خودم برای بانکی که با استفاده از firedac در سرور موجود است رو با Sqlconnection از طریق کلاینت ها به سرور ارتباط میدهم.
و با fdmemtable بانک رو از طریق datasnap به کلاینت ها انتقال میدهم.
fdconnection این قابلیت sqlconnection رو ندارد
اگر دقیقا کامپوننتهایی که هنگام درگ کردن جدول در datasnap ساخته می شود را با firedac جایگزین کنیم از چه کامپوننتهایی می توان استفاده کرد؟
از کامپوننت TFDMemTable چطوری استفاده می کنید؟ میشه به جای اون از TFDTable استفاده کرد یا کاربرد اون چیز دیگری است ؟
وقتی جدول را درگ می کنیم دو تا کامپوننت ایجاد می شود : 1- sql connection و 2- sqldataset
ابوالفضل عباسی
چهارشنبه 12 اسفند 1394, 10:13 صبح
میشه با firedac جایگزین کرد.ولی در کلاینت که قراره بانک رو با Datasnap بگیره،باید از FDMemTable استفاده کنی.نمیشه از FDTable استفاده کرد.
کار FDMemTable اینکه بانک رو از طریق مموری و cache برای کلاینت فرستاده شده اجرا کنه(همون cache که از طریق datasnap ایجاد میشه و اطلاعات ، داده های بانک اطلاعاتی سرور داخلش قرار داره)
بعد اون sqldataset نیازی نیست همون sqlconnection کافیه.
soft-c
چهارشنبه 12 اسفند 1394, 10:46 صبح
میشه با firedac جایگزین کرد.ولی در کلاینت که قراره بانک رو با Datasnap بگیره،باید از FDMemTable استفاده کنی.نمیشه از FDTable استفاده کرد.
کار FDMemTable اینکه بانک رو از طریق مموری و cache برای کلاینت فرستاده شده اجرا کنه(همون cache که از طریق datasnap ایجاد میشه و اطلاعات ، داده های بانک اطلاعاتی سرور داخلش قرار داره)
تنظیمات FDMemTable چطوریه؟ من هرچی تو تنظیماتش گشتم موفق نشدم به نتیجه ای برسم
بعد اون sqldataset نیازی نیست همون sqlconnection کافیه.
اگر از sqldataset استفاده نکنیم پس چطوری جدول را به کلاینت منتق کنیم ؟
این روشی که من استفاده کردن بهتره یا اینکه شما گفتید و روش من چه مشکلاتی می تونه داشته باشه؟:
من در datasnap یک ّFDConnection و یک TFDTable گذاشتم و سمت کلاینت هم جدول را داخل ClinetDataset ریختم .
ابوالفضل عباسی
چهارشنبه 12 اسفند 1394, 10:54 صبح
برای firedac فکر نکنم بشه به client dataset ارتباط داد.
برای تنظیمات FDMemTable باید نمونه کد های datasnap ای که با Firedac نوشته اند پیدا کنید.اگر ورژن دلفی تون بالای xe5 باشه نمونه کد datasnap اش موجوده توی فایل های دلفی.وگرنه باید در اینترنت پیدا کنی:(یا از این نمونه کد زیر استفاده کن که مخصوص datasnap firedac هستش،ولی ورژن دلفی باید بالا باشه.)به راحتی میتونی ازش الگو برداری کنی.
از سرور پیکوفایل (http://s6.picofile.com/file/8241500426/FireDACJSONReflect.zip.html)
soft-c
چهارشنبه 12 اسفند 1394, 11:02 صبح
سمت کلاینت من از کامپوننتهای sqlconnection و TDSProviderconnection و clintdataset استفاده کردم و تونستم به datasnap که جدول را با کامپوننت های FDCOnnection و TFDTable و TDatasetProvider لود کرده متصل بشم . آیا این روش اصولی و صحیح است یا خیر؟
ابوالفضل عباسی
چهارشنبه 12 اسفند 1394, 11:14 صبح
اگر با این روش توانسته اید جدول رو با datasnap روی یک کلاینت باز کنید ،پس یعنی درست ارتباط برقرار کرده اند،و روش درست بوده وگرنه نباید اتصال برقرار میشد.یعنی روش شما درست بوده.
soft-c
چهارشنبه 12 اسفند 1394, 16:04 عصر
اگر با این روش توانسته اید جدول رو با datasnap روی یک کلاینت باز کنید ،پس یعنی درست ارتباط برقرار کرده اند،و روش درست بوده وگرنه نباید اتصال برقرار میشد.یعنی روش شما درست بوده.
اصلا این روش اصولی هست ؟یعنی در ادامه کار که برنامه سنگین تر میشه دچار مشکل نمیشه؟
samani
چهارشنبه 12 اسفند 1394, 19:12 عصر
سلام
نظر شخصی بنده با توجه به تجربه کاری ساخت برنامه Multi tier , استفاده از RealThinClient رو پیشنهاد می دم
http://www.realthinclient.com
soft-c
پنج شنبه 13 اسفند 1394, 04:38 صبح
سلام
نظر شخصی بنده با توجه به تجربه کاری ساخت برنامه Multi tier , استفاده از RealThinClient رو پیشنهاد می دم
http://www.realthinclient.com
چرا این را پیشنهاد می کنید ؟ چه مزیتی داره؟
رایگان هست؟
samani
پنج شنبه 13 اسفند 1394, 15:47 عصر
چرا این را پیشنهاد می کنید ؟ چه مزیتی داره؟
رایگان هست؟
همین که از Indy مثل Datasnap استفاده نمی کنه خودش مزیته اینجا نمی خوام وارد بحث Performance کامپوننتهای Indy بشم
با فایروالها و آنتی ویروسها مشکلی نداره , مولتی ترده , http/https یعنی می تونید یه وب سرور به شکل ISAPI Extension, Stand-alone Servers, Third-party Servers بنویسید , استیبل هستش , استرس تست 24/7 بدون هیچ کِرَشی با کمترین هزینه سی پی یو و رم , میشه سرور به شکل ماژولار با انواع سرویسهای فایل و وب و دیتا برای انواع استانداردهای soap, rest, ... با خروجیهای json , xml , stream پیاده سازی کرد
سمت کلاینت رو میشه با یکی دوتا کامپوننت طراحی شده پیچیدگی برنامه نویسی چند لایه و ردیفه رو برای کسانی رو که به برنامه نویسی کلاینت سروری سنتی عادت کردن حذف کرد و شخص با همان دید قبلی با کامپوننتهای دیتاست طراحی شده به جای دیتاستهایی مثل ado , firedac, ... کوئریها رو زده و از هر دیتا کنترل برای عملیات مورد نظر استفاده کنه یه مثال سادش http://www.da-soft.com/thindac/download.html هست
PrivateKey/PublicKey به راحتی قابل پیاده سازی هستش , میشه دیتا رو به شکل فشرده و اینکریپت شده ارسال کرد
برای اطلاعات بیشتر میتونید توضیحات سایتش رو ببینید
چون اگه بخوام تجربیات خودم رو تو این زمینه خلاصه هم بگم باید کار و زندگیم رو ول کنم و چند ماه تایپ کنم
ورژن Opensource که نسخه 2.85 اگه اشتباه نکم رو میشه تو FreePascal یا لازاروس با کمی تغییرات هم استفاده کرد طبق تستی که قبلا زده بودم
ورژن جدیدش 6.5 هستش که تا 10 اتصال کلاینت , مجانی هستش , تو نت بگردی کرک داره یا این که 500 یورو بدی و بخریش
از این که نتونستم کامل توضیح بدم معذرت می خوام
soft-c
شنبه 15 اسفند 1394, 08:53 صبح
مثالی که خود دلفی برای datasnap دارد به همه ی این ها توجه کرده است،اعم از رفرش بانک اطلاعاتی.
این مثال کجاست ؟ من نتونستم پیدا کنم .
soft-c
شنبه 15 اسفند 1394, 09:51 صبح
باید روی کلاینت ها یک function نوشته شود که جدول اصلی سرور یا Sql server رو رفرش کند و قبل از ثبت اطلاعات و فرستادن به جدول اصلی چک بشه که این اطلاعات تکراری هست یا نه.
مثالی که خود دلفی برای datasnap دارد به همه ی این ها توجه کرده است،اعم از رفرش بانک اطلاعاتی.
این function رو یک تایمر داخل کلاینت باید بر عهده بگیرد که هر چند ثانیه و یا هر چند دقیقه بانک اطلاعاتی رو رفرش کند.
یا میتوان بجای function داخل کلاینت روی سرور،داخل برنامه اصلی این کار رو به عهده یک تایمر گذاشت که بانک اطلاعاتی رو رفرش کند.(این طوری بهتر هست)
من خودم برای پروژه های datasnap یا از access استفاده میکنم یا sql server و در مواقعی که از sql server استفاده میکنم.فقط سرور رو به sql متصل میکنم،و رفرش بانک رو هر 30 ثانیه انجام میدهم.(تنها مشکل این روش،اینکه سرور درگیر تایمر و حلقه های پشت سرهم زمانی که حجم اطلاعات و رکورد ها زیاد هست میشه که،اون هم با خاموش و روشن کردن تایمر جلوی اون رو گرفتم و هیچ وقت دوبار تایمر روی هم اجرا نمی شوند که رَم رو درگیر بکنند.)
من الان با روشی که گفتم و استفاده از clientdataset در سمت کلاینت فقط clientdataset را refresh می کنم . به نظر شما که در زمانیکه برنامه سنگین تر میشه که دچار مشکل نمیشه؟
soft-c
دوشنبه 17 اسفند 1394, 01:55 صبح
یک سوال داشتم : چه طوری میشه جلوی درج رکورد تکراری را گرفت ؟
ببینید طبق روشی که من دارم پیش میرم ابتدا رکورد مورد نظر در cliendataset با دستور post درج میشه و بعد با applyupdate روی جدول اصلی درج میشه .
حالا سوال این است که اگر دو نفر هم زمان بخواهند اطلاعات را درج کنند چطوری میشه جلوی درج اطلاعات تکراری اون هم در جدول اصلی را گرفت ؟
ابوالفضل عباسی
سه شنبه 18 اسفند 1394, 07:49 صبح
اگر table اصلی رفرش بشه بهتر هست. این طوری clientdataset توی شبکه گیرنمی کنه مخصوصا اگر حجم دیتا زیاد باشه.
وقتی رفرش بکنی،از رکورد تکراری جلوگیری میشه.ولی زمانی که تایمر میخواد table رو رفرش کنه،یک while بگذار تا اگر رکورد تکراری بود به کلاینت ها پیغام بده تا یکی اون رو اصلاح کنه.
soft-c
چهارشنبه 19 اسفند 1394, 05:30 صبح
اگر table اصلی رفرش بشه بهتر هست. این طوری clientdataset توی شبکه گیرنمی کنه مخصوصا اگر حجم دیتا زیاد باشه.
وقتی رفرش بکنی،از رکورد تکراری جلوگیری میشه.ولی زمانی که تایمر میخواد table رو رفرش کنه،یک while بگذار تا اگر رکورد تکراری بود به کلاینت ها پیغام بده تا یکی اون رو اصلاح کنه.
من چک کردم ، تا زمانیکه clientdataset را آپدیت نکنیم اطلاعات به روز نمی شود حتی اگر جدول اصلی به روز شده باشد
ابوالفضل عباسی
چهارشنبه 19 اسفند 1394, 12:15 عصر
خب همون client dataset رو رفرش کنید
soft-c
یک شنبه 23 اسفند 1394, 04:38 صبح
خب همون client dataset رو رفرش کنید
آیا این راه در آینده که کاربران بیشتر می شوند دچار مشکل نمیشه ؟ راه اصولی تر و بهتری هم وجود دارد؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.