PDA

View Full Version : گفتگو: چکونگی یافتن رکورد تکراری در برنامه



asd_moghadas
چهارشنبه 17 فروردین 1390, 17:02 عصر
باسلام
من برنامه ای را چند سال پیش نوشتم وبه صورت تک کاربره بود حالا نیاز به این هست که در سیستم هایی دیگر نسب شود وبه اطلاعات ان افزوده شود بانک اطلاعاتی sql2005می باشدحالا دومسئله پیش می اید
1-اگر این اطلاعات را به بانک اطلاعاتی اصلی (سیستم سرور)اضافه کنیم رکورد تکراری هم به جداول اضافه می شود زیرا قراراست به علت بعد مسافت وشبکه نبودن برنامه بک آپ برنامه به صورت دستی cdو....به مرکز ارسال شود وبه اطلاعات ماه قبل اضافه شود .
2-اینکه اگر اطلاعات ماههای گذشته ویرایش شود وما بااستفاده از کوئری تشخیص دهیم که این رکورد در دیتابیس موجود است چگونه تشخیص دهیم که فلان تاریخ ویرایش شده ونباید از برنامه حذف شود بلکه باید ویرایش شود.درضمن اطلاعات ورودی شامل نام ،نام خانوادگی ،آدرس،تلفن ،موبایل،و....می باشد.لطفا راهنمایی کنید

ahrimaneahurai
چهارشنبه 17 فروردین 1390, 23:18 عصر
برای هر جدول یه رکورد اضافه میکنی که مشخص کنه فرستاده شده یا نه که پیش فرض نه هست. بعد که اطلاعات رو خواستی انتقال بدی اون فیلد رو تغییر میدی که ارسال شده. توی هر آپدیت هم دوباره تغییر میده که فرستاده نشده. اططلاعات رو که انتقال دادی چک کن که این کد هست یا نه اگه هست آپدیت کن.

asd_moghadas
پنج شنبه 18 فروردین 1390, 07:07 صبح
اگه منظور را درست متوجه شده باشم براساس نظر شما من یک ستون از نوع bit درنظر بگیرم ودر موقع ابدیت ویا تغیرات ان را trueکنه ؟اگه ممکنه کمب بیشتر توضیخ دهید یا بایک قطعه کد .ممنون وایا درموقع حذف رکورد هم این کار شدنی است

asd_moghadas
دوشنبه 22 فروردین 1390, 07:35 صبح
برای هر جدول یه رکورد اضافه میکنی که مشخص کنه فرستاده شده یا نه که پیش فرض نه هست. بعد که اطلاعات رو خواستی انتقال بدی اون فیلد رو تغییر میدی که ارسال شده. توی هر آپدیت هم دوباره تغییر میده که فرستاده نشده. اططلاعات رو که انتقال دادی چک کن که این کد هست یا نه اگه هست آپدیت کن
لطفا بیشتر راهنمایی کنید احتیاج به کمک خیلی فوری .بایک تکه کد من نتوانستم درست منظور شمارا متوجه بشوم ستون به جدولم اضافه کردم اما نمی دانم چکونه هربار عدد ان اضافه بشه .کوئری ان چیست ودوم این که چطور سلکت کنم وبفهمم تغییر کرده وشرط ابدیت را بنویسم

azaditafakor
دوشنبه 22 فروردین 1390, 07:56 صبح
روی ،TimeStamp فکر کن ولی . . .

مستقیما تالار پایگاه داده . هیچ ربطی به C# و dotNET نداره.

raminsoft
دوشنبه 22 فروردین 1390, 09:30 صبح
اگر همه افراد دارای ID هستن ، بنظرم میتونی دوکار انجام بدی
فرض کن مراکزت 5 تا هستن و قرار نیست اضافه بشن
به هر مرکز identity خاصی اختصاص بده مثلا مرکز 1 ای دی هاش 5 تا 5 تا از 1 شروع بشه و بقیه هم به همین شکل !
مرکز دوم ای دی از 2 شروع بشه 5 تا 5 تا ببر جلو !
روش دوم : استفاده از نوع فیلد uniqueidentifier هست . دیگه خیالت راحته که تکرای نداری

البته حتما باید چندتا فیلد درست کنی !
اولی یک فیلد برای تاریخ افزودن
دومی یک فیلد برای تاریخ بروز رسانی (البته میتونی اینو نداشته باشی چون با یکم وررفتن و نوشتن یک کوئری میتونی بفهمی چی ها تغییر کردن )

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

asd_moghadas
دوشنبه 22 فروردین 1390, 11:16 صبح
این توضیحات مربوط به این روش بود

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

دوم اینکه من دنبال کوئری ها میگردم ولی هنوز پیدا نکردم help

asd_moghadas
دوشنبه 22 فروردین 1390, 23:09 عصر
raminsoft پس کجایی؟درضمن من برنامه ام را با #C نوشته ام


روی ،TimeStamp فکر کن ولی . . .

مستقیما تالار پایگاه داده . هیچ ربطی به C# و dotNET نداره.

asd_moghadas
شنبه 27 فروردین 1390, 08:19 صبح
اگر همه افراد دارای ID هستن ، بنظرم میتونی دوکار انجام بدی
فرض کن مراکزت 5 تا هستن و قرار نیست اضافه بشن
به هر مرکز identity خاصی اختصاص بده مثلا مرکز 1 ای دی هاش 5 تا 5 تا از 1 شروع بشه و بقیه هم به همین شکل !
مرکز دوم ای دی از 2 شروع بشه 5 تا 5 تا ببر جلو !
روش دوم : استفاده از نوع فیلد uniqueidentifier هست . دیگه خیالت راحته که تکرای نداری

البته حتما باید چندتا فیلد درست کنی !
اولی یک فیلد برای تاریخ افزودن
دومی یک فیلد برای تاریخ بروز رسانی (البته میتونی اینو نداشته باشی چون با یکم وررفتن و نوشتن یک کوئری میتونی بفهمی چی ها تغییر کردن )

----
روش انتقال :
هرمرکز رو بکآپ میگیری میبری پای سرور روی یک دیتابیس دیگه بازش میکنی حالا سه تا کار باید انجام بدی ، افزودن تغییرات ، حذف آیتم های حذف شده از مراکز ، افزودن موارد جدید.
برای افزودن تغییرات باید یک دستور بنویسی که اونهایی که تایمشون تغییر کرده یا با نوشتن کوئری که اونهایی که تغییر کردن رو بره یکی یکی بروز کنه
بعدش میای مقایسه میکنی (بخاطر اینکه میگی ویرایش دارم !) البته میتونی اگر از یک جدول زمان استفاده کنی ، بگی فقط این مقایسه برای زمانهای فلان به بعد انجام بشه ! که سریع تر باشه
کار بعدی بعد از افزودن مقادیر جدید حذف داده های تکراری هست. که اینم میتونی هم با نوشتن یک کوئری انجام بدی که ببینه چیا توی جدول ای که از کلایت اومده نیست ولی توی سرور هست که اونها رو پاک کنه.
یا اینکه یک فیلد هم برای این کار در نظر بگیری که بعد از بکآپ توسط نرم افزار روی مراکز خودبخود فیلدهای مشخص شده حذف بشه ، بعدش روی سرور هم اونها رو پاک کنه./
کسی میتواند درمورد این کوئری ها در رنامه c#بیشتر توضیح بده واین که کوئری ها چگونه نوشته شود ؟