PDA

View Full Version : حرفه ای: مقایسه دیتابیس جدید با دیتابیس قدیمی و آپدیت آن



Javad_raouf
پنج شنبه 15 مهر 1389, 16:23 عصر
سلام
تا حالا شده بعد از اینکه نرم افزارتون رو به چندین نفر فروختین نرم افزارتون رو به روز کنید و در حین بروز رسانی مجبور به ایجاد تغییراتی در دیتابیس شوید؟

حال برای اینکه این تغییرات را بر روی دیتابیس مشتری انجام دهید باید همه تغییراتی را که داده ایم در جایی ثبت بکنیم و بعد بر روی دیتابیس مشتری هم این تغییرات را انجام دهیم

حال فرض کنید 10 تا مشتری دارید و نمی دانید چه تغییراتی را برای چه کسانی انجام داده اید:عصبانی++:

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

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

اگر سوالی هم برای نوشتن این نرم افزار داشتم توی همین تاپیک می پرسم
با تشکر
==================
نسخه های برنامه:
==================
لینک دانلود اولین نسخه برنامه (http://barnamenevis.org/forum/attachment.php?attachmentid=60403&d=1289982528)
لینک توضیحات این نسخه در پست 9 (http://barnamenevis.org/forum/showthread.php?p=1154490&#post1154490)

Javad_raouf
جمعه 16 مهر 1389, 19:06 عصر
برنامه تا یک حدی پیش رفته
در حال حاضر برنامه به راحتی می تونه جداول رو به روز کنه
فقط چند تا مشکل داره:
1.کلید رو نمی تونه تشخصی بده و در نتیجه وقتی دیتابیس قدیمی به روز میشه کلید نداره
2.امکان تغییر identity یک فیلد وجود نداره(کدش رو پیدا نکردم)
3.عدم تشخیص identity Seed و identity Increment
4.عدم تشخیص Default Value (که البته ره حلش رو فهمیدم و به زودی حلش می کنم)
5.مکان فیلد ها به ترتیب نیست
توضیح:
فرض کنید دیتابیس قدیمی شما جدولی دارد با چنین فیلد هایی:
f1
f2
f3
f4
و دیتابیس جدید:
f1
f2
f5
f3
f4
حال وقتی دیتابیس قدیم به روز می شود اینطوری به روز میشه:
f1
f2
f3
f4
f5
یعنی فیلد در آخر جدول اضافه میشه
6.فیلدی را حذف نمی کند
توضیح:
یعنی اگر دیتابیس قدیمی فیلدی داشته باشد که در دیتابیس جدید وجود نداشته باشد حذف نمی شود
(که البته از قصد این را گذاشتم)
7.عدم تبدیل از text به دیگر نوع داده ها
وقتی فیلدی از نوع داده text یا ntext باشه امکان تبدیلش به دیگر نوع داده ها وجود ندارد (یعنی من بلد نیستم)
---------------------------------------------
مشکلاتم فعلا همیناست
لطفا اگر کسی راه حلی برای مشکلی داره بگه

MahmoudiNik
جمعه 16 مهر 1389, 19:09 عصر
خیلی عالیه
من شخصا خیلی به همچین برنامه ای نیاز داشتم
اگر چیزی به ذهنم برسه حتما دریغ نمی کنم
راستی چیزی که باید بهش توجه بشه اینه که اول Table ها به روز بشوند بعد View ها و بعد Sp ها
در غیر این صورت ممکنه به مشکل بر بخوریم

MahmoudiNik
جمعه 16 مهر 1389, 19:15 عصر
سلام جواد جان
می تونی سورسش رو هم در اختیارمون بزاری آخه منم میخام توی توسعه ی این برنامه سهیم باشم

Javad_raouf
جمعه 16 مهر 1389, 19:19 عصر
سورس رو برات فرستادم عزیز
توی تاپیک نمی زارم و فقط به کسانی که در ساختش همکاری کنند سورس رو می دم
ولی exe رو بدون محدودیت پیوست کردم
البته هنوز خیلی ناقصه و فقط Update جداول دیتابیس رو انجام میده
لطفا دوستان تست کنند و نظراتشون رو بگن

AmirAmiri
جمعه 16 مهر 1389, 19:25 عصر
سلام. خیلی کاره خوبی میکنی.
خیلی عالیه اگه برنامه کامل بشه خیلی طرفدار پیدا میکنه از جمله خوده من.
من برای نرم افزار خودم تقریبا به چنین مشکلی برخوردم و به سختی تونستم بعضی قسمتاش رو حل کنم.
مثلا برای بروزرسانی تمامه sp ها حوصله نداشتم وجود یا عدم وجود sp ها رو با EXISTS چک کنم به همین دلیل کدی نوشتم که تمامه sp های موجود رو پیدا میکنه و پاک میکنه.
البته باید بگم که من برای بالا رفتنه امنیت، اسم تمامه sp های خودم رو با کلمه proc شروع کردم به همین دلیل توی کده زیر خیلی راحت میتونم اونا رو پیدا کنم:

DECLARE @sp_Name nvarchar(MAX)
SET @sp_Name=''
SELECT @sp_Name=NAME FROM sys.objects WHERE type='P' AND NAME LIKE 'proc_%'
WHILE(@sp_Name!='')
BEGIN
exec('DROP PROC ' + @sp_Name)
SET @sp_Name=''
SELECT @sp_Name=NAME FROM sys.objects WHERE type='P' AND NAME LIKE 'proc_%'
END

بعد از اجرای این تمامه sp ها رو دوباره CREATE میکنم پس نیازی به ALTER کردن نیست.


برای تغییر IDENTITY به ON یا OFF هم از این کد استفاده کردم که مشکل داره و ON یا OFF نمیشه و توی یک تاپیک جدید مشکل رو مطرح کردم امیدوارم به جواب برسه :

IF IDENT_INCR('[table name]') IS NOT NULL
SET IDENTITY_INSERT dbo.[table name] OFF


امیدوارم برنامه هر چی زود تر آماده بشه و در اختیار عموم قرار بگیره.
موفق و پیروز باشی.

AmirAmiri
جمعه 16 مهر 1389, 19:40 عصر
راستی شاید اینا به دردت بخوره.
برای بدست آوردن Indentity Increment از این تابع استفاده کن :

IDENT_INCR ( 'table_or_view' )
برای بدست آوردنIdendity Seed هم از این تابع استفاده کن :

IDENT_SEED ( 'table_or_view' )
اینارو که بدست آوردی متونی توی ALTER TABLE ازشون استفاده کنی.

mohammadjp
چهارشنبه 19 آبان 1389, 17:13 عصر
سلام
برنامه تا کجا پیش رفته؟

Javad_raouf
چهارشنبه 26 آبان 1389, 11:28 صبح
سلام دوستان
معذرت خواهی شدید به خاطر اینکه چند وقتیه اصلا وقت ندارم و به این تاپیک نرسیدم
--------------------------------
فقط رو حساب اینکه حرف زدم یکم روی برنامه وقت گذاشتم و در حد خیلی کم پیش بردمش
سورس برنامه رو می زارم اینجا تا بقیه دوستان بقیه قسمتاش رو کامل کنند چون من دیگه فکر نکنم وقت کنم
----------------------------------
امکانات این نسخه:
یک DGV داریم به نام لیست تغییرات که هر تغییری یافت بشود در این DGV لیست شده و کاربر می تونه با تیک زدن آن دیتابیس را به روز کند
در حال حاضر فقط جداول مقایسه می شوند و Sp ها
مقایسه جداول دو دیتابیس:
اول چک میکنه همه جداول دیتابیس جدید در دیتابیس قدیم هستند یا نه؟
اگر جدولی در دیتابیس قدیم نبود اسم جدول رو به لیست تغییرات اضافه می کنه
و اگر جدول وجود داشت باز چک می کند که آیا همه فیلد های جدول جدید در جدول قدیمی وجود دارد
اگر فیلد وجود نداشت آن را در لیست تغییرات می آورد
و اگر وجود داشت چک می کند که آیا خصوصیات(Data Type;Length;Allow Nulls) فیلد قدیم با فیلد جدید یکی است؟
اگر یکی نبود فیلد را در لیست تغییرات می آورد
و اگر یکی بود هیچ کاری نمی کند:کف:
------------------------------------------------
کاستی های مقایسه دو جدول:
1.عدم تشخیص فیلد کلید و به روز رسانی آن
2.عدم تشخیص ارتباطات و به روز رسانی آنها
(که البته مورد 1 و 2 را هم راه حلش رو یافتم ولی وقتشو ندارم)
------------------------------------------------
امکان بعدی مقایسه Stored Procedure ها است که برنامه بدون هیچ نقصی به طور کامل آنها را مقایسه کرده و به روز می سازد
------------------------------------------------
امیدوار بقیه دوستان در کامل سازی برنامه کمک کنند

و باز هم معذرت می خوام از اینکه یکم دیر شد

Javad_raouf
چهارشنبه 26 آبان 1389, 11:29 صبح
این نمایی از برنامه:
http://barnamenevis.org/forum/attachment.php?attachmentid=60405&stc=1&d=1289983131

لینک دانلود هم پیوست شد
-------------
لینک دانلود در پست اول هم قرار گرفت

shgroup
چهارشنبه 26 آبان 1389, 12:10 عصر
سلام Javad_raouf عزیز
از برنامه خوبت تشکر می کنم ادامه بده که ان شاء ا.. برنامه کامل و جامعی بشه و به درد همه دوستان خواهد خورد و برات دعا می کنند :چشمک:
اما یک مشکل که همین ابتدا من با اون برخورد کردم این بود گفتم بگم که در نسخه بعدی اصلاح بشه
مشکل با کانکشن است و خطاهای عجیب مربوط به اون.
بهترین کار اینه که یک فرم ابتدا باز بشه که اطلاعات ورود به سرور sql رو بگیره و کانکشن استرینگ رو طبق اون درست کنه اعم از نام سرور و یوزرنیم و پسورد و قستمی که بتوان جدول اول و دوم را پیدا کرد و انتخاب نمود تا آنها را با هم مقایسه کنیم.
همین
ممنون

netfa.ir
پنج شنبه 27 آبان 1389, 01:02 صبح
واقعا عالیه. تبریک می گم.
می تونی رو کمک من هم حساب کنی.
کلا اگه بشه داده ها مثلا از جدول Asnad :لبخند: منتقل بشه به جدول Docs ( نسخه پیشرفت کرده مثلا :قهقهه: )
خیلی عالی میشه.

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